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 >