media: ov2680: Don't take the lock for try_fmt calls
authorHans de Goede <hdegoede@redhat.com>
Thu, 3 Aug 2023 09:33:20 +0000 (11:33 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 14 Aug 2023 18:27:56 +0000 (20:27 +0200)
On ov2680_set_fmt() calls with format->which == V4L2_SUBDEV_FORMAT_TRY,
ov2680_set_fmt() does not talk to the sensor.

So in this case there is no need to lock the sensor->lock mutex or
to check that the sensor is streaming.

Fixes: 3ee47cad3e69 ("media: ov2680: Add Omnivision OV2680 sensor driver")
Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/i2c/ov2680.c

index 5c1f5dd..e6e1474 100644 (file)
@@ -595,24 +595,22 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
        if (format->pad != 0)
                return -EINVAL;
 
-       mutex_lock(&sensor->lock);
-
-       if (sensor->is_streaming) {
-               ret = -EBUSY;
-               goto unlock;
-       }
-
        mode = v4l2_find_nearest_size(ov2680_mode_data,
                                      ARRAY_SIZE(ov2680_mode_data), width,
                                      height, fmt->width, fmt->height);
-       if (!mode) {
-               ret = -EINVAL;
-               goto unlock;
-       }
+       if (!mode)
+               return -EINVAL;
 
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
                try_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
                format->format = *try_fmt;
+               return 0;
+       }
+
+       mutex_lock(&sensor->lock);
+
+       if (sensor->is_streaming) {
+               ret = -EBUSY;
                goto unlock;
        }