mmc: sdhci-s3c: Do not allow frequencies higher than requested
authorTomasz Figa <tomasz.figa@gmail.com>
Sat, 11 Jan 2014 21:39:06 +0000 (22:39 +0100)
committerChris Ball <chris@printf.net>
Mon, 3 Mar 2014 15:23:39 +0000 (10:23 -0500)
This patch modifies sdhci_s3c_consider_clock() to fail if bus clock
being considered can not provide frequency lower or equal requested,
instead of returning the lowest supported.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Acked-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Jaehoon Chung <jh80.chung@samsung.com>
Acked-by; Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Chris Ball <chris@printf.net>
drivers/mmc/host/sdhci-s3c.c

index bad0e00a3e8fca6e236e94b0d8aa86dccd3d6247..d61eb5a708331d54ad9c4ea948bf7cbb4533d8da 100644 (file)
@@ -126,11 +126,18 @@ static unsigned int sdhci_s3c_consider_clock(struct sdhci_s3c *ourhost,
 
        rate = ourhost->clk_rates[src];
 
-       for (shift = 0; shift < 8; ++shift) {
+       for (shift = 0; shift <= 8; ++shift) {
                if ((rate >> shift) <= wanted)
                        break;
        }
 
+       if (shift > 8) {
+               dev_dbg(&ourhost->pdev->dev,
+                       "clk %d: rate %ld, min rate %lu > wanted %u\n",
+                       src, rate, rate / 256, wanted);
+               return UINT_MAX;
+       }
+
        dev_dbg(&ourhost->pdev->dev, "clk %d: rate %ld, want %d, got %ld\n",
                src, rate, wanted, rate >> shift);