media: atomisp: Call media_pipeline_alloc_start() in stream start

Call media_pipeline_alloc_start() from atomisp_start_streaming() to mark
all involved subdevs as busy so that the links cannot be changed through
the media-controller APIs while streaming.

Reviewed-by: Andy Shevchenko <andy@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
Hans de Goede 2024-04-12 13:39:50 +01:00 committed by Mauro Carvalho Chehab
parent 20a7f79982
commit 1c3432df23
2 changed files with 16 additions and 0 deletions

View File

@ -902,6 +902,20 @@ int atomisp_start_streaming(struct vb2_queue *vq, unsigned int count)
if (ret)
goto out_unlock;
/*
* When running a classic v4l2 app after a media-controller aware
* app, the CSI-receiver -> ISP link for the current sensor may be
* disabled. Fix this up before marking the pipeline as started.
*/
mutex_lock(&isp->media_dev.graph_mutex);
atomisp_setup_input_links(isp);
ret = __media_pipeline_start(&asd->video_out.vdev.entity.pads[0], &asd->video_out.pipe);
mutex_unlock(&isp->media_dev.graph_mutex);
if (ret) {
dev_err(isp->dev, "Error starting mc pipline: %d\n", ret);
goto out_unlock;
}
/* Input system HW workaround */
atomisp_dma_burst_len_cfg(asd);
@ -1054,6 +1068,7 @@ void atomisp_stop_streaming(struct vb2_queue *vq)
if (ret)
dev_warn(isp->dev, "Recreating streams failed: %d\n", ret);
media_pipeline_stop(&asd->video_out.vdev.entity.pads[0]);
mutex_unlock(&isp->mutex);
}

View File

@ -49,6 +49,7 @@ struct atomisp_video_pipe {
struct video_device vdev;
enum v4l2_buf_type type;
struct media_pad pad;
struct media_pipeline pipe;
struct vb2_queue vb_queue;
/* Lock for vb_queue, when also taking isp->mutex this must be taken first! */
struct mutex vb_queue_mutex;