static int ccdc_video_queue(struct isp_video *video, struct isp_buffer *buffer)
 {
        struct isp_ccdc_device *ccdc = &video->isp->isp_ccdc;
+       unsigned long flags;
+       bool restart = false;
 
        if (!(ccdc->output & CCDC_OUTPUT_MEMORY))
                return -ENODEV;
 
        /* We now have a buffer queued on the output, restart the pipeline
         * on the next CCDC interrupt if running in continuous mode (or when
-        * starting the stream).
+        * starting the stream) in external sync mode, or immediately in BT.656
+        * sync mode as no CCDC interrupt is generated when the CCDC is stopped
+        * in that case.
         */
-       ccdc->underrun = 1;
+       spin_lock_irqsave(&ccdc->lock, flags);
+       if (ccdc->state == ISP_PIPELINE_STREAM_CONTINUOUS && !ccdc->running &&
+           ccdc->bt656)
+               restart = 1;
+       else
+               ccdc->underrun = 1;
+       spin_unlock_irqrestore(&ccdc->lock, flags);
+
+       if (restart)
+               ccdc_enable(ccdc);
 
        return 0;
 }