aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mmc/host/sdhci.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 655900f55244..1dbe93232030 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2866,6 +2866,7 @@ int sdhci_add_host(struct sdhci_host *host)
2866 u32 max_current_caps; 2866 u32 max_current_caps;
2867 unsigned int ocr_avail; 2867 unsigned int ocr_avail;
2868 unsigned int override_timeout_clk; 2868 unsigned int override_timeout_clk;
2869 u32 max_clk;
2869 int ret; 2870 int ret;
2870 2871
2871 WARN_ON(host == NULL); 2872 WARN_ON(host == NULL);
@@ -3050,18 +3051,22 @@ int sdhci_add_host(struct sdhci_host *host)
3050 * Set host parameters. 3051 * Set host parameters.
3051 */ 3052 */
3052 mmc->ops = &sdhci_ops; 3053 mmc->ops = &sdhci_ops;
3053 mmc->f_max = host->max_clk; 3054 max_clk = host->max_clk;
3055
3054 if (host->ops->get_min_clock) 3056 if (host->ops->get_min_clock)
3055 mmc->f_min = host->ops->get_min_clock(host); 3057 mmc->f_min = host->ops->get_min_clock(host);
3056 else if (host->version >= SDHCI_SPEC_300) { 3058 else if (host->version >= SDHCI_SPEC_300) {
3057 if (host->clk_mul) { 3059 if (host->clk_mul) {
3058 mmc->f_min = (host->max_clk * host->clk_mul) / 1024; 3060 mmc->f_min = (host->max_clk * host->clk_mul) / 1024;
3059 mmc->f_max = host->max_clk * host->clk_mul; 3061 max_clk = host->max_clk * host->clk_mul;
3060 } else 3062 } else
3061 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300; 3063 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300;
3062 } else 3064 } else
3063 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200; 3065 mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200;
3064 3066
3067 if (!mmc->f_max || (mmc->f_max && (mmc->f_max > max_clk)))
3068 mmc->f_max = max_clk;
3069
3065 if (!(host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) { 3070 if (!(host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) {
3066 host->timeout_clk = (caps[0] & SDHCI_TIMEOUT_CLK_MASK) >> 3071 host->timeout_clk = (caps[0] & SDHCI_TIMEOUT_CLK_MASK) >>
3067 SDHCI_TIMEOUT_CLK_SHIFT; 3072 SDHCI_TIMEOUT_CLK_SHIFT;