mmc: sdhci-pltfm: Add a common clk API implementation of get_timeout_clock
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>
This commit is contained in:
Родитель
20b92a30b5
Коммит
d005d94359
|
@ -51,7 +51,6 @@
|
||||||
#define BCM2835_SDHCI_WRITE_DELAY (((2 * 1000000) / MIN_FREQ) + 1)
|
#define BCM2835_SDHCI_WRITE_DELAY (((2 * 1000000) / MIN_FREQ) + 1)
|
||||||
|
|
||||||
struct bcm2835_sdhci {
|
struct bcm2835_sdhci {
|
||||||
struct clk *clk;
|
|
||||||
u32 shadow;
|
u32 shadow;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,27 +119,11 @@ static u8 bcm2835_sdhci_readb(struct sdhci_host *host, int reg)
|
||||||
return byte;
|
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)
|
unsigned int bcm2835_sdhci_get_min_clock(struct sdhci_host *host)
|
||||||
{
|
{
|
||||||
return MIN_FREQ;
|
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 = {
|
static struct sdhci_ops bcm2835_sdhci_ops = {
|
||||||
.write_l = bcm2835_sdhci_writel,
|
.write_l = bcm2835_sdhci_writel,
|
||||||
.write_w = bcm2835_sdhci_writew,
|
.write_w = bcm2835_sdhci_writew,
|
||||||
|
@ -148,9 +131,9 @@ static struct sdhci_ops bcm2835_sdhci_ops = {
|
||||||
.read_l = bcm2835_sdhci_readl,
|
.read_l = bcm2835_sdhci_readl,
|
||||||
.read_w = bcm2835_sdhci_readw,
|
.read_w = bcm2835_sdhci_readw,
|
||||||
.read_b = bcm2835_sdhci_readb,
|
.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_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 = {
|
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 = sdhci_priv(host);
|
||||||
pltfm_host->priv = bcm2835_host;
|
pltfm_host->priv = bcm2835_host;
|
||||||
|
|
||||||
bcm2835_host->clk = devm_clk_get(&pdev->dev, NULL);
|
pltfm_host->clk = devm_clk_get(&pdev->dev, NULL);
|
||||||
if (IS_ERR(bcm2835_host->clk)) {
|
if (IS_ERR(pltfm_host->clk)) {
|
||||||
ret = PTR_ERR(bcm2835_host->clk);
|
ret = PTR_ERR(pltfm_host->clk);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
static unsigned int esdhc_pltfm_get_min_clock(struct sdhci_host *host)
|
||||||
{
|
{
|
||||||
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(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_w = esdhc_writew_le,
|
||||||
.write_b = esdhc_writeb_le,
|
.write_b = esdhc_writeb_le,
|
||||||
.set_clock = esdhc_set_clock,
|
.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_min_clock = esdhc_pltfm_get_min_clock,
|
||||||
.get_ro = esdhc_pltfm_get_ro,
|
.get_ro = esdhc_pltfm_get_ro,
|
||||||
.platform_bus_width = esdhc_pltfm_bus_width,
|
.platform_bus_width = esdhc_pltfm_bus_width,
|
||||||
|
|
|
@ -36,6 +36,14 @@
|
||||||
#endif
|
#endif
|
||||||
#include "sdhci-pltfm.h"
|
#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 = {
|
static struct sdhci_ops sdhci_pltfm_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,8 @@ extern int sdhci_pltfm_register(struct platform_device *pdev,
|
||||||
struct sdhci_pltfm_data *pdata);
|
struct sdhci_pltfm_data *pdata);
|
||||||
extern int sdhci_pltfm_unregister(struct platform_device *pdev);
|
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
|
#ifdef CONFIG_PM
|
||||||
extern const struct dev_pm_ops sdhci_pltfm_pmops;
|
extern const struct dev_pm_ops sdhci_pltfm_pmops;
|
||||||
#define SDHCI_PLTFM_PMOPS (&sdhci_pltfm_pmops)
|
#define SDHCI_PLTFM_PMOPS (&sdhci_pltfm_pmops)
|
||||||
|
|
|
@ -111,15 +111,8 @@ static int pxav2_mmc_set_width(struct sdhci_host *host, int width)
|
||||||
return 0;
|
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 = {
|
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_reset_exit = pxav2_set_private_registers,
|
||||||
.platform_bus_width = pxav2_mmc_set_width,
|
.platform_bus_width = pxav2_mmc_set_width,
|
||||||
};
|
};
|
||||||
|
|
|
@ -163,18 +163,11 @@ static int pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
|
||||||
return 0;
|
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 = {
|
static struct sdhci_ops pxav3_sdhci_ops = {
|
||||||
.platform_reset_exit = pxav3_set_private_registers,
|
.platform_reset_exit = pxav3_set_private_registers,
|
||||||
.set_uhs_signaling = pxav3_set_uhs_signaling,
|
.set_uhs_signaling = pxav3_set_uhs_signaling,
|
||||||
.platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
|
.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
|
#ifdef CONFIG_OF
|
||||||
|
|
Загрузка…
Ссылка в новой задаче