[PATCH 2/2] mtd: fsmc_nand: Add clk_{un}prepare() support
Viresh Kumar
viresh.kumar at st.com
Tue Apr 17 04:56:18 EDT 2012
clk_{un}prepare is mandatory for platforms using common clock framework. Since
this driver is used by SPEAr platform, which supports common clock framework,
add clk_{un}prepare() support for it.
Signed-off-by: Viresh Kumar <viresh.kumar at st.com>
---
drivers/mtd/nand/fsmc_nand.c | 24 ++++++++++++++++++++++--
1 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c
index 1b8330e..29d03b6 100644
--- a/drivers/mtd/nand/fsmc_nand.c
+++ b/drivers/mtd/nand/fsmc_nand.c
@@ -994,6 +994,10 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
return PTR_ERR(host->clk);
}
+ ret = clk_prepare(host->clk);
+ if (ret)
+ goto err_clk_prepare;
+
ret = clk_enable(host->clk);
if (ret)
goto err_clk_enable;
@@ -1178,6 +1182,8 @@ err_req_write_chnl:
err_req_read_chnl:
clk_disable(host->clk);
err_clk_enable:
+ clk_unprepare(host->clk);
+err_clk_prepare:
clk_put(host->clk);
return ret;
}
@@ -1199,6 +1205,7 @@ static int fsmc_nand_remove(struct platform_device *pdev)
dma_release_channel(host->read_dma_chan);
}
clk_disable(host->clk);
+ clk_unprepare(host->clk);
clk_put(host->clk);
}
@@ -1209,16 +1216,29 @@ static int fsmc_nand_remove(struct platform_device *pdev)
static int fsmc_nand_suspend(struct device *dev)
{
struct fsmc_nand_data *host = dev_get_drvdata(dev);
- if (host)
+ if (host) {
clk_disable(host->clk);
+ clk_unprepare(host->clk);
+ }
return 0;
}
static int fsmc_nand_resume(struct device *dev)
{
struct fsmc_nand_data *host = dev_get_drvdata(dev);
+ int ret;
+
if (host) {
- clk_enable(host->clk);
+ ret = clk_prepare(host->clk);
+ if (ret)
+ return ret;
+
+ ret = clk_enable(host->clk);
+ if (ret) {
+ clk_unprepare(host->clk);
+ return ret;
+ }
+
fsmc_nand_setup(host->regs_va, host->bank,
host->nand.options & NAND_BUSWIDTH_16,
host->dev_timings);
--
1.7.9
More information about the linux-mtd
mailing list