From 0892546599a53ff20ec64834958096135e43b19b Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Tue, 10 Aug 2010 18:01:56 -0700 Subject: [PATCH] --- yaml --- r: 208441 b: refs/heads/master c: ce5f036bbbfc6c21d7b55b8fdaa2e2bd56392d94 h: refs/heads/master i: 208439: fa427e26953546d7fb092ed9267d968b9a207823 v: v3 --- [refs] | 2 +- trunk/drivers/mmc/host/sdhci-s3c.c | 27 +++++++++++++++++++++++++++ trunk/drivers/mmc/host/sdhci.c | 3 +-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e90fe30494b3..114030e6e5d0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3fe42e077f65351503f5004031549db330bb105e +refs/heads/master: ce5f036bbbfc6c21d7b55b8fdaa2e2bd56392d94 diff --git a/trunk/drivers/mmc/host/sdhci-s3c.c b/trunk/drivers/mmc/host/sdhci-s3c.c index d7058eee95f9..47138afea2b5 100644 --- a/trunk/drivers/mmc/host/sdhci-s3c.c +++ b/trunk/drivers/mmc/host/sdhci-s3c.c @@ -203,9 +203,36 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock) } } +/** + * sdhci_s3c_get_min_clock - callback to get minimal supported clock value + * @host: The SDHCI host being queried + * + * To init mmc host properly a minimal clock value is needed. For high system + * bus clock's values the standard formula gives values out of allowed range. + * The clock still can be set to lower values, if clock source other then + * system bus is selected. +*/ +static unsigned int sdhci_s3c_get_min_clock(struct sdhci_host *host) +{ + struct sdhci_s3c *ourhost = to_s3c(host); + unsigned int delta, min = UINT_MAX; + int src; + + for (src = 0; src < MAX_BUS_CLK; src++) { + delta = sdhci_s3c_consider_clock(ourhost, src, 0); + if (delta == UINT_MAX) + continue; + /* delta is a negative value in this case */ + if (-delta < min) + min = -delta; + } + return min; +} + static struct sdhci_ops sdhci_s3c_ops = { .get_max_clock = sdhci_s3c_get_max_clk, .set_clock = sdhci_s3c_set_clock, + .get_min_clock = sdhci_s3c_get_min_clock, }; static int __devinit sdhci_s3c_probe(struct platform_device *pdev) diff --git a/trunk/drivers/mmc/host/sdhci.c b/trunk/drivers/mmc/host/sdhci.c index 3896069bd984..70001ecb6ebe 100644 --- a/trunk/drivers/mmc/host/sdhci.c +++ b/trunk/drivers/mmc/host/sdhci.c @@ -1791,8 +1791,7 @@ int sdhci_add_host(struct sdhci_host *host) * Set host parameters. */ mmc->ops = &sdhci_ops; - if (host->quirks & SDHCI_QUIRK_NONSTANDARD_CLOCK && - host->ops->get_min_clock) + if (host->ops->get_min_clock) mmc->f_min = host->ops->get_min_clock(host); else mmc->f_min = host->max_clk / 256;