[PATCH 13/16] media: rkisp1: Control ISP streams from resizer ops
Daniel Scally
dan.scally at ideasonboard.com
Mon Nov 2 23:40:49 PST 2026
Currently the rkisp1 driver enables or disables streams for both the
ISP and resizer subdevices in the call-chain of its VB2 queue start
and stop streaming operations. We generally want to start only the
direct provider's streams, so keep control of the resizer streams in
the VB2 queue operations but move handling of the ISP's streams to
the resizer's .enable_streams() and .disable_streams() operations.
Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
.../platform/rockchip/rkisp1/rkisp1-capture.c | 24 ----------------------
.../platform/rockchip/rkisp1/rkisp1-resizer.c | 18 +++++++++++++++-
2 files changed, 17 insertions(+), 25 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index fcc6f06437e182c0510fab7df5a50dfe7d0cb48a..84d66da484df7cbc29700efc433b1271d594ff78 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -1067,15 +1067,6 @@ static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
struct rkisp1_device *rkisp1 = cap->rkisp1;
rkisp1_cap_stream_disable(cap);
-
- /*
- * If the other capture is streaming, isp and sensor nodes shouldn't
- * be disabled, skip them.
- */
- if (rkisp1->pipe.start_count < 2)
- v4l2_subdev_disable_streams(&rkisp1->isp.sd,
- RKISP1_ISP_PAD_SOURCE_VIDEO, BIT(0));
-
v4l2_subdev_disable_streams(&rkisp1->resizer_devs[cap->id].sd,
RKISP1_RSZ_PAD_SRC, BIT(0));
}
@@ -1099,23 +1090,8 @@ static int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap)
if (ret)
goto err_disable_cap;
- /*
- * If the other capture is streaming, isp and sensor nodes are already
- * enabled, skip them.
- */
- if (rkisp1->pipe.start_count > 1)
- return 0;
-
- ret = v4l2_subdev_enable_streams(&rkisp1->isp.sd,
- RKISP1_ISP_PAD_SOURCE_VIDEO, BIT(0));
- if (ret)
- goto err_disable_rsz;
-
return 0;
-err_disable_rsz:
- v4l2_subdev_disable_streams(&rkisp1->resizer_devs[cap->id].sd,
- RKISP1_RSZ_PAD_SRC, BIT(0));
err_disable_cap:
rkisp1_cap_stream_disable(cap);
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
index ce0b2c68cf826992ed07c453a611a7cab7dfb96a..cc7695c1267fc75b6e9a9518786e79c82daaa435 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
@@ -633,7 +633,15 @@ static int rkisp1_rsz_enable_streams(struct v4l2_subdev *sd,
if (rkisp1_has_feature(rkisp1, DUAL_CROP))
rkisp1_dcrop_config(rsz, state);
- return 0;
+ /*
+ * If the other capture is streaming, isp and sensor nodes are already
+ * enabled, skip them.
+ */
+ if (rkisp1->pipe.start_count > 1)
+ return 0;
+
+ return v4l2_subdev_enable_streams(&rkisp1->isp.sd,
+ RKISP1_ISP_PAD_SOURCE_VIDEO, BIT(0));
}
static int rkisp1_rsz_disable_streams(struct v4l2_subdev *sd,
@@ -644,6 +652,14 @@ static int rkisp1_rsz_disable_streams(struct v4l2_subdev *sd,
container_of(sd, struct rkisp1_resizer, sd);
struct rkisp1_device *rkisp1 = rsz->rkisp1;
+ /*
+ * If the other capture is streaming, isp and sensor nodes shouldn't
+ * be disabled, skip them.
+ */
+ if (rkisp1->pipe.start_count < 2)
+ v4l2_subdev_disable_streams(&rkisp1->isp.sd,
+ RKISP1_ISP_PAD_SOURCE_VIDEO, BIT(0));
+
if (rkisp1_has_feature(rkisp1, DUAL_CROP))
rkisp1_dcrop_disable(rsz, RKISP1_SHADOW_REGS_ASYNC);
rkisp1_rsz_disable(rsz, RKISP1_SHADOW_REGS_ASYNC);
--
2.43.0
More information about the linux-arm-kernel
mailing list