Loading drivers/mmc/wbsd.c +90 −16 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 */ Loading @@ -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, }, Loading @@ -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 */ Loading Loading
drivers/mmc/wbsd.c +90 −16 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 */ Loading @@ -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, }, Loading @@ -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 */ Loading