diff --git a/[refs] b/[refs] index 4e9ed3da984b..1da3fc2cffa4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c62e2a19d2b8c884c6f3ab3bb29d6fde2e13d8ac +refs/heads/master: 5b6c3ef0e43fe80b517735697e4d0fb5729b2ab4 diff --git a/trunk/drivers/media/video/omap3isp/ispvideo.c b/trunk/drivers/media/video/omap3isp/ispvideo.c index fd94cdf471bc..ba86f119ebbc 100644 --- a/trunk/drivers/media/video/omap3isp/ispvideo.c +++ b/trunk/drivers/media/video/omap3isp/ispvideo.c @@ -1056,6 +1056,14 @@ isp_video_streamon(struct file *file, void *fh, enum v4l2_buf_type type) if (video->isp->pdata->set_constraints) video->isp->pdata->set_constraints(video->isp, false); media_entity_pipeline_stop(&video->video.entity); + /* The DMA queue must be emptied here, otherwise CCDC interrupts + * that will get triggered the next time the CCDC is powered up + * will try to access buffers that might have been freed but + * still present in the DMA queue. This can easily get triggered + * if the above omap3isp_pipeline_set_stream() call fails on a + * system with a free-running sensor. + */ + INIT_LIST_HEAD(&video->dmaqueue); video->queue = NULL; }