diff options
author | yangbo lu <yangbo.lu@nxp.com> | 2017-04-25 22:45:49 -0400 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2017-04-28 06:35:27 -0400 |
commit | e145ac451eb68b51e0ede4c131bd5a539fb675b6 (patch) | |
tree | 034830c2ecd85c51ce7f2609937396190ceef159 | |
parent | a04b9b47ae587e088439495f31ca740d92191a75 (diff) |
mmc: sdhci-of-esdhc: poll ESDHC_CLOCK_STABLE bit with udelay
The loop to poll ESDHC_CLOCK_STABLE bit with mdelay would waste time
because the time to stabilize is much less than 1 ms. This patch is
to use udelay instead to avoid time wasting.
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/host/sdhci-of-esdhc.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c index 7518360c03d2..77dfc5915ddc 100644 --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c | |||
@@ -445,7 +445,7 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) | |||
445 | struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); | 445 | struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); |
446 | int pre_div = 1; | 446 | int pre_div = 1; |
447 | int div = 1; | 447 | int div = 1; |
448 | u32 timeout; | 448 | ktime_t timeout; |
449 | u32 temp; | 449 | u32 temp; |
450 | 450 | ||
451 | host->mmc->actual_clock = 0; | 451 | host->mmc->actual_clock = 0; |
@@ -489,15 +489,14 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) | |||
489 | sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); | 489 | sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); |
490 | 490 | ||
491 | /* Wait max 20 ms */ | 491 | /* Wait max 20 ms */ |
492 | timeout = 20; | 492 | timeout = ktime_add_ms(ktime_get(), 20); |
493 | while (!(sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE)) { | 493 | while (!(sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE)) { |
494 | if (timeout == 0) { | 494 | if (ktime_after(ktime_get(), timeout)) { |
495 | pr_err("%s: Internal clock never stabilised.\n", | 495 | pr_err("%s: Internal clock never stabilised.\n", |
496 | mmc_hostname(host->mmc)); | 496 | mmc_hostname(host->mmc)); |
497 | return; | 497 | return; |
498 | } | 498 | } |
499 | timeout--; | 499 | udelay(10); |
500 | mdelay(1); | ||
501 | } | 500 | } |
502 | 501 | ||
503 | temp |= ESDHC_CLOCK_SDCLKEN; | 502 | temp |= ESDHC_CLOCK_SDCLKEN; |