From 6459ce336d32e3e4a3e9faec751d2bf6238d1b32 Mon Sep 17 00:00:00 2001 From: Wang Panzhenzhuan Date: Fri, 5 Jun 2020 09:36:32 +0800 Subject: [PATCH] drivers: media: platform: rockchip: cif: fix pingpong mode issue fix following problem when using pingpong mode rkcif: Bad frame, pp irq:0x20b frmst:0xda900000 size:1600x600 Signed-off-by: Wang Panzhenzhuan Signed-off-by: Allon Huang Change-Id: Iaf9222d5465a966047c26b7a7518bbc419cd5748 --- drivers/media/platform/rockchip/cif/capture.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 493b0e4fe0ea..70bec91a0ac7 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -2543,7 +2543,7 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) stream->frame_idx++; } } else { - u32 lastline, lastpix, ctl, cif_frmst; + u32 lastline, lastpix, ctl, cif_frmst, frmid; struct rkcif_stream *stream; intstat = rkcif_read_register(cif_dev, CIF_REG_DVP_INTSTAT); @@ -2590,6 +2590,14 @@ void rkcif_irq_pingpong(struct rkcif_device *cif_dev) return; } + frmid = CIF_GET_FRAME_ID(cif_frmst); + if ((cif_frmst == 0xfffd0002) || (cif_frmst == 0xfffe0002)) { + v4l2_info(&cif_dev->v4l2_dev, "frmid:%d, frmstat:0x%x\n", + frmid, cif_frmst); + rkcif_write_register(cif_dev, CIF_REG_DVP_FRAME_STATUS, + FRAME_STAT_CLS); + } + if (lastline != stream->pixm.height || (!(cif_frmst & CIF_F0_READY) && !(cif_frmst & CIF_F1_READY))) {