[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251230083220.2405247-9-r-donadkar@ti.com>
Date: Tue, 30 Dec 2025 14:02:09 +0530
From: Rishikesh Donadkar <r-donadkar@...com>
To: <jai.luthra@...ux.dev>, <laurent.pinchart@...asonboard.com>,
<mripard@...nel.org>
CC: <r-donadkar@...com>, <y-abhilashchandra@...com>, <devarsht@...com>,
<s-jain1@...com>, <vigneshr@...com>, <mchehab@...nel.org>, <robh@...nel.org>,
<krzk+dt@...nel.org>, <p.zabel@...gutronix.de>, <conor+dt@...nel.org>,
<sakari.ailus@...ux.intel.com>, <hverkuil-cisco@...all.nl>,
<tomi.valkeinen@...asonboard.com>, <jai.luthra@...asonboard.com>,
<changhuang.liang@...rfivetech.com>, <jack.zhu@...rfivetech.com>,
<sjoerd@...labora.com>, <dan.carpenter@...aro.org>,
<hverkuil+cisco@...nel.org>, <linux-kernel@...r.kernel.org>,
<linux-media@...r.kernel.org>, <devicetree@...r.kernel.org>
Subject: [PATCH v9 08/19] media: staging: starfive: Move to enabel-disable streams in starfive drivers
The enable_streams() API in v4l2 supports passing a bitmask to enable
each pad/stream combination individually on any media subdev. Use this
API instead of s_stream() API in the starfive drivers
Signed-off-by: Rishikesh Donadkar <r-donadkar@...com>
---
.../staging/media/starfive/camss/stf-isp.c | 43 ++++++++++++-------
.../staging/media/starfive/camss/stf-video.c | 4 +-
2 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/drivers/staging/media/starfive/camss/stf-isp.c b/drivers/staging/media/starfive/camss/stf-isp.c
index df7a903fbb1b0..4930ffb0e07a6 100644
--- a/drivers/staging/media/starfive/camss/stf-isp.c
+++ b/drivers/staging/media/starfive/camss/stf-isp.c
@@ -55,27 +55,43 @@ int stf_isp_init(struct stfcamss *stfcamss)
return 0;
}
-static int isp_set_stream(struct v4l2_subdev *sd, int enable)
+static int isp_sd_enable_stream(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
{
struct stf_isp_dev *isp_dev = v4l2_get_subdevdata(sd);
struct v4l2_subdev_state *sd_state;
struct v4l2_mbus_framefmt *fmt;
struct v4l2_rect *crop;
+ int ret;
- sd_state = v4l2_subdev_lock_and_get_active_state(sd);
+ sd_state = v4l2_subdev_get_locked_active_state(sd);
fmt = v4l2_subdev_state_get_format(sd_state, STF_ISP_PAD_SINK);
crop = v4l2_subdev_state_get_crop(sd_state, STF_ISP_PAD_SRC);
- if (enable) {
- stf_isp_reset(isp_dev);
- stf_isp_init_cfg(isp_dev);
- stf_isp_settings(isp_dev, crop, fmt->code);
- stf_isp_stream_set(isp_dev);
- }
+ stf_isp_reset(isp_dev);
+ stf_isp_init_cfg(isp_dev);
+ stf_isp_settings(isp_dev, crop, fmt->code);
+ stf_isp_stream_set(isp_dev);
+
+ ret = v4l2_subdev_enable_streams(isp_dev->source_subdev, 1, BIT(0));
+ if (ret)
+ return ret;
+
+ return 0;
+}
- v4l2_subdev_call(isp_dev->source_subdev, video, s_stream, enable);
+static int isp_sd_disable_stream(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
+{
+ struct stf_isp_dev *isp_dev = v4l2_get_subdevdata(sd);
+ int ret;
+
+ ret = v4l2_subdev_disable_streams(isp_dev->source_subdev, 1, BIT(0));
+ if (ret)
+ return ret;
- v4l2_subdev_unlock_state(sd_state);
return 0;
}
@@ -300,20 +316,17 @@ static int isp_init_formats(struct v4l2_subdev *sd,
return isp_set_format(sd, sd_state, &format);
}
-static const struct v4l2_subdev_video_ops isp_video_ops = {
- .s_stream = isp_set_stream,
-};
-
static const struct v4l2_subdev_pad_ops isp_pad_ops = {
.enum_mbus_code = isp_enum_mbus_code,
.get_fmt = v4l2_subdev_get_fmt,
.set_fmt = isp_set_format,
.get_selection = isp_get_selection,
.set_selection = isp_set_selection,
+ .enable_streams = isp_sd_enable_stream,
+ .disable_streams = isp_sd_disable_stream,
};
static const struct v4l2_subdev_ops isp_v4l2_ops = {
- .video = &isp_video_ops,
.pad = &isp_pad_ops,
};
diff --git a/drivers/staging/media/starfive/camss/stf-video.c b/drivers/staging/media/starfive/camss/stf-video.c
index a0420eb6a0aa0..2db29bf8bdef8 100644
--- a/drivers/staging/media/starfive/camss/stf-video.c
+++ b/drivers/staging/media/starfive/camss/stf-video.c
@@ -287,7 +287,7 @@ static int video_start_streaming(struct vb2_queue *q, unsigned int count)
video->ops->start_streaming(video);
- ret = v4l2_subdev_call(video->source_subdev, video, s_stream, true);
+ ret = v4l2_subdev_enable_streams(video->source_subdev, 1, BIT(0));
if (ret) {
dev_err(video->stfcamss->dev, "stream on failed\n");
goto err_pm_put;
@@ -311,7 +311,7 @@ static void video_stop_streaming(struct vb2_queue *q)
video->ops->stop_streaming(video);
- v4l2_subdev_call(video->source_subdev, video, s_stream, false);
+ v4l2_subdev_disable_streams(video->source_subdev, 1, BIT(0));
pm_runtime_put(video->stfcamss->dev);
--
2.34.1
Powered by blists - more mailing lists