From 635bb96ec03ec0b070996954101b9e0b65dd6d55 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 20 May 2025 10:42:29 +0800 Subject: [PATCH] media: rockchip: vpss: limit vpss start first if online Change-Id: I71acdf32ff4c2af9592320d38bd28ea53d8cd95f Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/vpss/dev.c | 13 ++++++++++++- drivers/media/platform/rockchip/vpss/stream_v10.c | 3 ++- drivers/media/platform/rockchip/vpss/stream_v20.c | 3 ++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/vpss/dev.c b/drivers/media/platform/rockchip/vpss/dev.c index bf48377b9d96..3748a19909e8 100644 --- a/drivers/media/platform/rockchip/vpss/dev.c +++ b/drivers/media/platform/rockchip/vpss/dev.c @@ -78,9 +78,20 @@ void rkvpss_pipeline_default_fmt(struct rkvpss_device *dev) int rkvpss_pipeline_open(struct rkvpss_device *dev) { + int isp_working = 0; + if (atomic_inc_return(&dev->pipe_power_cnt) > 1) return 0; - + if (!atomic_read(&dev->hw_dev->refcnt)) { + v4l2_subdev_call(dev->remote_sd, core, ioctl, + RKISP_VPSS_GET_ISP_WORKING, &isp_working); + if (isp_working) { + atomic_dec(&dev->pipe_power_cnt); + v4l2_err(&dev->v4l2_dev, + "no support isp working then vpss start, make sure vpss stream on first\n"); + return -EINVAL; + } + } return 0; } diff --git a/drivers/media/platform/rockchip/vpss/stream_v10.c b/drivers/media/platform/rockchip/vpss/stream_v10.c index b0b35f26c661..6ac0a5a4e50c 100644 --- a/drivers/media/platform/rockchip/vpss/stream_v10.c +++ b/drivers/media/platform/rockchip/vpss/stream_v10.c @@ -1871,7 +1871,8 @@ static int rkvpss_start_streaming(struct vb2_queue *queue, unsigned int count) goto free_buf_queue; } - rkvpss_pipeline_open(dev); + if (rkvpss_pipeline_open(dev) < 0) + goto free_buf_queue; ret = rkvpss_stream_start(stream); if (ret < 0) { diff --git a/drivers/media/platform/rockchip/vpss/stream_v20.c b/drivers/media/platform/rockchip/vpss/stream_v20.c index 5038086c7ead..420e292c43ef 100644 --- a/drivers/media/platform/rockchip/vpss/stream_v20.c +++ b/drivers/media/platform/rockchip/vpss/stream_v20.c @@ -2094,7 +2094,8 @@ static int rkvpss_start_streaming(struct vb2_queue *queue, unsigned int count) goto free_buf_queue; } - rkvpss_pipeline_open(dev); + if (rkvpss_pipeline_open(dev) < 0) + goto free_buf_queue; ret = rkvpss_stream_start(stream); if (ret < 0) {