Message ID | 20240308083312.90279-3-umang.jain@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series | media: imx335: 2/4 lane ops and improvements | expand |
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;