media: atomisp: Rework asd->streaming state update in __atomisp_streamoff()
authorHans de Goede <hdegoede@redhat.com>
Sat, 3 Sep 2022 21:50:42 +0000 (23:50 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 24 Sep 2022 08:08:45 +0000 (10:08 +0200)
During the first __atomisp_streamoff() call on an asd with only one pipe
streaming asd->streaming would get set twice:

asd->streaming = ATOMISP_DEVICE_STREAMING_STOPPING;
asd->streaming = ATOMISP_DEVICE_STREAMING_DISABLED;

Rework the code a bit so that it gets set to the correct value
right away instead of doing this in 2 steps.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
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

index daecdcd..8991575 100644 (file)
@@ -1930,14 +1930,14 @@ int __atomisp_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
        if (!pipe->capq.streaming)
                return 0;
 
-       spin_lock_irqsave(&isp->lock, flags);
-       if (asd->streaming == ATOMISP_DEVICE_STREAMING_ENABLED) {
-               asd->streaming = ATOMISP_DEVICE_STREAMING_STOPPING;
+       if (asd->streaming == ATOMISP_DEVICE_STREAMING_ENABLED)
                first_streamoff = true;
-       }
 
+       spin_lock_irqsave(&isp->lock, flags);
        if (atomisp_subdev_streaming_count(asd) == 1)
                asd->streaming = ATOMISP_DEVICE_STREAMING_DISABLED;
+       else
+               asd->streaming = ATOMISP_DEVICE_STREAMING_STOPPING;
        spin_unlock_irqrestore(&isp->lock, flags);
 
        if (!first_streamoff) {