Re: [PATCH 2/4] media: i2c: imx214: Move controls init to separate function

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

 



Hi Andre'

On Mon, Oct 23, 2023 at 11:47:51PM +0200, André Apitzsch wrote:
> Code refinement, no functional changes.
>
> Signed-off-by: André Apitzsch <git@xxxxxxxxxxx>
> ---
>  drivers/media/i2c/imx214.c | 111 ++++++++++++++++++++++++++-------------------
>  1 file changed, 64 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/media/i2c/imx214.c b/drivers/media/i2c/imx214.c
> index 9218c149d4c8..554fc4733128 100644
> --- a/drivers/media/i2c/imx214.c
> +++ b/drivers/media/i2c/imx214.c
> @@ -695,6 +695,68 @@ static const struct v4l2_ctrl_ops imx214_ctrl_ops = {
>  	.s_ctrl = imx214_set_ctrl,
>  };
>
> +static int imx214_ctrls_init(struct imx214 *imx214)
> +{
> +	static const s64 link_freq[] = {
> +		IMX214_DEFAULT_LINK_FREQ
> +	};
> +	static const struct v4l2_area unit_size = {
> +		.width = 1120,
> +		.height = 1120,
> +	};
> +	struct v4l2_ctrl_handler *ctrl_hdlr;
> +	int ret;
> +
> +	ctrl_hdlr = &imx214->ctrls;
> +	ret = v4l2_ctrl_handler_init(&imx214->ctrls, 3);

I know it was already like this, but you could take occasion to
pre-allocate enough control slots. I count 4 here, plus the 2 parsed
from system firware in the next patch.

You can change this here and mention it in the commit message or with
a separate patch on top. Up to you!


> +	if (ret)
> +		return ret;
> +
> +	imx214->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, NULL,
> +					       V4L2_CID_PIXEL_RATE, 0,
> +					       IMX214_DEFAULT_PIXEL_RATE, 1,
> +					       IMX214_DEFAULT_PIXEL_RATE);
> +
> +	imx214->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, NULL,
> +						   V4L2_CID_LINK_FREQ,
> +						   ARRAY_SIZE(link_freq) - 1,
> +						   0, link_freq);
> +	if (imx214->link_freq)
> +		imx214->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> +
> +	/*
> +	 * WARNING!
> +	 * Values obtained reverse engineering blobs and/or devices.
> +	 * Ranges and functionality might be wrong.
> +	 *
> +	 * Sony, please release some register set documentation for the
> +	 * device.
> +	 *
> +	 * Yours sincerely, Ricardo.
> +	 */
> +	imx214->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &imx214_ctrl_ops,
> +					     V4L2_CID_EXPOSURE,
> +					     IMX214_EXPOSURE_MIN,
> +					     IMX214_EXPOSURE_MAX,
> +					     IMX214_EXPOSURE_STEP,
> +					     IMX214_EXPOSURE_DEFAULT);
> +
> +	imx214->unit_size = v4l2_ctrl_new_std_compound(ctrl_hdlr,
> +				NULL,
> +				V4L2_CID_UNIT_CELL_SIZE,
> +				v4l2_ctrl_ptr_create((void *)&unit_size));
> +
> +	ret = ctrl_hdlr->error;
> +	if (ret) {
> +		v4l2_ctrl_handler_free(ctrl_hdlr);
> +		return dev_err_probe(imx214->dev, ret, "failed to add controls\n");

dev_err_probe won't help I think, or could ctrl_hdr->error be
-EPROBE_DEFER ? Not a big deal though!

All minor comments, with these addressed
Reviewed-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx>

Thanks
  j


> +	}
> +
> +	imx214->sd.ctrl_handler = ctrl_hdlr;
> +
> +	return 0;
> +};
> +
>  #define MAX_CMD 4
>  static int imx214_write_table(struct imx214 *imx214,
>  			      const struct reg_8 table[])
> @@ -918,13 +980,6 @@ static int imx214_probe(struct i2c_client *client)
>  {
>  	struct device *dev = &client->dev;
>  	struct imx214 *imx214;
> -	static const s64 link_freq[] = {
> -		IMX214_DEFAULT_LINK_FREQ,
> -	};
> -	static const struct v4l2_area unit_size = {
> -		.width = 1120,
> -		.height = 1120,
> -	};
>  	int ret;
>
>  	ret = imx214_parse_fwnode(dev);
> @@ -979,48 +1034,10 @@ static int imx214_probe(struct i2c_client *client)
>  	pm_runtime_enable(imx214->dev);
>  	pm_runtime_idle(imx214->dev);
>
> -	v4l2_ctrl_handler_init(&imx214->ctrls, 3);
> -
> -	imx214->pixel_rate = v4l2_ctrl_new_std(&imx214->ctrls, NULL,
> -					       V4L2_CID_PIXEL_RATE, 0,
> -					       IMX214_DEFAULT_PIXEL_RATE, 1,
> -					       IMX214_DEFAULT_PIXEL_RATE);
> -	imx214->link_freq = v4l2_ctrl_new_int_menu(&imx214->ctrls, NULL,
> -						   V4L2_CID_LINK_FREQ,
> -						   ARRAY_SIZE(link_freq) - 1,
> -						   0, link_freq);
> -	if (imx214->link_freq)
> -		imx214->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> -
> -	/*
> -	 * WARNING!
> -	 * Values obtained reverse engineering blobs and/or devices.
> -	 * Ranges and functionality might be wrong.
> -	 *
> -	 * Sony, please release some register set documentation for the
> -	 * device.
> -	 *
> -	 * Yours sincerely, Ricardo.
> -	 */
> -	imx214->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &imx214_ctrl_ops,
> -					     V4L2_CID_EXPOSURE,
> -					     IMX214_EXPOSURE_MIN,
> -					     IMX214_EXPOSURE_MAX,
> -					     IMX214_EXPOSURE_STEP,
> -					     IMX214_EXPOSURE_DEFAULT);
> -
> -	imx214->unit_size = v4l2_ctrl_new_std_compound(&imx214->ctrls,
> -				NULL,
> -				V4L2_CID_UNIT_CELL_SIZE,
> -				v4l2_ctrl_ptr_create((void *)&unit_size));
> -	ret = imx214->ctrls.error;
> -	if (ret) {
> -		dev_err(&client->dev, "%s control init failed (%d)\n",
> -			__func__, ret);
> +	ret = imx214_ctrls_init(imx214);
> +	if (ret < 0)
>  		goto free_ctrl;
> -	}
>
> -	imx214->sd.ctrl_handler = &imx214->ctrls;
>  	mutex_init(&imx214->mutex);
>  	imx214->ctrls.lock = &imx214->mutex;
>
>
> --
> 2.42.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