Acked-by: Hugues Fruchet <hugues.fruc...@st.com>

Tested successfully on STM324x9I-EVAL evaluation board embedding
an OV2640 camera sensor.

BR,
Hugues.

On 03/28/2017 10:23 AM, Hans Verkuil wrote:
> From: Hans Verkuil <hans.verk...@cisco.com>
>
> Convert v4l2_clk to normal clk and enable the clock.
>
> Signed-off-by: Hans Verkuil <hans.verk...@cisco.com>
> Acked-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> ---
>  drivers/media/i2c/ov2640.c | 31 ++++++++++++++-----------------
>  1 file changed, 14 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c
> index 83f88efbce69..0445963c5fae 100644
> --- a/drivers/media/i2c/ov2640.c
> +++ b/drivers/media/i2c/ov2640.c
> @@ -16,6 +16,7 @@
>  #include <linux/init.h>
>  #include <linux/module.h>
>  #include <linux/i2c.h>
> +#include <linux/clk.h>
>  #include <linux/slab.h>
>  #include <linux/delay.h>
>  #include <linux/gpio.h>
> @@ -24,7 +25,6 @@
>  #include <linux/v4l2-mediabus.h>
>  #include <linux/videodev2.h>
>
> -#include <media/v4l2-clk.h>
>  #include <media/v4l2-device.h>
>  #include <media/v4l2-subdev.h>
>  #include <media/v4l2-ctrls.h>
> @@ -284,7 +284,7 @@ struct ov2640_priv {
>       struct v4l2_subdev              subdev;
>       struct v4l2_ctrl_handler        hdl;
>       u32     cfmt_code;
> -     struct v4l2_clk                 *clk;
> +     struct clk                      *clk;
>       const struct ov2640_win_size    *win;
>
>       struct gpio_desc *resetb_gpio;
> @@ -1051,14 +1051,11 @@ static int ov2640_probe(struct i2c_client *client,
>               return -ENOMEM;
>       }
>
> -     priv->clk = v4l2_clk_get(&client->dev, "xvclk");
> -     if (IS_ERR(priv->clk))
> -             return -EPROBE_DEFER;
> -
> -     if (!client->dev.of_node) {
> -             dev_err(&client->dev, "Missing platform_data for driver\n");
> -             ret = -EINVAL;
> -             goto err_clk;
> +     if (client->dev.of_node) {
> +             priv->clk = devm_clk_get(&client->dev, "xvclk");
> +             if (IS_ERR(priv->clk))
> +                     return -EPROBE_DEFER;
> +             clk_prepare_enable(priv->clk);
>       }
>
>       ret = ov2640_probe_dt(client, priv);
> @@ -1074,25 +1071,25 @@ static int ov2640_probe(struct i2c_client *client,
>       priv->subdev.ctrl_handler = &priv->hdl;
>       if (priv->hdl.error) {
>               ret = priv->hdl.error;
> -             goto err_clk;
> +             goto err_hdl;
>       }
>
>       ret = ov2640_video_probe(client);
>       if (ret < 0)
> -             goto err_videoprobe;
> +             goto err_hdl;
>
>       ret = v4l2_async_register_subdev(&priv->subdev);
>       if (ret < 0)
> -             goto err_videoprobe;
> +             goto err_hdl;
>
>       dev_info(&adapter->dev, "OV2640 Probed\n");
>
>       return 0;
>
> -err_videoprobe:
> +err_hdl:
>       v4l2_ctrl_handler_free(&priv->hdl);
>  err_clk:
> -     v4l2_clk_put(priv->clk);
> +     clk_disable_unprepare(priv->clk);
>       return ret;
>  }
>
> @@ -1101,9 +1098,9 @@ static int ov2640_remove(struct i2c_client *client)
>       struct ov2640_priv       *priv = to_ov2640(client);
>
>       v4l2_async_unregister_subdev(&priv->subdev);
> -     v4l2_clk_put(priv->clk);
> -     v4l2_device_unregister_subdev(&priv->subdev);
>       v4l2_ctrl_handler_free(&priv->hdl);
> +     v4l2_device_unregister_subdev(&priv->subdev);
> +     clk_disable_unprepare(priv->clk);
>       return 0;
>  }
>
>

Reply via email to