mmc: sd: Add retries in re-detection
authorSan Mehat <san@android.com>
Thu, 4 Dec 2008 19:18:00 +0000 (11:18 -0800)
committerColin Cross <ccross@android.com>
Thu, 30 Sep 2010 00:49:14 +0000 (17:49 -0700)
Signed-off-by: San Mehat <san@android.com>
mmc: sd: Remove debugging printk

Signed-off-by: Dima Zavin <dima@android.com>
drivers/mmc/core/sd.c

index a0db832744b85bdf5241978876cef410e8e40d75..7ab8fdc61c77e8d6c72ada528ad18701c4872484 100644 (file)
@@ -402,9 +402,6 @@ struct device_type sd_type = {
 int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid)
 {
        int err;
-#ifdef CONFIG_MMC_PARANOID_SD_INIT
-       int retries;
-#endif
 
        /*
         * Since we're changing the OCR value, we seem to
@@ -458,6 +455,9 @@ int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
        bool reinit)
 {
        int err;
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       int retries;
+#endif
 
        if (!reinit) {
                /*
@@ -684,18 +684,36 @@ static void mmc_sd_remove(struct mmc_host *host)
  */
 static void mmc_sd_detect(struct mmc_host *host)
 {
-       int err;
+       int err = 0;
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+        int retries = 5;
+#endif
 
        BUG_ON(!host);
        BUG_ON(!host->card);
-
+       
        mmc_claim_host(host);
 
        /*
         * Just check if our card has been removed.
         */
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       while(retries) {
+               err = mmc_send_status(host->card, NULL);
+               if (err) {
+                       retries--;
+                       udelay(5);
+                       continue;
+               }
+               break;
+       }
+       if (!retries) {
+               printk(KERN_ERR "%s(%s): Unable to re-detect card (%d)\n",
+                      __func__, mmc_hostname(host), err);
+       }
+#else
        err = mmc_send_status(host->card, NULL);
-
+#endif
        mmc_release_host(host);
 
        if (err) {
@@ -804,6 +822,9 @@ static void mmc_sd_attach_bus_ops(struct mmc_host *host)
 int mmc_attach_sd(struct mmc_host *host, u32 ocr)
 {
        int err;
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       int retries;
+#endif
 
        BUG_ON(!host);
        WARN_ON(!host->claimed);
@@ -852,9 +873,27 @@ int mmc_attach_sd(struct mmc_host *host, u32 ocr)
        /*
         * Detect and init the card.
         */
+#ifdef CONFIG_MMC_PARANOID_SD_INIT
+       retries = 5;
+       while (retries) {
+               err = mmc_sd_init_card(host, host->ocr, NULL);
+               if (err) {
+                       retries--;
+                       continue;
+               }
+               break;
+       }
+
+       if (!retries) {
+               printk(KERN_ERR "%s: mmc_sd_init_card() failure (err = %d)\n",
+                      mmc_hostname(host), err);
+               goto err;
+       }
+#else
        err = mmc_sd_init_card(host, host->ocr, NULL);
        if (err)
                goto err;
+#endif
 
        mmc_release_host(host);