adc: rk30: enable pclk_saradc
author黄涛 <huangtao@rock-chips.com>
Thu, 10 May 2012 12:10:19 +0000 (20:10 +0800)
committer黄涛 <huangtao@rock-chips.com>
Thu, 10 May 2012 12:10:19 +0000 (20:10 +0800)
drivers/adc/plat/rk30_adc.c

index d4dd046de847b17f1f4d09f13782b6799ff35ee8..90a49d8de0af4d17f2e8eb8242b9eab0d035354e 100755 (executable)
@@ -14,7 +14,8 @@
 struct rk30_adc_device {\r
        int                      irq;\r
        void __iomem            *regs;\r
-       struct clk *            clk;\r
+       struct clk              *clk;\r
+       struct clk              *pclk;\r
        struct resource         *ioarea;\r
        struct adc_host         *adc;\r
 };\r
@@ -123,17 +124,26 @@ static int rk30_adc_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "failed to attach adc irq\n");\r
                goto err_alloc;\r
        }\r
+\r
+       dev->pclk = clk_get(&pdev->dev, "pclk_saradc");\r
+       if (IS_ERR(dev->pclk)) {\r
+               dev_err(&pdev->dev, "failed to get adc pclk\n");\r
+               ret = PTR_ERR(dev->pclk);\r
+               goto err_irq;\r
+       }\r
+       clk_enable(dev->pclk);\r
+\r
        dev->clk = clk_get(&pdev->dev, "saradc");\r
        if (IS_ERR(dev->clk)) {\r
                dev_err(&pdev->dev, "failed to get adc clock\n");\r
                ret = PTR_ERR(dev->clk);\r
-               goto err_irq;\r
+               goto err_pclk;\r
        }\r
 \r
        ret = clk_set_rate(dev->clk, ADC_CLK_RATE * 1000 * 1000);\r
        if(ret < 0) {\r
                dev_err(&pdev->dev, "failed to set adc clk\n");\r
-               goto err_clk;\r
+               goto err_clk2;\r
        }\r
        clk_enable(dev->clk);\r
 \r
@@ -163,9 +173,15 @@ static int rk30_adc_probe(struct platform_device *pdev)
  err_ioarea:\r
        release_resource(dev->ioarea);\r
        kfree(dev->ioarea);\r
-       clk_disable(dev->clk);\r
 \r
  err_clk:\r
+       clk_disable(dev->clk);\r
+\r
+ err_pclk:\r
+       clk_disable(dev->pclk);\r
+       clk_put(dev->pclk);\r
+\r
+ err_clk2:\r
        clk_put(dev->clk);\r
 \r
  err_irq:\r
@@ -186,6 +202,8 @@ static int rk30_adc_remove(struct platform_device *pdev)
        free_irq(dev->irq, dev);\r
        clk_disable(dev->clk);\r
        clk_put(dev->clk);\r
+       clk_disable(dev->pclk);\r
+       clk_put(dev->pclk);\r
        adc_free_host(dev->adc);\r
 \r
        return 0;\r