@@ -605,15 +605,23 @@ static int mmc_sdio_suspend(struct mmc_host *host)
static int mmc_sdio_resume(struct mmc_host *host)
{
- int i, err;
+ int i, err = 0;
BUG_ON(!host);
BUG_ON(!host->card);
/* Basic card reinitialization. */
mmc_claim_host(host);
- err = mmc_sdio_init_card(host, host->ocr, host->card,
- (host->pm_flags & MMC_PM_KEEP_POWER));
+
+ /*
+ * Simplified SDIO spec v2.00 (section 6.14 - Bus State Diagram)
+ * suggests that initialization should be skipped on powered resume.
+ */
+ if (!(host->pm_flags & MMC_PM_KEEP_POWER)) {
+ err = mmc_sdio_init_card(host, host->ocr, host->card,
+ host->pm_flags & MMC_PM_KEEP_POWER);
+ }
+
if (!err) {
/* We may have switched to 1-bit mode during suspend. */
err = sdio_enable_4bit_bus(host->card);