Message ID | 20240308083312.90279-3-umang.jain@ideasonboard.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | media: imx335: 2/4 lane ops and improvements | expand |
Hi Umang, Kieram, On Fri, Mar 08, 2024 at 02:03:08PM +0530, Umang Jain wrote: > From: Kieran Bingham <kieran.bingham@ideasonboard.com> > > Call the V4L2 fwnode device parser to handle controls that are > standardised by the framework. > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> > --- > drivers/media/i2c/imx335.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/i2c/imx335.c b/drivers/media/i2c/imx335.c > index 7162b0a3cef3..819ab3a6c5fc 100644 > --- a/drivers/media/i2c/imx335.c > +++ b/drivers/media/i2c/imx335.c > @@ -1225,10 +1225,12 @@ static int imx335_init_controls(struct imx335 *imx335) > { > struct v4l2_ctrl_handler *ctrl_hdlr = &imx335->ctrl_handler; > const struct imx335_mode *mode = imx335->cur_mode; > + struct v4l2_fwnode_device_properties props; > u32 lpfr; > int ret; > > - ret = v4l2_ctrl_handler_init(ctrl_hdlr, 7); > + /* v4l2_fwnode_device_properties can add two more controls */ > + ret = v4l2_ctrl_handler_init(ctrl_hdlr, 9); > if (ret) > return ret; > > @@ -1300,6 +1302,15 @@ static int imx335_init_controls(struct imx335 *imx335) > return ctrl_hdlr->error; > } > > + ret = v4l2_fwnode_device_parse(imx335->dev, &props); > + if (ret) > + return ret; > + > + ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx335_ctrl_ops, > + &props); > + if (ret) > + return ret; > + > imx335->sd.ctrl_handler = ctrl_hdlr; > > return 0; Just a doubt on my side. We don't need an error path to free ctrl_hdlr? Or I'm missing something? Something similar: ret = v4l2_fwnode_device_parse(imx335->dev, &props); if (ret) goto free_ctrls; ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx335_ctrl_ops, &props); if (ret) return ret; free_ctrls: v4l2_ctrl_handler_free(hdl); return ret; Thanks & Regards, Tommaso > -- > 2.43.0 > >
Hi Tommaso, On 08/03/24 4:26 pm, Tommaso Merciai wrote: > Hi Umang, Kieram, > > On Fri, Mar 08, 2024 at 02:03:08PM +0530, Umang Jain wrote: >> From: Kieran Bingham <kieran.bingham@ideasonboard.com> >> >> Call the V4L2 fwnode device parser to handle controls that are >> standardised by the framework. >> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> >> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> >> --- >> drivers/media/i2c/imx335.c | 13 ++++++++++++- >> 1 file changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/media/i2c/imx335.c b/drivers/media/i2c/imx335.c >> index 7162b0a3cef3..819ab3a6c5fc 100644 >> --- a/drivers/media/i2c/imx335.c >> +++ b/drivers/media/i2c/imx335.c >> @@ -1225,10 +1225,12 @@ static int imx335_init_controls(struct imx335 *imx335) >> { >> struct v4l2_ctrl_handler *ctrl_hdlr = &imx335->ctrl_handler; >> const struct imx335_mode *mode = imx335->cur_mode; >> + struct v4l2_fwnode_device_properties props; >> u32 lpfr; >> int ret; >> >> - ret = v4l2_ctrl_handler_init(ctrl_hdlr, 7); >> + /* v4l2_fwnode_device_properties can add two more controls */ >> + ret = v4l2_ctrl_handler_init(ctrl_hdlr, 9); >> if (ret) >> return ret; >> >> @@ -1300,6 +1302,15 @@ static int imx335_init_controls(struct imx335 *imx335) >> return ctrl_hdlr->error; >> } >> >> + ret = v4l2_fwnode_device_parse(imx335->dev, &props); >> + if (ret) >> + return ret; >> + >> + ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx335_ctrl_ops, >> + &props); >> + if (ret) >> + return ret; >> + >> imx335->sd.ctrl_handler = ctrl_hdlr; >> >> return 0; > Just a doubt on my side. > We don't need an error path to free ctrl_hdlr? > Or I'm missing something? No, you are right. We need to free the ctrl_hdlr on error patch. > > Something similar: > > ret = v4l2_fwnode_device_parse(imx335->dev, &props); > if (ret) > goto free_ctrls; > > ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx335_ctrl_ops, > &props); > if (ret) > return ret; > > free_ctrls: > v4l2_ctrl_handler_free(hdl); > return ret; > > Thanks & Regards, > Tommaso > >> -- >> 2.43.0 >> >>
diff --git a/drivers/media/i2c/imx335.c b/drivers/media/i2c/imx335.c index 7162b0a3cef3..819ab3a6c5fc 100644 --- a/drivers/media/i2c/imx335.c +++ b/drivers/media/i2c/imx335.c @@ -1225,10 +1225,12 @@ static int imx335_init_controls(struct imx335 *imx335) { struct v4l2_ctrl_handler *ctrl_hdlr = &imx335->ctrl_handler; const struct imx335_mode *mode = imx335->cur_mode; + struct v4l2_fwnode_device_properties props; u32 lpfr; int ret; - ret = v4l2_ctrl_handler_init(ctrl_hdlr, 7); + /* v4l2_fwnode_device_properties can add two more controls */ + ret = v4l2_ctrl_handler_init(ctrl_hdlr, 9); if (ret) return ret; @@ -1300,6 +1302,15 @@ static int imx335_init_controls(struct imx335 *imx335) return ctrl_hdlr->error; } + ret = v4l2_fwnode_device_parse(imx335->dev, &props); + if (ret) + return ret; + + ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &imx335_ctrl_ops, + &props); + if (ret) + return ret; + imx335->sd.ctrl_handler = ctrl_hdlr; return 0;