]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: atomisp: Call media_pipeline_alloc_start() in stream start
authorHans de Goede <hdegoede@redhat.com>
Fri, 12 Apr 2024 12:39:50 +0000 (13:39 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 26 Apr 2024 09:54:03 +0000 (10:54 +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 <andy@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/pci/atomisp_ioctl.c
drivers/staging/media/atomisp/pci/atomisp_subdev.h

index c16942051cfb2d2a9404ef08d7e6fb3c951fc4ae..8ef8cbc3b7a78e9c1ccac4dba9ddf5b85e399c53 100644 (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);
 }
 
index 9c1703bf439cf188aa91b718a747fc7c115f54ff..bcfa829dbf61f758fa0f975bec140ca5fc4192e1 100644 (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;