|
@@ -638,11 +638,29 @@ static int mmc_sdio_resume(struct mmc_host *host)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+static int mmc_sdio_power_restore(struct mmc_host *host)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ BUG_ON(!host);
|
|
|
+ BUG_ON(!host->card);
|
|
|
+
|
|
|
+ mmc_claim_host(host);
|
|
|
+ ret = mmc_sdio_init_card(host, host->ocr, host->card,
|
|
|
+ (host->pm_flags & MMC_PM_KEEP_POWER));
|
|
|
+ if (!ret && host->sdio_irqs)
|
|
|
+ mmc_signal_sdio_irq(host);
|
|
|
+ mmc_release_host(host);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
static const struct mmc_bus_ops mmc_sdio_ops = {
|
|
|
.remove = mmc_sdio_remove,
|
|
|
.detect = mmc_sdio_detect,
|
|
|
.suspend = mmc_sdio_suspend,
|
|
|
.resume = mmc_sdio_resume,
|
|
|
+ .power_restore = mmc_sdio_power_restore,
|
|
|
};
|
|
|
|
|
|
|