mmc: core: Fix HS switch failure in mmc_select_hs400
[firefly-linux-kernel-4.4.55.git] / drivers / mmc / core / mmc.c
index 7dfdd7e6c77e3bc081d1fc45d20dcc3c2ef7a515..14d923216d4a093a16911595ebfa59f9c13f0e52 100644 (file)
@@ -1083,10 +1083,6 @@ static int mmc_select_hs400(struct mmc_card *card)
        if (host->caps & MMC_CAP_WAIT_WHILE_BUSY)
                send_status = false;
 
-       /* Reduce frequency to HS frequency */
-       max_dtr = card->ext_csd.hs_max_dtr;
-       mmc_set_clock(host, max_dtr);
-
        /* Switch card to HS mode */
        val = EXT_CSD_TIMING_HS;
        err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
@@ -1102,6 +1098,10 @@ static int mmc_select_hs400(struct mmc_card *card)
        /* Set host controller to HS timing */
        mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
 
+       /* Reduce frequency to HS frequency */
+       max_dtr = card->ext_csd.hs_max_dtr;
+       mmc_set_clock(host, max_dtr);
+
        if (!send_status) {
                err = mmc_switch_status(card);
                if (err)