mmc: mediatek: do not tune data for HS400 mode
authorChaotian Jing <chaotian.jing@mediatek.com>
Thu, 30 Jun 2016 02:00:58 +0000 (10:00 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 25 Jul 2016 08:34:31 +0000 (10:34 +0200)
for hs400 mode, should only tune DS delay, should not
tune PAD_TUNE for data path.
if eMMC will run at hs400 mode, do not tune data while
call ops->execute_tuning().

Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mtk-sd.c

index 5642f71f8bf0d04b01cdedfa7b861556556100b7..4d7ce6586e57fa00706a1c3f157eda29a41ef3e3 100644 (file)
@@ -326,6 +326,7 @@ struct msdc_host {
        unsigned char timing;
        bool vqmmc_enabled;
        u32 hs400_ds_delay;
+       bool hs400_mode;        /* current eMMC will run at hs400 mode */
        struct msdc_save_para save_para; /* used when gate HCLK */
 };
 
@@ -1402,9 +1403,11 @@ static int msdc_execute_tuning(struct mmc_host *mmc, u32 opcode)
                dev_err(host->dev, "Tune response fail!\n");
                return ret;
        }
-       ret = msdc_tune_data(mmc, opcode);
-       if (ret == -EIO)
-               dev_err(host->dev, "Tune data fail!\n");
+       if (host->hs400_mode == false) {
+               ret = msdc_tune_data(mmc, opcode);
+               if (ret == -EIO)
+                       dev_err(host->dev, "Tune data fail!\n");
+       }
 
        return ret;
 }
@@ -1412,6 +1415,7 @@ static int msdc_execute_tuning(struct mmc_host *mmc, u32 opcode)
 static int msdc_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios)
 {
        struct msdc_host *host = mmc_priv(mmc);
+       host->hs400_mode = true;
 
        writel(host->hs400_ds_delay, host->base + PAD_DS_TUNE);
        return 0;