diff --git a/drivers/media/platform/rockchip/isp/bridge.c b/drivers/media/platform/rockchip/isp/bridge.c index bf8bc3e688b6..e9e6e87c5e81 100644 --- a/drivers/media/platform/rockchip/isp/bridge.c +++ b/drivers/media/platform/rockchip/isp/bridge.c @@ -296,6 +296,7 @@ static int init_buf(struct rkisp_bridge_device *dev, u32 pic_size, u32 gain_size v4l2_dbg(1, rkisp_debug, &dev->ispdev->v4l2_dev, "%s pic size:%d gain size:%d\n", __func__, pic_size, gain_size); + INIT_LIST_HEAD(&hw->list); for (i = 0; i < dev->buf_num; i++) { buf = &hw->bufs[i]; for (j = 0; j < GROUP_BUF_MAX; j++) { diff --git a/drivers/media/platform/rockchip/ispp/common.c b/drivers/media/platform/rockchip/ispp/common.c index f6066d9428b9..2e83fe2af127 100644 --- a/drivers/media/platform/rockchip/ispp/common.c +++ b/drivers/media/platform/rockchip/ispp/common.c @@ -185,6 +185,7 @@ static int rkispp_init_pool(struct rkispp_hw_dev *hw, struct rkisp_ispp_buf *dbu int i, ret = 0; void *mem; + INIT_LIST_HEAD(&hw->list); /* init dma buf pool */ for (i = 0; i < RKISPP_BUF_POOL_MAX; i++) { pool = &hw->pool[i]; diff --git a/drivers/media/platform/rockchip/ispp/stream.c b/drivers/media/platform/rockchip/ispp/stream.c index ba5a89498fae..2863bd0f84ee 100644 --- a/drivers/media/platform/rockchip/ispp/stream.c +++ b/drivers/media/platform/rockchip/ispp/stream.c @@ -2622,8 +2622,18 @@ void rkispp_module_work_event(struct rkispp_device *dev, rkispp_event_handle(dev, CMD_QUEUE_DMABUF, NULL); } - if (dev->ispp_sdev.state == ISPP_STOP) + if (dev->ispp_sdev.state == ISPP_STOP) { + if ((module & (ISPP_MODULE_TNR | ISPP_MODULE_NR)) && buf_rd) { + struct rkisp_ispp_buf *buf = buf_rd; + + if (buf->is_isp) + v4l2_subdev_call(dev->ispp_sdev.remote_sd, + video, s_rx_buffer, buf, NULL); + } + if (!dev->hw_dev->is_idle) + dev->hw_dev->is_idle = true; return; + } if (module & ISPP_MODULE_TNR) tnr_work_event(dev, buf_rd, buf_wr, is_isr);