[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