mmc: sdhci-of-esdhc: set the sd clock divisor value above 3
authorYangbo Lu <yangbo.lu@nxp.com>
Fri, 14 Jun 2019 08:29:53 +0000 (16:29 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 17 Jun 2019 11:33:44 +0000 (13:33 +0200)
This patch is to set the sd clock divisor value above 3 in tuning mode

Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-of-esdhc.c

index 68c5866..c56c7d4 100644 (file)
@@ -830,9 +830,17 @@ static int esdhc_execute_tuning(struct mmc_host *mmc, u32 opcode)
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
        struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host);
        bool hs400_tuning;
+       unsigned int clk;
        u32 val;
        int ret;
 
+       /* For tuning mode, the sd clock divisor value
+        * must be larger than 3 according to reference manual.
+        */
+       clk = esdhc->peripheral_clock / 3;
+       if (host->clock > clk)
+               esdhc_of_set_clock(host, clk);
+
        if (esdhc->quirk_limited_clk_division &&
            host->flags & SDHCI_HS400_TUNING)
                esdhc_of_set_clock(host, host->clock);