return -EINVAL;
 }
 
-static void ingenic_adc_clk_cleanup(void *data)
-{
-       clk_unprepare(data);
-}
-
 static const struct iio_info ingenic_adc_info = {
        .write_raw = ingenic_adc_write_raw,
        .read_raw = ingenic_adc_read_raw,
        if (IS_ERR(adc->base))
                return PTR_ERR(adc->base);
 
-       adc->clk = devm_clk_get(dev, "adc");
+       adc->clk = devm_clk_get_prepared(dev, "adc");
        if (IS_ERR(adc->clk)) {
                dev_err(dev, "Unable to get clock\n");
                return PTR_ERR(adc->clk);
        }
 
-       ret = clk_prepare_enable(adc->clk);
+       ret = clk_enable(adc->clk);
        if (ret) {
                dev_err(dev, "Failed to enable clock\n");
                return ret;
        usleep_range(2000, 3000); /* Must wait at least 2ms. */
        clk_disable(adc->clk);
 
-       ret = devm_add_action_or_reset(dev, ingenic_adc_clk_cleanup, adc->clk);
-       if (ret) {
-               dev_err(dev, "Unable to add action\n");
-               return ret;
-       }
-
        iio_dev->name = "jz-adc";
        iio_dev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_SOFTWARE;
        iio_dev->setup_ops = &ingenic_buffer_setup_ops;