|
@@ -1674,19 +1674,27 @@ int sdhci_add_host(struct sdhci_host *host)
|
|
|
|
|
|
host->max_clk =
|
|
|
(caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
|
|
|
+ host->max_clk *= 1000000;
|
|
|
if (host->max_clk == 0) {
|
|
|
- printk(KERN_ERR "%s: Hardware doesn't specify base clock "
|
|
|
- "frequency.\n", mmc_hostname(mmc));
|
|
|
- return -ENODEV;
|
|
|
+ if (!host->ops->get_max_clock) {
|
|
|
+ printk(KERN_ERR
|
|
|
+ "%s: Hardware doesn't specify base clock "
|
|
|
+ "frequency.\n", mmc_hostname(mmc));
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ host->max_clk = host->ops->get_max_clock(host);
|
|
|
}
|
|
|
- host->max_clk *= 1000000;
|
|
|
|
|
|
host->timeout_clk =
|
|
|
(caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
|
|
|
if (host->timeout_clk == 0) {
|
|
|
- printk(KERN_ERR "%s: Hardware doesn't specify timeout clock "
|
|
|
- "frequency.\n", mmc_hostname(mmc));
|
|
|
- return -ENODEV;
|
|
|
+ if (!host->ops->get_timeout_clock) {
|
|
|
+ printk(KERN_ERR
|
|
|
+ "%s: Hardware doesn't specify timeout clock "
|
|
|
+ "frequency.\n", mmc_hostname(mmc));
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ host->timeout_clk = host->ops->get_timeout_clock(host);
|
|
|
}
|
|
|
if (caps & SDHCI_TIMEOUT_CLK_UNIT)
|
|
|
host->timeout_clk *= 1000;
|