Re: [PATCHv6 12/14] ov2640: use standard clk and enable it.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Acked-by: Hugues Fruchet <hugues.fruchet@xxxxxx>

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.verkuil@xxxxxxxxx>
>
> Convert v4l2_clk to normal clk and enable the clock.
>
> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> Acked-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> ---
>  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;
>  }
>
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux