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