]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
msm: iommu: Convert to clk_prepare/unprepare
authorStephen Boyd <sboyd@codeaurora.org>
Mon, 17 Jun 2013 17:43:12 +0000 (10:43 -0700)
committerDavid Brown <davidb@codeaurora.org>
Mon, 24 Jun 2013 20:06:42 +0000 (13:06 -0700)
Add calls to clk_prepare and unprepare so that MSM can migrate to
the common clock framework. We never unprepare the clocks until
driver remove because the clocks are enabled and disabled in irq
context. Finer grained power management is possible in the future
via runtime power management techniques.

Cc: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Joerg Roedel <joro@8bytes.org>
Signed-off-by: David Brown <davidb@codeaurora.org>
drivers/iommu/msm_iommu_dev.c

index 8e8fb079852d22ca124a5c0ff7bbce9d3f5ec365..d344f6ab8c12778ea4c419f29251535ca9e06da1 100644 (file)
@@ -160,7 +160,7 @@ static int msm_iommu_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       ret = clk_enable(iommu_pclk);
+       ret = clk_prepare_enable(iommu_pclk);
        if (ret)
                goto fail_enable;
 
@@ -170,7 +170,7 @@ static int msm_iommu_probe(struct platform_device *pdev)
                if (clk_get_rate(iommu_clk) == 0)
                        clk_set_min_rate(iommu_clk, 1);
 
-               ret = clk_enable(iommu_clk);
+               ret = clk_prepare_enable(iommu_clk);
                if (ret) {
                        clk_put(iommu_clk);
                        goto fail_pclk;
@@ -261,7 +261,7 @@ fail_clk:
                clk_put(iommu_clk);
        }
 fail_pclk:
-       clk_disable(iommu_pclk);
+       clk_disable_unprepare(iommu_pclk);
 fail_enable:
        clk_put(iommu_pclk);
 fail:
@@ -275,8 +275,11 @@ static int msm_iommu_remove(struct platform_device *pdev)
 
        drv = platform_get_drvdata(pdev);
        if (drv) {
-               if (drv->clk)
+               if (drv->clk) {
+                       clk_unprepare(drv->clk);
                        clk_put(drv->clk);
+               }
+               clk_unprepare(drv->pclk);
                clk_put(drv->pclk);
                memset(drv, 0, sizeof(*drv));
                kfree(drv);
@@ -314,14 +317,14 @@ static int msm_iommu_ctx_probe(struct platform_device *pdev)
        INIT_LIST_HEAD(&ctx_drvdata->attached_elm);
        platform_set_drvdata(pdev, ctx_drvdata);
 
-       ret = clk_enable(drvdata->pclk);
+       ret = clk_prepare_enable(drvdata->pclk);
        if (ret)
                goto fail;
 
        if (drvdata->clk) {
-               ret = clk_enable(drvdata->clk);
+               ret = clk_prepare_enable(drvdata->clk);
                if (ret) {
-                       clk_disable(drvdata->pclk);
+                       clk_disable_unprepare(drvdata->pclk);
                        goto fail;
                }
        }