This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: atomisp: Call media_pipeline_alloc_start() in stream start
Author:  Hans de Goede <hdego...@redhat.com>
Date:    Fri Apr 12 13:39:50 2024 +0100

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 <a...@kernel.org>
Signed-off-by: Hans de Goede <hdego...@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mche...@kernel.org>

 drivers/staging/media/atomisp/pci/atomisp_ioctl.c  | 15 +++++++++++++++
 drivers/staging/media/atomisp/pci/atomisp_subdev.h |  1 +
 2 files changed, 16 insertions(+)

---

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c 
b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index c16942051cfb..8ef8cbc3b7a7 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -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);
 }
 
diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.h 
b/drivers/staging/media/atomisp/pci/atomisp_subdev.h
index 9c1703bf439c..bcfa829dbf61 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_subdev.h
+++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.h
@@ -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;

Reply via email to