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
 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 = {
 
  * @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.
  *