[msm_shared/mmc]: Add support for low capacity MMC and SD cards.

CR-Fixed: 263743

Change-Id: I4c707c892ee4a1e30db5769e5de19c6692983cc5
diff --git a/platform/msm_shared/include/mmc.h b/platform/msm_shared/include/mmc.h
index 8f2c4e7..1d230c1 100755
--- a/platform/msm_shared/include/mmc.h
+++ b/platform/msm_shared/include/mmc.h
@@ -479,6 +479,7 @@
 #define MMC_BOOT_TYPE_SDHC               1

 #define MMC_BOOT_TYPE_SDIO               2

 #define MMC_BOOT_TYPE_MMCHC              3

+#define MMC_BOOT_TYPE_STD_MMC            4

     unsigned int status;

 #define MMC_BOOT_STATUS_INACTIVE         0

 #define MMC_BOOT_STATUS_ACTIVE           1

diff --git a/platform/msm_shared/mmc.c b/platform/msm_shared/mmc.c
index 5451a59..6091041 100644
--- a/platform/msm_shared/mmc.c
+++ b/platform/msm_shared/mmc.c
@@ -189,10 +189,11 @@
     {

         card->rd_timeout_ns = 100000000;

     }

-    else if( card->type == MMC_BOOT_TYPE_STD_SD )

+    else if( (card->type == MMC_BOOT_TYPE_STD_SD) || (card->type == MMC_BOOT_TYPE_STD_MMC) )

     {

         timeout_ns = 10 * ( (card->csd.taac_ns ) +

                 ( card->csd.nsac_clk_cycle / (host->mclk_rate/1000000000)));

+        card->rd_timeout_ns = timeout_ns;

     }

     else

     {

@@ -220,11 +221,12 @@
     {

         card->wr_timeout_ns = 100000000;

     }

-    else if( card->type == MMC_BOOT_TYPE_STD_SD )

+    else if( card->type == MMC_BOOT_TYPE_STD_SD || (card->type == MMC_BOOT_TYPE_STD_MMC) )

     {

         timeout_ns = 10 * ( (  card->csd.taac_ns ) +

                 ( card->csd.nsac_clk_cycle / ( host->mclk_rate/1000000000 ) ) );

         timeout_ns = timeout_ns << card->csd.r2w_factor;

+        card->wr_timeout_ns = timeout_ns;

     }

     else

     {

@@ -639,6 +641,14 @@
         return MMC_BOOT_E_CARD_BUSY;

     }

 

+    if(mmc_resp & MMC_BOOT_OCR_SEC_MODE)

+    {

+        card->type = MMC_BOOT_TYPE_MMCHC;

+    }

+    else

+    {

+        card->type = MMC_BOOT_TYPE_STD_MMC;

+    }

     return MMC_BOOT_E_SUCCESS;

 }

 

@@ -704,7 +714,7 @@
     /* CMD3 Format:

      * [31:0] stuff bits

      */

-    if(card->type == MMC_BOOT_TYPE_SDHC)

+    if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)

     {

         cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR;

         cmd.argument = 0;

@@ -819,7 +829,7 @@
     /* If we are deselecting card, we do not get response */

     if( rca == card->rca && rca)

     {

-        if(card->type == MMC_BOOT_TYPE_SDHC)

+        if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)

             cmd.resp_type = MMC_BOOT_RESP_R1B;

         else

             cmd.resp_type = MMC_BOOT_RESP_R1;

@@ -1850,7 +1860,7 @@
     return MMC_BOOT_E_SUCCESS;

 }

 

-static unsigned int mmc_boot_sd_init_card(void)

+static unsigned int mmc_boot_sd_init_card(struct mmc_boot_card* card)

 {

     unsigned int i,mmc_ret;

     unsigned int ocr_cmd_arg;

@@ -1901,7 +1911,15 @@
         }

         else if (cmd.resp[0] & MMC_BOOT_SD_DEV_READY)

         {

-            /* Check for HC later */

+            /* Check for HC */

+            if(cmd.resp[0] & (1 << 30))

+            {

+                card->type = MMC_BOOT_TYPE_SDHC;

+            }

+            else

+            {

+                card->type = MMC_BOOT_TYPE_STD_SD;

+            }

             break;

         }

         mdelay(50);

@@ -1959,12 +1977,7 @@
                     mmc_return );

 

             /* Check for sD card */

-            mmc_return = mmc_boot_sd_init_card();

-            if (mmc_return == MMC_BOOT_E_SUCCESS)

-            {

-                card->type = MMC_BOOT_TYPE_SDHC;

-            }

-

+            mmc_return = mmc_boot_sd_init_card(card);

             return mmc_return;

         }

     }while( mmc_retry < host->cmd_retry );

@@ -1977,10 +1990,6 @@
                 Initialization not completed\n", mmc_return );

         return MMC_BOOT_E_CARD_BUSY;

     }

-

-    /*Assuming high capacity mmc card*/

-    card->type = MMC_BOOT_TYPE_MMCHC;

-

     return MMC_BOOT_E_SUCCESS;

 }

 

@@ -2118,7 +2127,7 @@
         return mmc_return;

     }

 

-    if(card->type == MMC_BOOT_TYPE_SDHC)

+    if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)

     {

         mmc_return = mmc_boot_set_sd_hs(host, card);

         if(mmc_return != MMC_BOOT_E_SUCCESS)