* Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
  */
 
+#include <linux/clk.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/videodev2.h>
 
 #include <media/v4l2-async.h>
-#include <media/v4l2-clk.h>
 #include <media/v4l2-common.h>
 #include <media/v4l2-ctrls.h>
 #include <media/v4l2-device.h>
        if (on) {
                gpiod_set_value(priv->gpio_power, 1);
                usleep_range(1000, 2000);
-               ret = v4l2_clk_enable(priv->clk);
+               ret = clk_prepare_enable(priv->clk);
                usleep_range(1000, 2000);
                gpiod_set_value(priv->gpio_reset, 0);
        } else {
                gpiod_set_value(priv->gpio_reset, 1);
                usleep_range(1000, 2000);
-               v4l2_clk_disable(priv->clk);
+               clk_disable_unprepare(priv->clk);
                usleep_range(1000, 2000);
                gpiod_set_value(priv->gpio_power, 0);
        }
 
        priv->subdev.ctrl_handler = &priv->hdl;
 
-       priv->clk = v4l2_clk_get(&client->dev, "mclk");
+       priv->clk = devm_clk_get(&client->dev, "mclk");
        if (IS_ERR(priv->clk)) {
                ret = PTR_ERR(priv->clk);
                goto ectrlinit;
 
        ret = ov9640_video_probe(client);
        if (ret)
-               goto eprobe;
+               goto ectrlinit;
 
        priv->subdev.dev = &client->dev;
        ret = v4l2_async_register_subdev(&priv->subdev);
        if (ret)
-               goto eprobe;
+               goto ectrlinit;
 
        return 0;
 
-eprobe:
-       v4l2_clk_put(priv->clk);
 ectrlinit:
        v4l2_ctrl_handler_free(&priv->hdl);
 
        struct v4l2_subdev *sd = i2c_get_clientdata(client);
        struct ov9640_priv *priv = to_ov9640_sensor(sd);
 
-       v4l2_clk_put(priv->clk);
        v4l2_async_unregister_subdev(&priv->subdev);
        v4l2_ctrl_handler_free(&priv->hdl);