Commit 8afdc9cc authored by Sebastian Hesselbarth's avatar Sebastian Hesselbarth Committed by Ulf Hansson

mmc: sdhci-pxav3: Get optional core clock

Besides the I/O clock, some PXAv3 SDHCI IP also requires a core clock to
be enabled. Add an optional core clock to the corresponding driver.
Signed-off-by: default avatarSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 01ae1070
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#define SDCE_MISC_INT_EN (1<<1) #define SDCE_MISC_INT_EN (1<<1)
struct sdhci_pxa { struct sdhci_pxa {
struct clk *clk_core;
struct clk *clk_io; struct clk *clk_io;
u8 power_mode; u8 power_mode;
}; };
...@@ -320,6 +321,10 @@ static int sdhci_pxav3_probe(struct platform_device *pdev) ...@@ -320,6 +321,10 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
pltfm_host->clk = pxa->clk_io; pltfm_host->clk = pxa->clk_io;
clk_prepare_enable(pxa->clk_io); clk_prepare_enable(pxa->clk_io);
pxa->clk_core = devm_clk_get(dev, "core");
if (!IS_ERR(pxa->clk_core))
clk_prepare_enable(pxa->clk_core);
/* enable 1/8V DDR capable */ /* enable 1/8V DDR capable */
host->mmc->caps |= MMC_CAP_1_8V_DDR; host->mmc->caps |= MMC_CAP_1_8V_DDR;
...@@ -392,6 +397,8 @@ static int sdhci_pxav3_probe(struct platform_device *pdev) ...@@ -392,6 +397,8 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
err_of_parse: err_of_parse:
err_cd_req: err_cd_req:
clk_disable_unprepare(pxa->clk_io); clk_disable_unprepare(pxa->clk_io);
if (!IS_ERR(pxa->clk_core))
clk_disable_unprepare(pxa->clk_core);
err_clk_get: err_clk_get:
err_mbus_win: err_mbus_win:
sdhci_pltfm_free(pdev); sdhci_pltfm_free(pdev);
...@@ -409,6 +416,8 @@ static int sdhci_pxav3_remove(struct platform_device *pdev) ...@@ -409,6 +416,8 @@ static int sdhci_pxav3_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
clk_disable_unprepare(pxa->clk_io); clk_disable_unprepare(pxa->clk_io);
if (!IS_ERR(pxa->clk_core))
clk_disable_unprepare(pxa->clk_core);
sdhci_pltfm_free(pdev); sdhci_pltfm_free(pdev);
...@@ -456,6 +465,8 @@ static int sdhci_pxav3_runtime_suspend(struct device *dev) ...@@ -456,6 +465,8 @@ static int sdhci_pxav3_runtime_suspend(struct device *dev)
spin_unlock_irqrestore(&host->lock, flags); spin_unlock_irqrestore(&host->lock, flags);
clk_disable_unprepare(pxa->clk_io); clk_disable_unprepare(pxa->clk_io);
if (!IS_ERR(pxa->clk_core))
clk_disable_unprepare(pxa->clk_core);
return 0; return 0;
} }
...@@ -468,6 +479,8 @@ static int sdhci_pxav3_runtime_resume(struct device *dev) ...@@ -468,6 +479,8 @@ static int sdhci_pxav3_runtime_resume(struct device *dev)
unsigned long flags; unsigned long flags;
clk_prepare_enable(pxa->clk_io); clk_prepare_enable(pxa->clk_io);
if (!IS_ERR(pxa->clk_core))
clk_prepare_enable(pxa->clk_core);
spin_lock_irqsave(&host->lock, flags); spin_lock_irqsave(&host->lock, flags);
host->runtime_suspended = false; host->runtime_suspended = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment