[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