From 653c8f587141c2d6af6c778aceab8d1ef9078a3b Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Thu, 2 Jun 2022 15:47:14 +0800 Subject: [PATCH] media: rockchip: vicap fixed hdr err with group mode Signed-off-by: Zefa Chen Change-Id: I3720c692dbd480067f65fc6c8800b7085ffa783a --- drivers/media/platform/rockchip/cif/capture.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 884b0f4918d6..ccc1d83a273f 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -7726,13 +7726,15 @@ unsigned int rkcif_irq_global(struct rkcif_device *cif_dev) return intstat_glb; } -static bool rkcif_check_buffer_prepare(struct rkcif_device *cif_dev) +static bool rkcif_check_buffer_prepare(struct rkcif_stream *stream) { + struct rkcif_device *cif_dev = stream->cifdev; unsigned long flags; bool is_update = false; spin_lock_irqsave(&cif_dev->hw_dev->group_lock, flags); - if (cif_dev->hw_dev->sync_config.update_code & BIT(cif_dev->csi_host_idx)) { + if (stream->id == 0 && + cif_dev->hw_dev->sync_config.update_code & BIT(cif_dev->csi_host_idx)) { is_update = true; cif_dev->hw_dev->sync_config.update_code &= ~(BIT(cif_dev->csi_host_idx)); if (!cif_dev->hw_dev->sync_config.update_code && @@ -7740,7 +7742,11 @@ static bool rkcif_check_buffer_prepare(struct rkcif_device *cif_dev) cif_dev->hw_dev->sync_config.update_code = cif_dev->hw_dev->sync_config.update_cache; cif_dev->hw_dev->sync_config.update_cache = 0; } + } else { + if (cif_dev->rdbk_buf[RDBK_L]) + is_update = true; } + spin_unlock_irqrestore(&cif_dev->hw_dev->group_lock, flags); return is_update; } @@ -7885,7 +7891,7 @@ void rkcif_irq_pingpong_v1(struct rkcif_device *cif_dev) if (cif_dev->sync_type == RKCIF_NOSYNC_MODE) is_update = true; else - is_update = rkcif_check_buffer_prepare(cif_dev); + is_update = rkcif_check_buffer_prepare(stream); if (is_update) rkcif_update_stream(cif_dev, stream, mipi_id); if (cif_dev->chip_id == CHIP_RV1106_CIF)