From: Janusz Krzysztofik <jmkrzy...@gmail.com>

The driver, OMAP specific, now omits clk_prepare/unprepare() steps, not
supported by OMAP custom implementation of clock API.  However, non-CCF
stubs of those functions exist for use on such platforms until converted
to CCF.

Update the driver to be compatible with CCF implementation of clock API.

Signed-off-by: Janusz Krzysztofik <jmkrzy...@gmail.com>
Signed-off-by: Arnd Bergmann <a...@arndb.de>
---
 drivers/mmc/host/omap.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c
index 5e5af34090f1..57d39283924d 100644
--- a/drivers/mmc/host/omap.c
+++ b/drivers/mmc/host/omap.c
@@ -1374,7 +1374,7 @@ static int mmc_omap_probe(struct platform_device *pdev)
        host->iclk = clk_get(&pdev->dev, "ick");
        if (IS_ERR(host->iclk))
                return PTR_ERR(host->iclk);
-       clk_enable(host->iclk);
+       clk_prepare_enable(host->iclk);
 
        host->fclk = clk_get(&pdev->dev, "fck");
        if (IS_ERR(host->fclk)) {
@@ -1382,16 +1382,18 @@ static int mmc_omap_probe(struct platform_device *pdev)
                goto err_free_iclk;
        }
 
+       ret = clk_prepare(host->fclk);
+       if (ret)
+               goto err_put_fclk;
+
        host->dma_tx_burst = -1;
        host->dma_rx_burst = -1;
 
        host->dma_tx = dma_request_chan(&pdev->dev, "tx");
        if (IS_ERR(host->dma_tx)) {
                ret = PTR_ERR(host->dma_tx);
-               if (ret == -EPROBE_DEFER) {
-                       clk_put(host->fclk);
-                       goto err_free_iclk;
-               }
+               if (ret == -EPROBE_DEFER)
+                       goto err_free_fclk;
 
                host->dma_tx = NULL;
                dev_warn(host->dev, "TX DMA channel request failed\n");
@@ -1403,8 +1405,7 @@ static int mmc_omap_probe(struct platform_device *pdev)
                if (ret == -EPROBE_DEFER) {
                        if (host->dma_tx)
                                dma_release_channel(host->dma_tx);
-                       clk_put(host->fclk);
-                       goto err_free_iclk;
+                       goto err_free_fclk;
                }
 
                host->dma_rx = NULL;
@@ -1454,9 +1455,12 @@ static int mmc_omap_probe(struct platform_device *pdev)
                dma_release_channel(host->dma_tx);
        if (host->dma_rx)
                dma_release_channel(host->dma_rx);
+err_free_fclk:
+       clk_unprepare(host->fclk);
+err_put_fclk:
        clk_put(host->fclk);
 err_free_iclk:
-       clk_disable(host->iclk);
+       clk_disable_unprepare(host->iclk);
        clk_put(host->iclk);
        return ret;
 }
@@ -1476,8 +1480,9 @@ static int mmc_omap_remove(struct platform_device *pdev)
 
        mmc_omap_fclk_enable(host, 0);
        free_irq(host->irq, host);
+       clk_unprepare(host->fclk);
        clk_put(host->fclk);
-       clk_disable(host->iclk);
+       clk_disable_unprepare(host->iclk);
        clk_put(host->iclk);
 
        if (host->dma_tx)
-- 
2.29.2

Reply via email to