diff --git a/drivers/media/platform/rockchip/isp/capture_v39.c b/drivers/media/platform/rockchip/isp/capture_v39.c index 442ccd28039d..1ed0b0a11ac7 100644 --- a/drivers/media/platform/rockchip/isp/capture_v39.c +++ b/drivers/media/platform/rockchip/isp/capture_v39.c @@ -1814,7 +1814,13 @@ end: void rkisp_stream_ldc_end_v39(struct rkisp_device *dev) { struct rkisp_stream *stream = &dev->cap_dev.stream[RKISP_STREAM_LDC]; + u32 val = rkisp_read(dev, ISP39_LDCV_CTRL, true); + /* ldcv_irq: ldcv enable is frame end other frame input */ + if (val & ISP39_LDCV_MAP_ERROR) { + v4l2_err(&dev->v4l2_dev, "ldcv map data error\n"); + return; + } if (stream->stopping) { if (!dev->hw_dev->is_single) { stream->stopping = false; @@ -1826,7 +1832,7 @@ void rkisp_stream_ldc_end_v39(struct rkisp_device *dev) stream->streaming = false; wake_up(&stream->done); } - } else { + } else if (stream->streaming) { mi_frame_end(stream, FRAME_IRQ); } rkisp_check_idle(dev, ISP_FRAME_LDC); diff --git a/drivers/media/platform/rockchip/isp/regs_v3x.h b/drivers/media/platform/rockchip/isp/regs_v3x.h index 31f023918c2f..3ad0ae284b7c 100644 --- a/drivers/media/platform/rockchip/isp/regs_v3x.h +++ b/drivers/media/platform/rockchip/isp/regs_v3x.h @@ -2533,6 +2533,8 @@ #define ISP39_LDCV_UV_SWAP BIT(4) #define ISP39_LDCV_LUT_MODE(x) ((x & 0x3) << 24) #define ISP39_LDCV_FORCE_UPD BIT(26) +#define ISP39_LDCV_MAP_ERROR BIT(28) +#define ISP39_LDCV_WORKING BIT(30) #define ISP39_LDCV_EN_SHD BIT(31) /* mi interrupt */