media: ov7251: Fix multiple problems in s_stream callback
authorSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 18 May 2022 15:52:36 +0000 (16:52 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 8 Jul 2022 14:12:17 +0000 (15:12 +0100)
The s_stream callback had several issues:

- If pm_runtime_get_sync() fails, the usage_count is not put.

- The sensor wasn't suspended if s_stream(subdev, 1) failed.

Fix this.

Fixes: ("media: i2c: Add pm_runtime support to ov7251")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/i2c/ov7251.c

index 0e7be15..603a4c7 100644 (file)
@@ -1340,7 +1340,7 @@ static int ov7251_s_stream(struct v4l2_subdev *subdev, int enable)
        if (enable) {
                ret = pm_runtime_get_sync(ov7251->dev);
                if (ret < 0)
-                       goto unlock_out;
+                       goto err_power_down;
 
                ret = ov7251_pll_configure(ov7251);
                if (ret) {
@@ -1372,12 +1372,11 @@ static int ov7251_s_stream(struct v4l2_subdev *subdev, int enable)
                pm_runtime_put(ov7251->dev);
        }
 
-unlock_out:
        mutex_unlock(&ov7251->lock);
        return ret;
 
 err_power_down:
-       pm_runtime_put_noidle(ov7251->dev);
+       pm_runtime_put(ov7251->dev);
        mutex_unlock(&ov7251->lock);
        return ret;
 }