From eefbce4bf86037dd098530bf87e40b4c39c9c503 Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Tue, 7 Mar 2023 09:25:33 +0800 Subject: [PATCH] media: rockchip: vicap fixes error when used dvp with online mode Signed-off-by: Zefa Chen Change-Id: I823dbf7c54176f7a0fed7dcfcc2cd066473cbf33 --- drivers/media/platform/rockchip/cif/capture.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 45525eae2a7b..3159ff5615f9 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -5063,6 +5063,7 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode) struct rkcif_dvp_sof_subdev *sof_sd = &dev->dvp_sof_subdev; const struct cif_output_fmt *fmt; unsigned int dma_en = 0; + unsigned int dma_state = 0; int i = 0; u32 sav_detect = BT656_DETECT_SAV; u32 reserved = 0; @@ -5079,8 +5080,16 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode) sensor_info = dev->active_sensor; mbus = &sensor_info->mbus; + dma_state = stream->dma_en; if ((mode & RKCIF_STREAM_MODE_CAPTURE) == RKCIF_STREAM_MODE_CAPTURE) - stream->dma_en = RKCIF_DMAEN_BY_VICAP; + stream->dma_en |= RKCIF_DMAEN_BY_VICAP; + else if ((mode & RKCIF_STREAM_MODE_TOISP_RDBK) == RKCIF_STREAM_MODE_TOISP_RDBK) + stream->dma_en |= RKCIF_DMAEN_BY_ISP; + else if ((mode & RKCIF_STREAM_MODE_ROCKIT) == RKCIF_STREAM_MODE_ROCKIT) + stream->dma_en |= RKCIF_DMAEN_BY_ROCKIT; + + if (dma_state) + return 0; mbus_flags = mbus->flags; if ((mbus_flags & CIF_DVP_PCLK_DUAL_EDGE) == CIF_DVP_PCLK_DUAL_EDGE) { @@ -5299,7 +5308,8 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode) } if (dev->chip_id == CHIP_RK3588_CIF) { - dma_en = DVP_DMA_EN; + if (stream->dma_en) + dma_en = DVP_DMA_EN; if (stream->lack_buf_cnt == 2) dma_en = 0; rkcif_write_register(dev, CIF_REG_DVP_CTRL, @@ -5312,7 +5322,8 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode) | DVP_SW_HURRY_VALUE(3) | ENABLE_CAPTURE); } else if (dev->chip_id == CHIP_RV1106_CIF) { - dma_en = DVP_SW_DMA_EN(stream->id); + if (stream->dma_en) + dma_en = DVP_SW_DMA_EN(stream->id); if (stream->lack_buf_cnt == 2) dma_en = 0; rkcif_write_register(dev, CIF_REG_DVP_CTRL,