mmc: sd: When resuming, try a little harder to init the card
authorSan Mehat <san@android.com>
Mon, 1 Dec 2008 16:52:34 +0000 (08:52 -0800)
committerArve Hjønnevåg <arve@android.com>
Mon, 8 Feb 2010 23:07:56 +0000 (15:07 -0800)
Signed-off-by: San Mehat <san@android.com>
drivers/mmc/core/sd.c

index 2d089e672c6bd27061398088d34fb5f31c6c9f06..53f15b7f1ece2508b391635152ae83cf3bed7f8a 100644 (file)
@@ -607,12 +607,31 @@ static int mmc_sd_suspend(struct mmc_host *host)
 static int mmc_sd_resume(struct mmc_host *host)
 {
        int err;
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       int retries;
+#endif
 
        BUG_ON(!host);
        BUG_ON(!host->card);
 
        mmc_claim_host(host);
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       retries = 5;
+       while (retries) {
+               err = mmc_sd_init_card(host, host->ocr, host->card);
+
+               if (err) {
+                       printk(KERN_ERR "%s: Re-init card rc = %d (retries = %d)\n",
+                              mmc_hostname(host), err, retries);
+                       mdelay(5);
+                       retries--;
+                       continue;
+               }
+               break;
+       }
+#else
        err = mmc_sd_init_card(host, host->ocr, host->card);
+#endif
        mmc_release_host(host);
 
        return err;