[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251112115459.2479225-9-r-donadkar@ti.com>
Date: Wed, 12 Nov 2025 17:24:49 +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 v8 08/18] media: ti: j721e-csi2rx: Move to .enable/disable_streams API
Support the new enable_stream()/disable_stream() APIs in the subdev
instead of s_stream() hook.
Signed-off-by: Rishikesh Donadkar <r-donadkar@...com>
---
.../platform/ti/j721e-csi2rx/j721e-csi2rx.c | 71 +++++++++++--------
1 file changed, 41 insertions(+), 30 deletions(-)
diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
index 327b8e5fb7d5e..372a4035d78a0 100644
--- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
+++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
@@ -921,7 +921,9 @@ static int ti_csi2rx_start_streaming(struct vb2_queue *vq, unsigned int count)
dma->state = TI_CSI2RX_DMA_ACTIVE;
spin_unlock_irqrestore(&dma->lock, flags);
- ret = v4l2_subdev_call(&csi->subdev, video, s_stream, 1);
+ ret = v4l2_subdev_enable_streams(&csi->subdev,
+ TI_CSI2RX_PAD_FIRST_SOURCE,
+ BIT(0));
if (ret)
goto err_dma;
@@ -949,7 +951,9 @@ static void ti_csi2rx_stop_streaming(struct vb2_queue *vq)
writel(0, csi->shim + SHIM_CNTL);
writel(0, csi->shim + SHIM_DMACNTX(ctx->idx));
- ret = v4l2_subdev_call(&csi->subdev, video, s_stream, 0);
+ ret = v4l2_subdev_disable_streams(&csi->subdev,
+ TI_CSI2RX_PAD_FIRST_SOURCE,
+ BIT(0));
if (ret)
dev_err(csi->dev, "Failed to stop subdev stream\n");
@@ -1016,53 +1020,60 @@ static int ti_csi2rx_sd_init_state(struct v4l2_subdev *sd,
return 0;
}
-static int ti_csi2rx_sd_s_stream(struct v4l2_subdev *sd, int enable)
+static int ti_csi2rx_sd_enable_streams(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
{
struct ti_csi2rx_dev *csi = to_csi2rx_dev(sd);
+ struct media_pad *remote_pad;
int ret = 0;
- mutex_lock(&csi->mutex);
+ remote_pad = media_entity_remote_source_pad_unique(&csi->subdev.entity);
+ if (!remote_pad)
+ return -ENODEV;
- if (enable) {
- if (csi->enable_count > 0) {
- csi->enable_count++;
- goto out;
- }
+ ret = v4l2_subdev_enable_streams(csi->source, remote_pad->index,
+ BIT(0));
+ if (ret)
+ return ret;
- ret = v4l2_subdev_call(csi->source, video, s_stream, 1);
- if (ret)
- goto out;
+ csi->enable_count++;
- csi->enable_count++;
- } else {
- if (csi->enable_count == 0) {
- ret = -EINVAL;
- goto out;
- }
+ return 0;
+}
+
+static int ti_csi2rx_sd_disable_streams(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
+{
+ struct ti_csi2rx_dev *csi = to_csi2rx_dev(sd);
+ struct media_pad *remote_pad;
+ int ret = 0;
- if (--csi->enable_count > 0)
- goto out;
+ remote_pad = media_entity_remote_source_pad_unique(&csi->subdev.entity);
+ if (!remote_pad)
+ return -ENODEV;
- ret = v4l2_subdev_call(csi->source, video, s_stream, 0);
- }
+ if (csi->enable_count == 0)
+ return -EINVAL;
-out:
- mutex_unlock(&csi->mutex);
- return ret;
+ ret = v4l2_subdev_disable_streams(csi->source, remote_pad->index,
+ BIT(0));
+ if (!ret)
+ --csi->enable_count;
+
+ return 0;
}
static const struct v4l2_subdev_pad_ops ti_csi2rx_subdev_pad_ops = {
.enum_mbus_code = ti_csi2rx_enum_mbus_code,
.get_fmt = v4l2_subdev_get_fmt,
.set_fmt = ti_csi2rx_sd_set_fmt,
-};
-
-static const struct v4l2_subdev_video_ops ti_csi2rx_subdev_video_ops = {
- .s_stream = ti_csi2rx_sd_s_stream,
+ .enable_streams = ti_csi2rx_sd_enable_streams,
+ .disable_streams = ti_csi2rx_sd_disable_streams,
};
static const struct v4l2_subdev_ops ti_csi2rx_subdev_ops = {
- .video = &ti_csi2rx_subdev_video_ops,
.pad = &ti_csi2rx_subdev_pad_ops,
};
--
2.34.1
Powered by blists - more mailing lists