diff options
author | Aisheng Dong <b29396@freescale.com> | 2014-08-27 09:26:27 +0200 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2014-09-09 13:59:20 +0200 |
commit | a6ff5aeb9b31f7b71a8566f8e130ad66bd103d20 (patch) | |
tree | 7dfd803c2960ead2b18bccceaec60c41757aa83b /drivers/mmc/host/sdhci.c | |
parent | mmc: tmio-mmc: Add support for SDHI on new R-Car Gen2 SoCs (diff) | |
download | linux-a6ff5aeb9b31f7b71a8566f8e130ad66bd103d20.tar.xz linux-a6ff5aeb9b31f7b71a8566f8e130ad66bd103d20.zip |
mmc: sdhci: add platform get_max_timeout_count hook
Currently the max timeout count is hardcode to 1 << 27 for calcuate
the max_busy_timeout, however, for some platforms the max timeout
count may not be 1 << 27, e.g. i.MX uSDHC is 1 << 28.
Thus 1 << 27 is not correct for such platform.
It is also possible that other platforms may have different values.
To be flexible, we add a get_max_timeout_count hook to get the correct
maximum timeout value for these platforms.
Reviewed-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Dong Aisheng <b29396@freescale.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 4cc2ff90eeef..2ba9c4b8508d 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1197,7 +1197,10 @@ clock_set: if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK) { host->timeout_clk = host->mmc->actual_clock / 1000; host->mmc->max_busy_timeout = - (1 << 27) / host->timeout_clk; + host->ops->get_max_timeout_count ? + host->ops->get_max_timeout_count(host) : + 1 << 27; + host->mmc->max_busy_timeout /= host->timeout_clk; } } @@ -2937,7 +2940,9 @@ int sdhci_add_host(struct sdhci_host *host) if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK) host->timeout_clk = mmc->f_max / 1000; - mmc->max_busy_timeout = (1 << 27) / host->timeout_clk; + mmc->max_busy_timeout = host->ops->get_max_timeout_count ? + host->ops->get_max_timeout_count(host) : 1 << 27; + mmc->max_busy_timeout /= host->timeout_clk; mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23; mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; |