diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 09166a267990..a7f3a1953a0d 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -3573,15 +3573,6 @@ void rkisp_isp_isr(unsigned int isp_mis, dev->isp_isr_cnt++; /* start edge of v_sync */ if (isp_mis & CIF_ISP_V_START) { - if (dev->isp_state & ISP_FRAME_END) { - u64 tmp = dev->isp_sdev.dbg.interval + - dev->isp_sdev.dbg.timestamp; - - dev->isp_sdev.dbg.timestamp = ktime_get_ns(); - /* v-blank: frame_end - frame_start */ - dev->isp_sdev.dbg.delay = dev->isp_sdev.dbg.timestamp - tmp; - } - rkisp_set_state(&dev->isp_state, ISP_FRAME_VS); if (dev->hw_dev->monitor.is_en) { rkisp_set_state(&dev->hw_dev->monitor.state, ISP_FRAME_VS); if (!completion_done(&dev->hw_dev->monitor.cmpl)) @@ -3702,6 +3693,18 @@ vs_skip: dev->isp_state &= ~ISP_ERROR; } + if (isp_mis & CIF_ISP_V_START) { + if (dev->isp_state & ISP_FRAME_END) { + u64 tmp = dev->isp_sdev.dbg.interval + + dev->isp_sdev.dbg.timestamp; + + dev->isp_sdev.dbg.timestamp = ktime_get_ns(); + /* v-blank: frame(N)start - frame(N-1)end */ + dev->isp_sdev.dbg.delay = dev->isp_sdev.dbg.timestamp - tmp; + } + rkisp_set_state(&dev->isp_state, ISP_FRAME_VS); + } + if ((isp_mis & (CIF_ISP_FRAME | si3a_isr_mask)) || (isp3a_mis & raw3a_isr_mask)) { u32 irq = isp_mis;