]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
mmc: core: Add support for HS533 mode.
authorNaveen Kumar Arepalli <naveenk@nvidia.com>
Tue, 11 Nov 2014 09:54:43 +0000 (15:24 +0530)
committerNaveen Kumar Arepalli <naveenk@nvidia.com>
Wed, 12 Nov 2014 09:25:45 +0000 (01:25 -0800)
-Add support for HS533 mode.
-MMC_CAP2_HS533 is used to set HS533 frequency.

Change-Id: I30b2798e26d7323b619305607af0b1793ec50cbe
Signed-off-by: Naveen Kumar Arepalli <naveenk@nvidia.com>
Reviewed-on: http://git-master/r/601056
Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>
drivers/mmc/core/mmc.c
drivers/mmc/host/sdhci.c
include/linux/mmc/card.h
include/linux/mmc/host.h

index 7a7707080367072538c69c7b8876a05844fd2997..debde89be4e643bc1b8f68bc11d244649c5d2d56 100644 (file)
@@ -266,8 +266,12 @@ static void mmc_select_card_type(struct mmc_card *card)
        if ((caps2 & MMC_CAP2_HS400_1_8V_DDR &&
                        card_type & EXT_CSD_CARD_TYPE_UHS_DDR_1_8V) ||
            (caps2 & MMC_CAP2_HS400_1_2V_DDR &&
-                       card_type & EXT_CSD_CARD_TYPE_UHS_DDR_1_2V))
-               hs_max_dtr = MMC_HS400_MAX_DTR;
+                       card_type & EXT_CSD_CARD_TYPE_UHS_DDR_1_2V)) {
+               if (caps2 & MMC_CAP2_HS533)
+                       hs_max_dtr = MMC_HS533_MAX_DTR;
+               else
+                       hs_max_dtr = MMC_HS400_MAX_DTR;
+       }
 
        card->ext_csd.hs_max_dtr = hs_max_dtr;
        card->ext_csd.card_type = card_type;
@@ -733,7 +737,7 @@ static int mmc_select_powerclass(struct mmc_card *card,
                        index = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
                                EXT_CSD_PWR_CL_52_195 :
                                EXT_CSD_PWR_CL_DDR_52_195;
-               else if (host->ios.clock <= 200000000) {
+               else if (host->ios.clock <= 266000000) {
                        if (mmc_card_hs400(card))
                                index = EXT_CSD_PWR_CL_DDR_200;
                        else
@@ -755,7 +759,7 @@ static int mmc_select_powerclass(struct mmc_card *card,
                        index = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
                                EXT_CSD_PWR_CL_52_360 :
                                EXT_CSD_PWR_CL_DDR_52_360;
-               else if (host->ios.clock <= 200000000)
+               else if (host->ios.clock <= 266000000)
                        index = EXT_CSD_PWR_CL_200_360;
                break;
        default:
@@ -1276,7 +1280,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
 
                mmc_card_set_hs400(card);
                mmc_card_clr_highspeed(card);
-               mmc_set_clock(host, MMC_HS400_MAX_DTR);
+               mmc_set_clock(host, max_dtr);
                err = mmc_select_powerclass(card, EXT_CSD_DDR_BUS_WIDTH_8,
                                ext_csd);
                if (err) {
index 063c8e996c8e93a1d8faea095c3066000d0ad435..8bfe5bd52ba24680381f042fe8300f85c30fcc4e 100644 (file)
@@ -3758,6 +3758,10 @@ out_dma_alloc:
                        >> SDHCI_CLOCK_BASE_SHIFT;
 
        host->max_clk *= 1000000;
+
+       if (mmc->caps2 & MMC_CAP2_HS533)
+               host->max_clk = MMC_HS533_MAX_DTR;
+
        if (host->max_clk == 0 || host->quirks &
                        SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN) {
                if (!host->ops->get_max_clock) {
index 66d7cd7717ecf02a86a063c3028a8b75f6bcac55..51bea6f5d50b7cfd286eb985ab5ae3908cfe8a7f 100644 (file)
@@ -70,6 +70,7 @@ struct mmc_ext_csd {
 #define MMC_HIGH_DDR_MAX_DTR   52000000
 #define MMC_HS200_MAX_DTR      200000000
 #define MMC_HS400_MAX_DTR      200000000
+#define MMC_HS533_MAX_DTR      266000000
        unsigned int            sectors;
        unsigned int            card_type;
        unsigned int            hc_erase_size;          /* In sectors */
index 5a38b619916ebae97c9ce212fc99ff357bef7252..9dd67b0a9589289e1606f57269efadf83cde2eff 100644 (file)
@@ -325,6 +325,7 @@ struct mmc_host {
 #define MMC_CAP2_HS400         (MMC_CAP2_HS400_1_8V_DDR | \
                                 MMC_CAP2_HS400_1_2V_DDR)
 #define MMC_CAP2_EN_STROBE     (1 << 19)       /* can support enhanced strobe*/
+#define MMC_CAP2_HS533         (1 << 20)       /* can support HS533*/
        mmc_pm_flag_t           pm_caps;        /* supported pm features */
 
 #ifdef CONFIG_MMC_CLKGATE