media: ov7251: Fix multiple problems in s_stream callback

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>
This commit is contained in:
Sakari Ailus 2022-05-18 16:52:36 +01:00 committed by Mauro Carvalho Chehab
parent 576d196c52
commit fda0f59a3a

View File

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