diff options
-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; |