writel(0, adc->base + LPC18XX_ADC_CR);
 }
 
-static void lpc18xx_clk_disable(void *clk)
-{
-       clk_disable_unprepare(clk);
-}
-
 static void lpc18xx_regulator_disable(void *vref)
 {
        regulator_disable(vref);
        if (IS_ERR(adc->base))
                return PTR_ERR(adc->base);
 
-       adc->clk = devm_clk_get(&pdev->dev, NULL);
+       adc->clk = devm_clk_get_enabled(&pdev->dev, NULL);
        if (IS_ERR(adc->clk))
                return dev_err_probe(&pdev->dev, PTR_ERR(adc->clk),
                                     "error getting clock\n");
        if (ret)
                return ret;
 
-       ret = clk_prepare_enable(adc->clk);
-       if (ret) {
-               dev_err(&pdev->dev, "unable to enable clock\n");
-               return ret;
-       }
-
-       ret = devm_add_action_or_reset(&pdev->dev, lpc18xx_clk_disable,
-                                      adc->clk);
-       if (ret)
-               return ret;
-
        rate = clk_get_rate(adc->clk);
        clkdiv = DIV_ROUND_UP(rate, LPC18XX_ADC_CLK_TARGET);