[PATCH 12/16] media: rkisp1: Switch ISP subdevice to .enable/disable_streams()

Daniel Scally dan.scally at ideasonboard.com
Mon Nov 2 23:40:48 PST 2026


The rkisp1 driver's ISP subdevice currently uses the legacy
.s_stream() operation. Switch to the newer .enable_streams() and
.disable_streams()

Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
 .../media/platform/rockchip/rkisp1/rkisp1-isp.c    | 72 +++++++++++-----------
 1 file changed, 36 insertions(+), 36 deletions(-)

diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 95e9cdccd650b7bcf89dd6cdd42bdf8af2113ced..a480fc3547b989865406380560ed57b57e0350c1 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -905,40 +905,22 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
 	return v4l2_subdev_link_validate(link);
 }
 
-static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
-	.enum_mbus_code = rkisp1_isp_enum_mbus_code,
-	.enum_frame_size = rkisp1_isp_enum_frame_size,
-	.get_selection = rkisp1_isp_get_selection,
-	.set_selection = rkisp1_isp_set_selection,
-	.get_fmt = v4l2_subdev_get_fmt,
-	.set_fmt = rkisp1_isp_set_fmt,
-	.link_validate = v4l2_subdev_link_validate_default,
-};
-
 /* ----------------------------------------------------------------------------
  * Stream operations
  */
 
-static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable)
+static int rkisp1_isp_enable_streams(struct v4l2_subdev *sd,
+				     struct v4l2_subdev_state *state, u32 pad,
+				     u64 streams_mask)
 {
 	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
 	struct rkisp1_device *rkisp1 = isp->rkisp1;
-	struct v4l2_subdev_state *sd_state;
 	enum v4l2_mbus_type mbus_type;
 	struct media_pad *sink_pad;
 	struct v4l2_subdev *src_sd;
 	u32 mbus_flags;
 	int ret;
 
-	if (!enable) {
-		src_sd = media_entity_to_v4l2_subdev(rkisp1->source->entity);
-		if (!src_sd)
-			return -EPIPE;
-
-		v4l2_subdev_disable_streams(src_sd, rkisp1->source->index, BIT(0));
-		rkisp1_isp_stop(isp);
-		return 0;
-	}
 
 	sink_pad = &isp->pads[RKISP1_ISP_PAD_SINK_VIDEO];
 	rkisp1->source = media_pad_remote_pad_unique(sink_pad);
@@ -974,27 +956,50 @@ static int rkisp1_isp_s_stream(struct v4l2_subdev *sd, int enable)
 	isp->frame_sequence = -1;
 	isp->frame_active = false;
 
-	sd_state = v4l2_subdev_lock_and_get_active_state(sd);
-
-	ret = rkisp1_config_cif(isp, sd_state, mbus_type, mbus_flags);
+	ret = rkisp1_config_cif(isp, state, mbus_type, mbus_flags);
 	if (ret)
-		goto out_unlock;
+		return ret;
 
-	ret = rkisp1_isp_start(isp, sd_state, rkisp1->source);
+	ret = rkisp1_isp_start(isp, state, rkisp1->source);
 	if (ret)
-		goto out_unlock;
+		return ret;
 
 	ret = v4l2_subdev_enable_streams(src_sd, rkisp1->source->index, BIT(0));
 	if (ret) {
 		rkisp1_isp_stop(isp);
-		goto out_unlock;
+		return ret;
 	}
 
-out_unlock:
-	v4l2_subdev_unlock_state(sd_state);
-	return ret;
+	return 0;
 }
 
+static int rkisp1_isp_disable_streams(struct v4l2_subdev *sd,
+				      struct v4l2_subdev_state *state, u32 pad,
+				      u64 streams_mask)
+{
+	struct rkisp1_isp *isp = to_rkisp1_isp(sd);
+	struct rkisp1_device *rkisp1 = isp->rkisp1;
+	struct v4l2_subdev *src_sd;
+
+	src_sd = media_entity_to_v4l2_subdev(rkisp1->source->entity);
+	v4l2_subdev_disable_streams(src_sd, rkisp1->source->index, BIT(0));
+	rkisp1_isp_stop(isp);
+
+	return 0;
+}
+
+static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
+	.enum_mbus_code = rkisp1_isp_enum_mbus_code,
+	.enum_frame_size = rkisp1_isp_enum_frame_size,
+	.get_selection = rkisp1_isp_get_selection,
+	.set_selection = rkisp1_isp_set_selection,
+	.get_fmt = v4l2_subdev_get_fmt,
+	.set_fmt = rkisp1_isp_set_fmt,
+	.link_validate = v4l2_subdev_link_validate_default,
+	.enable_streams = rkisp1_isp_enable_streams,
+	.disable_streams = rkisp1_isp_disable_streams,
+};
+
 static int rkisp1_isp_subs_evt(struct v4l2_subdev *sd, struct v4l2_fh *fh,
 			       struct v4l2_event_subscription *sub)
 {
@@ -1012,10 +1017,6 @@ static const struct media_entity_operations rkisp1_isp_media_ops = {
 	.link_validate = rkisp1_subdev_link_validate,
 };
 
-static const struct v4l2_subdev_video_ops rkisp1_isp_video_ops = {
-	.s_stream = rkisp1_isp_s_stream,
-};
-
 static const struct v4l2_subdev_core_ops rkisp1_isp_core_ops = {
 	.subscribe_event = rkisp1_isp_subs_evt,
 	.unsubscribe_event = v4l2_event_subdev_unsubscribe,
@@ -1023,7 +1024,6 @@ static const struct v4l2_subdev_core_ops rkisp1_isp_core_ops = {
 
 static const struct v4l2_subdev_ops rkisp1_isp_ops = {
 	.core = &rkisp1_isp_core_ops,
-	.video = &rkisp1_isp_video_ops,
 	.pad = &rkisp1_isp_pad_ops,
 };
 

-- 
2.43.0




More information about the linux-arm-kernel mailing list