[PATCH 15/16] media: rkisp1: Expose startup and shutdown functions

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


Expose the startup and shutdown functions throughout the module so
that they can be called from different source files to the one that
they are defined in - this is in preparation for the runtime resume
and suspend operations being updated to accommodate hibernation and
suspension with an active stream.

Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
---
 .../media/platform/rockchip/rkisp1/rkisp1-capture.c  | 14 ++++++++++----
 .../media/platform/rockchip/rkisp1/rkisp1-common.h   |  9 +++++++++
 .../media/platform/rockchip/rkisp1/rkisp1-params.c   |  9 +++++++--
 .../media/platform/rockchip/rkisp1/rkisp1-stats.c    | 20 +++++++++++---------
 4 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index 3204f5afe3bbf1a5de88d57b50a120e716b1345b..3e199814a50f4042624393ee28bbf3b6485e5844 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -953,8 +953,8 @@ static int rkisp1_vb2_buf_prepare(struct vb2_buffer *vb)
 	return 0;
 }
 
-static void rkisp1_return_all_buffers(struct rkisp1_capture *cap,
-				      enum vb2_buffer_state state)
+void rkisp1_return_all_buffers(struct rkisp1_capture *cap,
+			       enum vb2_buffer_state state)
 {
 	struct rkisp1_buffer *buf;
 
@@ -1061,7 +1061,7 @@ static void rkisp1_cap_stream_disable(struct rkisp1_capture *cap)
  * rkisp1_pipeline_stream_enable() and disable the DMA engine.
  * Should be called before video_device_pipeline_stop()
  */
-static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
+void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
 	__must_hold(&cap->rkisp1->stream_lock)
 {
 	struct rkisp1_device *rkisp1 = cap->rkisp1;
@@ -1077,7 +1077,7 @@ static void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap)
  * Enable the DMA Engine and call s_stream(true) through the pipeline.
  * Should be called after video_device_pipeline_start()
  */
-static int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap)
+int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap)
 	__must_hold(&cap->rkisp1->stream_lock)
 {
 	struct rkisp1_device *rkisp1 = cap->rkisp1;
@@ -1173,6 +1173,12 @@ rkisp1_vb2_start_streaming(struct vb2_queue *queue, unsigned int count)
 	return ret;
 }
 
+bool rkisp1_vb2_is_streaming(struct rkisp1_capture *cap)
+{
+	return vb2_is_streaming(&cap->vnode.buf_queue) &&
+	       vb2_start_streaming_called(&cap->vnode.buf_queue);
+}
+
 static const struct vb2_ops rkisp1_vb2_ops = {
 	.queue_setup = rkisp1_vb2_queue_setup,
 	.buf_init = rkisp1_vb2_buf_init,
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
index 90942b22df313d83d9722cc550f01758cda9fa27..8f379a783da1fa97a330a7ec547354eb936cfadd 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h
@@ -691,6 +691,15 @@ void rkisp1_stats_unregister(struct rkisp1_device *rkisp1);
 int rkisp1_params_register(struct rkisp1_device *rkisp1);
 void rkisp1_params_unregister(struct rkisp1_device *rkisp1);
 
+/* suspend / resume handling helpers */
+bool rkisp1_vb2_is_streaming(struct rkisp1_capture *cap);
+void rkisp1_stats_vb2_return_all_buffers(struct rkisp1_stats *stats);
+void rkisp1_params_vb2_return_buffers(struct rkisp1_params *params);
+void rkisp1_return_all_buffers(struct rkisp1_capture *cap,
+			       enum vb2_buffer_state state);
+int rkisp1_pipeline_stream_enable(struct rkisp1_capture *cap);
+void rkisp1_pipeline_stream_disable(struct rkisp1_capture *cap);
+
 #if IS_ENABLED(CONFIG_DEBUG_FS)
 void rkisp1_debug_init(struct rkisp1_device *rkisp1);
 void rkisp1_debug_cleanup(struct rkisp1_device *rkisp1);
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
index cc42b5afbf65a9a992323c40cff1a6fe2d8b61e4..1f08b57e616159a389411e13f9217c4f4fcddd57 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-params.c
@@ -2761,9 +2761,8 @@ static int rkisp1_params_vb2_buf_prepare(struct vb2_buffer *vb)
 	return 0;
 }
 
-static void rkisp1_params_vb2_stop_streaming(struct vb2_queue *vq)
+void rkisp1_params_vb2_return_buffers(struct rkisp1_params *params)
 {
-	struct rkisp1_params *params = vq->drv_priv;
 	struct rkisp1_params_buffer *buf;
 	LIST_HEAD(tmp_list);
 
@@ -2778,7 +2777,13 @@ static void rkisp1_params_vb2_stop_streaming(struct vb2_queue *vq)
 
 	list_for_each_entry(buf, &tmp_list, queue)
 		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
+}
+
+static void rkisp1_params_vb2_stop_streaming(struct vb2_queue *vq)
+{
+	struct rkisp1_params *params = vq->drv_priv;
 
+	rkisp1_params_vb2_return_buffers(params);
 	params->enabled_blocks = 0;
 }
 
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
index fba95a1786be0d6782829a5604d41893dda8e826..c476310b401b39c3bf1784fcc6b521421192877f 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-stats.c
@@ -128,23 +128,25 @@ static int rkisp1_stats_vb2_buf_prepare(struct vb2_buffer *vb)
 	return 0;
 }
 
-static void rkisp1_stats_vb2_stop_streaming(struct vb2_queue *vq)
+void rkisp1_stats_vb2_return_all_buffers(struct rkisp1_stats *stats)
 {
-	struct rkisp1_stats *stats = vq->drv_priv;
-	struct rkisp1_buffer *buf;
-	unsigned int i;
+	struct rkisp1_buffer *buf, *tmp;
 
 	guard(spinlock_irq)(&stats->lock);
-	for (i = 0; i < RKISP1_ISP_STATS_REQ_BUFS_MAX; i++) {
-		if (list_empty(&stats->stat))
-			break;
-		buf = list_first_entry(&stats->stat,
-				       struct rkisp1_buffer, queue);
+
+	list_for_each_entry_safe(buf, tmp, &stats->stat, queue) {
 		list_del(&buf->queue);
 		vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
 	}
 }
 
+static void rkisp1_stats_vb2_stop_streaming(struct vb2_queue *vq)
+{
+	struct rkisp1_stats *stats = vq->drv_priv;
+
+	rkisp1_stats_vb2_return_all_buffers(stats);
+}
+
 static const struct vb2_ops rkisp1_stats_vb2_ops = {
 	.queue_setup = rkisp1_stats_vb2_queue_setup,
 	.buf_queue = rkisp1_stats_vb2_buf_queue,

-- 
2.43.0




More information about the linux-arm-kernel mailing list