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
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
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
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