mmc: sdhci-pltfm: Add a common clk API implementation of get_timeout_clock
authorLars-Peter Clausen <lars@metafoo.de>
Mon, 28 Jan 2013 18:27:12 +0000 (19:27 +0100)
committerChris Ball <cjb@laptop.org>
Sun, 24 Feb 2013 19:37:09 +0000 (14:37 -0500)
Quite a few drivers have a implementation of the get_timeout_clock
callback which simply returns the result of clk_get_rate on the device's
clock. This patch adds a common implementation of this to the sdhci-pltfm
module and replaces all custom implementations with the common one.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Tested-by: Stephen Warren <swarren@wwwdotorg.org>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Tested-by: Kevin Liu <kliu5@marvell.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/sdhci-bcm2835.c
drivers/mmc/host/sdhci-esdhc-imx.c
drivers/mmc/host/sdhci-pltfm.c
drivers/mmc/host/sdhci-pltfm.h
drivers/mmc/host/sdhci-pxav2.c
drivers/mmc/host/sdhci-pxav3.c

index 453825f..1e97b89 100644 (file)
@@ -51,7 +51,6 @@
 #define BCM2835_SDHCI_WRITE_DELAY      (((2 * 1000000) / MIN_FREQ) + 1)
 
 struct bcm2835_sdhci {
-       struct clk *clk;
        u32 shadow;
 };
 
@@ -120,27 +119,11 @@ static u8 bcm2835_sdhci_readb(struct sdhci_host *host, int reg)
        return byte;
 }
 
-static unsigned int bcm2835_sdhci_get_max_clock(struct sdhci_host *host)
-{
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-       struct bcm2835_sdhci *bcm2835_host = pltfm_host->priv;
-
-       return clk_get_rate(bcm2835_host->clk);
-}
-
 unsigned int bcm2835_sdhci_get_min_clock(struct sdhci_host *host)
 {
        return MIN_FREQ;
 }
 
-unsigned int bcm2835_sdhci_get_timeout_clock(struct sdhci_host *host)
-{
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-       struct bcm2835_sdhci *bcm2835_host = pltfm_host->priv;
-
-       return clk_get_rate(bcm2835_host->clk);
-}
-
 static struct sdhci_ops bcm2835_sdhci_ops = {
        .write_l = bcm2835_sdhci_writel,
        .write_w = bcm2835_sdhci_writew,
@@ -148,9 +131,9 @@ static struct sdhci_ops bcm2835_sdhci_ops = {
        .read_l = bcm2835_sdhci_readl,
        .read_w = bcm2835_sdhci_readw,
        .read_b = bcm2835_sdhci_readb,
-       .get_max_clock = bcm2835_sdhci_get_max_clock,
+       .get_max_clock = sdhci_pltfm_clk_get_max_clock,
        .get_min_clock = bcm2835_sdhci_get_min_clock,
-       .get_timeout_clock = bcm2835_sdhci_get_timeout_clock,
+       .get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
 };
 
 static struct sdhci_pltfm_data bcm2835_sdhci_pdata = {
@@ -180,9 +163,9 @@ static int bcm2835_sdhci_probe(struct platform_device *pdev)
        pltfm_host = sdhci_priv(host);
        pltfm_host->priv = bcm2835_host;
 
-       bcm2835_host->clk = devm_clk_get(&pdev->dev, NULL);
-       if (IS_ERR(bcm2835_host->clk)) {
-               ret = PTR_ERR(bcm2835_host->clk);
+       pltfm_host->clk = devm_clk_get(&pdev->dev, NULL);
+       if (IS_ERR(pltfm_host->clk)) {
+               ret = PTR_ERR(pltfm_host->clk);
                goto err;
        }
 
index f7ee5e6..78ac002 100644 (file)
@@ -351,13 +351,6 @@ static void esdhc_writeb_le(struct sdhci_host *host, u8 val, int reg)
        }
 }
 
-static unsigned int esdhc_pltfm_get_max_clock(struct sdhci_host *host)
-{
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-
-       return clk_get_rate(pltfm_host->clk);
-}
-
 static unsigned int esdhc_pltfm_get_min_clock(struct sdhci_host *host)
 {
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -413,7 +406,7 @@ static struct sdhci_ops sdhci_esdhc_ops = {
        .write_w = esdhc_writew_le,
        .write_b = esdhc_writeb_le,
        .set_clock = esdhc_set_clock,
-       .get_max_clock = esdhc_pltfm_get_max_clock,
+       .get_max_clock = sdhci_pltfm_clk_get_max_clock,
        .get_min_clock = esdhc_pltfm_get_min_clock,
        .get_ro = esdhc_pltfm_get_ro,
        .platform_bus_width = esdhc_pltfm_bus_width,
index d4283ef..3145a78 100644 (file)
 #endif
 #include "sdhci-pltfm.h"
 
+unsigned int sdhci_pltfm_clk_get_max_clock(struct sdhci_host *host)
+{
+       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+       return clk_get_rate(pltfm_host->clk);
+}
+EXPORT_SYMBOL_GPL(sdhci_pltfm_clk_get_max_clock);
+
 static struct sdhci_ops sdhci_pltfm_ops = {
 };
 
index 37e0e18..153b6c5 100644 (file)
@@ -98,6 +98,8 @@ extern int sdhci_pltfm_register(struct platform_device *pdev,
                                struct sdhci_pltfm_data *pdata);
 extern int sdhci_pltfm_unregister(struct platform_device *pdev);
 
+extern unsigned int sdhci_pltfm_clk_get_max_clock(struct sdhci_host *host);
+
 #ifdef CONFIG_PM
 extern const struct dev_pm_ops sdhci_pltfm_pmops;
 #define SDHCI_PLTFM_PMOPS (&sdhci_pltfm_pmops)
index 7e57565..eeb7d43 100644 (file)
@@ -111,15 +111,8 @@ static int pxav2_mmc_set_width(struct sdhci_host *host, int width)
        return 0;
 }
 
-static u32 pxav2_get_max_clock(struct sdhci_host *host)
-{
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-
-       return clk_get_rate(pltfm_host->clk);
-}
-
 static struct sdhci_ops pxav2_sdhci_ops = {
-       .get_max_clock = pxav2_get_max_clock,
+       .get_max_clock = sdhci_pltfm_clk_get_max_clock,
        .platform_reset_exit = pxav2_set_private_registers,
        .platform_bus_width = pxav2_mmc_set_width,
 };
index 3d20c10..f09877f 100644 (file)
@@ -163,18 +163,11 @@ static int pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
        return 0;
 }
 
-static u32 pxav3_get_max_clock(struct sdhci_host *host)
-{
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-
-       return clk_get_rate(pltfm_host->clk);
-}
-
 static struct sdhci_ops pxav3_sdhci_ops = {
        .platform_reset_exit = pxav3_set_private_registers,
        .set_uhs_signaling = pxav3_set_uhs_signaling,
        .platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
-       .get_max_clock = pxav3_get_max_clock,
+       .get_max_clock = sdhci_pltfm_clk_get_max_clock,
 };
 
 #ifdef CONFIG_OF