Re: [PATCHv4 12/15] ov2640: add MC support
On 10/03/17 12:15, Sakari Ailus wrote: > Hi Hans, > > On Fri, Mar 10, 2017 at 11:26:11AM +0100, Hans Verkuil wrote: >> From: Hans Verkuil >> >> The MC support is needed by the em28xx driver. >> >> Signed-off-by: Hans Verkuil >> --- >> drivers/media/i2c/ov2640.c | 21 +++-- >> 1 file changed, 19 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c >> index 0445963c5fae..00df042fd6f1 100644 >> --- a/drivers/media/i2c/ov2640.c >> +++ b/drivers/media/i2c/ov2640.c >> @@ -282,6 +282,9 @@ struct ov2640_win_size { >> >> struct ov2640_priv { >> struct v4l2_subdev subdev; >> +#if defined(CONFIG_MEDIA_CONTROLLER) >> +struct media_pad pad; >> +#endif >> struct v4l2_ctrl_handlerhdl; >> u32 cfmt_code; >> struct clk *clk; >> @@ -1073,19 +1076,30 @@ static int ov2640_probe(struct i2c_client *client, >> ret = priv->hdl.error; >> goto err_hdl; >> } > > As this is a sensor the format etc. should be accessible from the user > space, shouldn't you have V4L2_SUBDEV_FL_HAS_DEVNODE flag for the > sub-device as well? > > The device node isn't exposed unless v4l2_device_register_subdev_nodes() is > called anyway. Can do this for both ov2640 and ov7670. > >> +#if defined(CONFIG_MEDIA_CONTROLLER) >> +priv->pad.flags = MEDIA_PAD_FL_SOURCE; >> +priv->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; >> +ret = media_entity_pads_init(&priv->subdev.entity, 1, &priv->pad); >> +if (ret < 0) >> +goto err_hdl; >> +#endif >> >> ret = ov2640_video_probe(client); >> if (ret < 0) >> -goto err_hdl; >> +goto err_videoprobe; >> >> ret = v4l2_async_register_subdev(&priv->subdev); >> if (ret < 0) >> -goto err_hdl; >> +goto err_videoprobe; >> >> dev_info(&adapter->dev, "OV2640 Probed\n"); >> >> return 0; >> >> +err_videoprobe: >> +#if defined(CONFIG_MEDIA_CONTROLLER) >> +media_entity_cleanup(&priv->subdev.entity); > > I believe you can call media_entity_cleanup() as the function does nothing > right now. In general, we should provide nop variants if MC is disabled. You mean that I don't have to check CONFIG_MEDIA_CONTROLLER for this, right? Makes sense. > >> +#endif >> err_hdl: >> v4l2_ctrl_handler_free(&priv->hdl); >> err_clk: >> @@ -1099,6 +1113,9 @@ static int ov2640_remove(struct i2c_client *client) >> >> v4l2_async_unregister_subdev(&priv->subdev); >> v4l2_ctrl_handler_free(&priv->hdl); >> +#if defined(CONFIG_MEDIA_CONTROLLER) >> +media_entity_cleanup(&priv->subdev.entity); >> +#endif >> v4l2_device_unregister_subdev(&priv->subdev); >> clk_disable_unprepare(priv->clk); >> return 0; > Regards, Hans
Re: [PATCHv4 12/15] ov2640: add MC support
Hi Hans, On Fri, Mar 10, 2017 at 11:26:11AM +0100, Hans Verkuil wrote: > From: Hans Verkuil > > The MC support is needed by the em28xx driver. > > Signed-off-by: Hans Verkuil > --- > drivers/media/i2c/ov2640.c | 21 +++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c > index 0445963c5fae..00df042fd6f1 100644 > --- a/drivers/media/i2c/ov2640.c > +++ b/drivers/media/i2c/ov2640.c > @@ -282,6 +282,9 @@ struct ov2640_win_size { > > struct ov2640_priv { > struct v4l2_subdev subdev; > +#if defined(CONFIG_MEDIA_CONTROLLER) > + struct media_pad pad; > +#endif > struct v4l2_ctrl_handlerhdl; > u32 cfmt_code; > struct clk *clk; > @@ -1073,19 +1076,30 @@ static int ov2640_probe(struct i2c_client *client, > ret = priv->hdl.error; > goto err_hdl; > } As this is a sensor the format etc. should be accessible from the user space, shouldn't you have V4L2_SUBDEV_FL_HAS_DEVNODE flag for the sub-device as well? The device node isn't exposed unless v4l2_device_register_subdev_nodes() is called anyway. > +#if defined(CONFIG_MEDIA_CONTROLLER) > + priv->pad.flags = MEDIA_PAD_FL_SOURCE; > + priv->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; > + ret = media_entity_pads_init(&priv->subdev.entity, 1, &priv->pad); > + if (ret < 0) > + goto err_hdl; > +#endif > > ret = ov2640_video_probe(client); > if (ret < 0) > - goto err_hdl; > + goto err_videoprobe; > > ret = v4l2_async_register_subdev(&priv->subdev); > if (ret < 0) > - goto err_hdl; > + goto err_videoprobe; > > dev_info(&adapter->dev, "OV2640 Probed\n"); > > return 0; > > +err_videoprobe: > +#if defined(CONFIG_MEDIA_CONTROLLER) > + media_entity_cleanup(&priv->subdev.entity); I believe you can call media_entity_cleanup() as the function does nothing right now. In general, we should provide nop variants if MC is disabled. > +#endif > err_hdl: > v4l2_ctrl_handler_free(&priv->hdl); > err_clk: > @@ -1099,6 +1113,9 @@ static int ov2640_remove(struct i2c_client *client) > > v4l2_async_unregister_subdev(&priv->subdev); > v4l2_ctrl_handler_free(&priv->hdl); > +#if defined(CONFIG_MEDIA_CONTROLLER) > + media_entity_cleanup(&priv->subdev.entity); > +#endif > v4l2_device_unregister_subdev(&priv->subdev); > clk_disable_unprepare(priv->clk); > return 0; -- Regards, Sakari Ailus e-mail: sakari.ai...@iki.fi XMPP: sai...@retiisi.org.uk
[PATCHv4 12/15] ov2640: add MC support
From: Hans Verkuil The MC support is needed by the em28xx driver. Signed-off-by: Hans Verkuil --- drivers/media/i2c/ov2640.c | 21 +++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c index 0445963c5fae..00df042fd6f1 100644 --- a/drivers/media/i2c/ov2640.c +++ b/drivers/media/i2c/ov2640.c @@ -282,6 +282,9 @@ struct ov2640_win_size { struct ov2640_priv { struct v4l2_subdev subdev; +#if defined(CONFIG_MEDIA_CONTROLLER) + struct media_pad pad; +#endif struct v4l2_ctrl_handlerhdl; u32 cfmt_code; struct clk *clk; @@ -1073,19 +1076,30 @@ static int ov2640_probe(struct i2c_client *client, ret = priv->hdl.error; goto err_hdl; } +#if defined(CONFIG_MEDIA_CONTROLLER) + priv->pad.flags = MEDIA_PAD_FL_SOURCE; + priv->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; + ret = media_entity_pads_init(&priv->subdev.entity, 1, &priv->pad); + if (ret < 0) + goto err_hdl; +#endif ret = ov2640_video_probe(client); if (ret < 0) - goto err_hdl; + goto err_videoprobe; ret = v4l2_async_register_subdev(&priv->subdev); if (ret < 0) - goto err_hdl; + goto err_videoprobe; dev_info(&adapter->dev, "OV2640 Probed\n"); return 0; +err_videoprobe: +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&priv->subdev.entity); +#endif err_hdl: v4l2_ctrl_handler_free(&priv->hdl); err_clk: @@ -1099,6 +1113,9 @@ static int ov2640_remove(struct i2c_client *client) v4l2_async_unregister_subdev(&priv->subdev); v4l2_ctrl_handler_free(&priv->hdl); +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&priv->subdev.entity); +#endif v4l2_device_unregister_subdev(&priv->subdev); clk_disable_unprepare(priv->clk); return 0; -- 2.11.0