Skip to content

Commit

Permalink
[MMC] wbsd pnp suspend
Browse files Browse the repository at this point in the history
Allow the wbsd driver to use the new suspend/resume functions added to
the PnP layer.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Pierre Ossman authored and Russell King committed Jan 8, 2006
1 parent b9abaa3 commit 5e68d95
Showing 1 changed file with 90 additions and 16 deletions.
106 changes: 90 additions & 16 deletions drivers/mmc/wbsd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1980,37 +1980,53 @@ static void __devexit wbsd_pnp_remove(struct pnp_dev * dev)

#ifdef CONFIG_PM

static int wbsd_suspend(struct platform_device *dev, pm_message_t state)
static int wbsd_suspend(struct wbsd_host *host, pm_message_t state)
{
BUG_ON(host == NULL);

return mmc_suspend_host(host->mmc, state);
}

static int wbsd_resume(struct wbsd_host *host)
{
BUG_ON(host == NULL);

wbsd_init_device(host);

return mmc_resume_host(host->mmc);
}

static int wbsd_platform_suspend(struct platform_device *dev, pm_message_t state)
{
struct mmc_host *mmc = platform_get_drvdata(dev);
struct wbsd_host *host;
int ret;

if (!mmc)
if (mmc == NULL)
return 0;

DBG("Suspending...\n");

ret = mmc_suspend_host(mmc, state);
if (!ret)
return ret;
DBGF("Suspending...\n");

host = mmc_priv(mmc);

ret = wbsd_suspend(host, state);
if (ret)
return ret;

wbsd_chip_poweroff(host);

return 0;
}

static int wbsd_resume(struct platform_device *dev)
static int wbsd_platform_resume(struct platform_device *dev)
{
struct mmc_host *mmc = platform_get_drvdata(dev);
struct wbsd_host *host;

if (!mmc)
if (mmc == NULL)
return 0;

DBG("Resuming...\n");
DBGF("Resuming...\n");

host = mmc_priv(mmc);

Expand All @@ -2021,15 +2037,70 @@ static int wbsd_resume(struct platform_device *dev)
*/
mdelay(5);

wbsd_init_device(host);
return wbsd_resume(host);
}

#ifdef CONFIG_PNP

static int wbsd_pnp_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
{
struct mmc_host *mmc = dev_get_drvdata(&pnp_dev->dev);
struct wbsd_host *host;

if (mmc == NULL)
return 0;

return mmc_resume_host(mmc);
DBGF("Suspending...\n");

host = mmc_priv(mmc);

return wbsd_suspend(host, state);
}

static int wbsd_pnp_resume(struct pnp_dev *pnp_dev)
{
struct mmc_host *mmc = dev_get_drvdata(&pnp_dev->dev);
struct wbsd_host *host;

if (mmc == NULL)
return 0;

DBGF("Resuming...\n");

host = mmc_priv(mmc);

/*
* See if chip needs to be configured.
*/
if (host->config != 0)
{
if (!wbsd_chip_validate(host))
{
printk(KERN_WARNING DRIVER_NAME
": PnP active but chip not configured! "
"You probably have a buggy BIOS. "
"Configuring chip manually.\n");
wbsd_chip_config(host);
}
}

/*
* Allow device to initialise itself properly.
*/
mdelay(5);

return wbsd_resume(host);
}

#endif /* CONFIG_PNP */

#else /* CONFIG_PM */

#define wbsd_suspend NULL
#define wbsd_resume NULL
#define wbsd_platform_suspend NULL
#define wbsd_platform_resume NULL

#define wbsd_pnp_suspend NULL
#define wbsd_pnp_resume NULL

#endif /* CONFIG_PM */

Expand All @@ -2039,8 +2110,8 @@ static struct platform_driver wbsd_driver = {
.probe = wbsd_probe,
.remove = __devexit_p(wbsd_remove),

.suspend = wbsd_suspend,
.resume = wbsd_resume,
.suspend = wbsd_platform_suspend,
.resume = wbsd_platform_resume,
.driver = {
.name = DRIVER_NAME,
},
Expand All @@ -2053,6 +2124,9 @@ static struct pnp_driver wbsd_pnp_driver = {
.id_table = pnp_dev_table,
.probe = wbsd_pnp_probe,
.remove = __devexit_p(wbsd_pnp_remove),

.suspend = wbsd_pnp_suspend,
.resume = wbsd_pnp_resume,
};

#endif /* CONFIG_PNP */
Expand Down

0 comments on commit 5e68d95

Please sign in to comment.