@@ -1884,7 +1884,13 @@ int sdhci_add_host(struct sdhci_host *host)
else
mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200;
- mmc->f_max = host->max_clk;
+ if (host->ops->get_f_max_clock) {
+ mmc->f_max = host->ops->get_f_max_clock(host);
+ if (mmc->f_max > host->max_clk)
+ mmc->f_max = host->max_clk;
+ } else
+ mmc->f_max = host->max_clk;
+
mmc->caps |= MMC_CAP_SDIO_IRQ;
/*
@@ -224,6 +224,7 @@ struct sdhci_ops {
unsigned int (*get_ro)(struct sdhci_host *host);
void (*platform_reset_enter)(struct sdhci_host *host, u8 mask);
void (*platform_reset_exit)(struct sdhci_host *host, u8 mask);
+ unsigned int (*get_f_max_clock)(struct sdhci_host *host);
};
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS