From cbb6b0b79d3eb5c099609327145d13fd4942df07 Mon Sep 17 00:00:00 2001 From: Wang Panzhenzhuan Date: Mon, 17 May 2021 10:23:02 +0800 Subject: [PATCH] media: platform: cif: fix multi dev issue if rkcif_dvp & rkcif_mipi_all registered, close rkcif_dvp streams alone can't reset rkcif, only rkcif_dvp & mipi dev all close can do reset. Signed-off-by: Wang Panzhenzhuan Change-Id: I103ca247a0866629d351699f752293af028d29d5 --- drivers/media/platform/rockchip/cif/capture.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 8a8f5f56b872..3dfaac4c870c 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -1942,6 +1942,9 @@ static void rkcif_stop_streaming(struct vb2_queue *queue) struct v4l2_device *v4l2_dev = &dev->v4l2_dev; struct rkcif_buffer *buf = NULL; int ret; + struct rkcif_hw *hw_dev = dev->hw_dev; + bool can_reset = true; + int i; mutex_lock(&dev->stream_lock); @@ -2006,7 +2009,14 @@ static void rkcif_stop_streaming(struct vb2_queue *queue) dev->can_be_reset = true; } - if (dev->can_be_reset && !atomic_read(&(dev->pipe.stream_cnt))) { + for (i = 0; i < hw_dev->dev_num; i++) { + if (atomic_read(&hw_dev->cif_dev[i]->pipe.stream_cnt) != 0) { + can_reset = false; + break; + } + } + + if (dev->can_be_reset && can_reset) { rkcif_do_cru_reset(dev); dev->can_be_reset = false; dev->reset_work_cancel = true;