|
@@ -943,40 +943,21 @@ static int mmc_sdio_pre_suspend(struct mmc_host *host)
|
|
|
*/
|
|
|
static int mmc_sdio_suspend(struct mmc_host *host)
|
|
|
{
|
|
|
- int i, err = 0;
|
|
|
-
|
|
|
- for (i = 0; i < host->card->sdio_funcs; i++) {
|
|
|
- struct sdio_func *func = host->card->sdio_func[i];
|
|
|
- if (func && sdio_func_present(func) && func->dev.driver) {
|
|
|
- const struct dev_pm_ops *pmops = func->dev.driver->pm;
|
|
|
- err = pmops->suspend(&func->dev);
|
|
|
- if (err)
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- while (err && --i >= 0) {
|
|
|
- struct sdio_func *func = host->card->sdio_func[i];
|
|
|
- if (func && sdio_func_present(func) && func->dev.driver) {
|
|
|
- const struct dev_pm_ops *pmops = func->dev.driver->pm;
|
|
|
- pmops->resume(&func->dev);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
|
|
|
+ if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
|
|
|
mmc_claim_host(host);
|
|
|
sdio_disable_wide(host->card);
|
|
|
mmc_release_host(host);
|
|
|
}
|
|
|
|
|
|
- if (!err && !mmc_card_keep_power(host))
|
|
|
+ if (!mmc_card_keep_power(host))
|
|
|
mmc_power_off(host);
|
|
|
|
|
|
- return err;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int mmc_sdio_resume(struct mmc_host *host)
|
|
|
{
|
|
|
- int i, err = 0;
|
|
|
+ int err = 0;
|
|
|
|
|
|
BUG_ON(!host);
|
|
|
BUG_ON(!host->card);
|
|
@@ -1019,24 +1000,6 @@ static int mmc_sdio_resume(struct mmc_host *host)
|
|
|
wake_up_process(host->sdio_irq_thread);
|
|
|
mmc_release_host(host);
|
|
|
|
|
|
- /*
|
|
|
- * If the card looked to be the same as before suspending, then
|
|
|
- * we proceed to resume all card functions. If one of them returns
|
|
|
- * an error then we simply return that error to the core and the
|
|
|
- * card will be redetected as new. It is the responsibility of
|
|
|
- * the function driver to perform further tests with the extra
|
|
|
- * knowledge it has of the card to confirm the card is indeed the
|
|
|
- * same as before suspending (same MAC address for network cards,
|
|
|
- * etc.) and return an error otherwise.
|
|
|
- */
|
|
|
- for (i = 0; !err && i < host->card->sdio_funcs; i++) {
|
|
|
- struct sdio_func *func = host->card->sdio_func[i];
|
|
|
- if (func && sdio_func_present(func) && func->dev.driver) {
|
|
|
- const struct dev_pm_ops *pmops = func->dev.driver->pm;
|
|
|
- err = pmops->resume(&func->dev);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
host->pm_flags &= ~MMC_PM_KEEP_POWER;
|
|
|
return err;
|
|
|
}
|