Hi Sakari, Thank you for the patch. On Wed, Oct 26, 2022 at 09:51:23AM +0300, Sakari Ailus wrote: > Complain in the newly added s_stream video op wrapper if disabling > streaming failed. Also return zero in this case as there's nothing the > caller can do to return the error. > > This way drivers also won't need to bother with printing error messages. > > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > --- > drivers/media/v4l2-core/v4l2-subdev.c | 15 +++++++++++++++ > include/media/v4l2-subdev.h | 6 ++++-- > 2 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c > index 5c27bac772ea4..8a4ca2bd1584d 100644 > --- a/drivers/media/v4l2-core/v4l2-subdev.c > +++ b/drivers/media/v4l2-core/v4l2-subdev.c > @@ -318,6 +318,20 @@ static int call_get_mbus_config(struct v4l2_subdev *sd, unsigned int pad, > sd->ops->pad->get_mbus_config(sd, pad, config); > } > > +static int call_s_stream(struct v4l2_subdev *sd, int enable) > +{ > + int ret; > + > + ret = sd->ops->video->s_stream(sd, enable); > + > + if (!enable && ret < 0) { > + dev_warn(sd->dev, "disabling streaming failed (%d)\n", ret); > + return 0; > + } > + > + return ret; > +} > + > #ifdef CONFIG_MEDIA_CONTROLLER > /* > * Create state-management wrapper for pad ops dealing with subdev state. The > @@ -377,6 +391,7 @@ static const struct v4l2_subdev_pad_ops v4l2_subdev_call_pad_wrappers = { > static const struct v4l2_subdev_video_ops v4l2_subdev_call_video_wrappers = { > .g_frame_interval = call_g_frame_interval, > .s_frame_interval = call_s_frame_interval, > + .s_stream = call_s_stream, > }; > > const struct v4l2_subdev_ops v4l2_subdev_call_wrappers = { > diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h > index 54566d139da79..b15fa9930f30c 100644 > --- a/include/media/v4l2-subdev.h > +++ b/include/media/v4l2-subdev.h > @@ -440,8 +440,10 @@ enum v4l2_subdev_pre_streamon_flags { > * @g_input_status: get input status. Same as the status field in the > * &struct v4l2_input > * > - * @s_stream: used to notify the driver that a video stream will start or has > - * stopped. > + * @s_stream: start (enabled == 1) or stop (enabled == 0) streaming on the > + * sub-device. Failure on stop will remove any resources acquired in > + * streaming start, while the error code is still returned by the driver. > + * Also see call_s_stream wrapper in v4l2-subdev.c. > * > * @g_pixelaspect: callback to return the pixelaspect ratio. > * -- Regards, Laurent Pinchart