diff --git a/drivers/media/platform/rockchip/isp/bridge_v20.c b/drivers/media/platform/rockchip/isp/bridge_v20.c index f441b8d8e9b4..c637b0069128 100644 --- a/drivers/media/platform/rockchip/isp/bridge_v20.c +++ b/drivers/media/platform/rockchip/isp/bridge_v20.c @@ -609,11 +609,13 @@ static int bridge_stop(struct rkisp_bridge_device *dev) dev->ops->disable(dev); rkisp_stop_spstream(sp_stream); hdr_stop_dmatx(dev->ispdev); - ret = wait_event_timeout(dev->done, !dev->en, - msecs_to_jiffies(1000)); - if (!ret) - v4l2_warn(&dev->sd, - "%s timeout ret:%d\n", __func__, ret); + if (!dev->ispdev->hw_dev->is_shutdown) { + ret = wait_event_timeout(dev->done, !dev->en, + msecs_to_jiffies(1000)); + if (!ret) + v4l2_warn(&dev->sd, + "%s timeout ret:%d\n", __func__, ret); + } crop_off(dev); dev->stopping = false; dev->en = false; diff --git a/drivers/media/platform/rockchip/isp/capture_v1x.c b/drivers/media/platform/rockchip/isp/capture_v1x.c index 181978acf1b7..3c1df5e5273d 100644 --- a/drivers/media/platform/rockchip/isp/capture_v1x.c +++ b/drivers/media/platform/rockchip/isp/capture_v1x.c @@ -790,7 +790,8 @@ static void rkisp_stream_stop(struct rkisp_stream *stream) stream->stopping = true; stream->ops->stop_mi(stream); if ((dev->isp_state & ISP_START) && - dev->isp_inp != INP_DMARX_ISP) { + dev->isp_inp != INP_DMARX_ISP && + !dev->hw_dev->is_shutdown) { ret = wait_event_timeout(stream->done, !stream->streaming, msecs_to_jiffies(1000)); diff --git a/drivers/media/platform/rockchip/isp/capture_v20.c b/drivers/media/platform/rockchip/isp/capture_v20.c index 8307ae6cb74e..75df13bfd66b 100644 --- a/drivers/media/platform/rockchip/isp/capture_v20.c +++ b/drivers/media/platform/rockchip/isp/capture_v20.c @@ -1518,7 +1518,8 @@ static void rkisp_stream_stop(struct rkisp_stream *stream) stream->stopping = true; stream->ops->stop_mi(stream); if ((dev->isp_state & ISP_START) && - dev->isp_inp != INP_DMARX_ISP) { + dev->isp_inp != INP_DMARX_ISP && + !dev->hw_dev->is_shutdown) { ret = wait_event_timeout(stream->done, !stream->streaming, msecs_to_jiffies(1000)); diff --git a/drivers/media/platform/rockchip/isp/capture_v21.c b/drivers/media/platform/rockchip/isp/capture_v21.c index 2dc077a48d25..d685952f9f25 100644 --- a/drivers/media/platform/rockchip/isp/capture_v21.c +++ b/drivers/media/platform/rockchip/isp/capture_v21.c @@ -1331,7 +1331,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream) struct v4l2_device *v4l2_dev = &dev->v4l2_dev; unsigned long lock_flags = 0; int ret = 0; - bool is_wait = true; + bool is_wait = dev->hw_dev->is_shutdown ? false : true; if (!dev->dmarx_dev.trigger && (is_rdbk_stream(stream) || is_hdr_stream(stream))) { diff --git a/drivers/media/platform/rockchip/isp/capture_v30.c b/drivers/media/platform/rockchip/isp/capture_v30.c index d0ff8e295e0a..f6b06fe2217c 100644 --- a/drivers/media/platform/rockchip/isp/capture_v30.c +++ b/drivers/media/platform/rockchip/isp/capture_v30.c @@ -966,7 +966,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream) struct v4l2_device *v4l2_dev = &dev->v4l2_dev; unsigned long lock_flags = 0; int ret = 0; - bool is_wait = true; + bool is_wait = dev->hw_dev->is_shutdown ? false : true; stream->stopping = true; if (dev->hw_dev->is_single) diff --git a/drivers/media/platform/rockchip/isp/capture_v32.c b/drivers/media/platform/rockchip/isp/capture_v32.c index 67cb27c320eb..2b33bbb951e9 100644 --- a/drivers/media/platform/rockchip/isp/capture_v32.c +++ b/drivers/media/platform/rockchip/isp/capture_v32.c @@ -1307,7 +1307,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream) struct v4l2_device *v4l2_dev = &dev->v4l2_dev; unsigned long lock_flags = 0; int ret = 0; - bool is_wait = true; + bool is_wait = dev->hw_dev->is_shutdown ? false : true; stream->stopping = true; stream->is_pause = false; @@ -1562,9 +1562,10 @@ static void rkisp_stop_streaming(struct vb2_queue *queue) if (stream->id == RKISP_STREAM_LUMA) { stream->stopping = true; - wait_event_timeout(stream->done, - stream->frame_end, - msecs_to_jiffies(500)); + if (!dev->hw_dev->is_shutdown) + wait_event_timeout(stream->done, + stream->frame_end, + msecs_to_jiffies(500)); stream->streaming = false; stream->stopping = false; destroy_buf_queue(stream, VB2_BUF_STATE_ERROR); diff --git a/drivers/media/platform/rockchip/isp/dmarx.c b/drivers/media/platform/rockchip/isp/dmarx.c index 2d8a7eb9b855..fade9c243d7e 100644 --- a/drivers/media/platform/rockchip/isp/dmarx.c +++ b/drivers/media/platform/rockchip/isp/dmarx.c @@ -505,7 +505,8 @@ static void dmarx_stop(struct rkisp_stream *stream) int ret = 0; stream->stopping = true; - if ((dev->isp_state & ISP_START) && !stream->frame_end) { + if ((dev->isp_state & ISP_START) && !stream->frame_end && + !dev->hw_dev->is_shutdown) { ret = wait_event_timeout(stream->done, !stream->streaming, msecs_to_jiffies(100)); diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 7597539eb919..fbc772eff2a4 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -1838,7 +1838,7 @@ static void rkisp_stop_3a_run(struct rkisp_device *dev) int ret = 1000; if (!rkisp_is_need_3a(dev) || dev->isp_ver == ISP_V20 || - !params_vdev->is_subs_evt) + !params_vdev->is_subs_evt || dev->hw_dev->is_shutdown) return; v4l2_event_queue(vdev, &ev);