summaryrefslogtreecommitdiffstats
path: root/drivers/media/i2c/imx334.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>2021-04-23 17:19:13 +0200
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2021-05-10 11:36:33 +0200
commit62c90446868b439929cb04395f04a709a64ae04b (patch)
tree0eda07dada2b638f1286ca3b0328476a34220180 /drivers/media/i2c/imx334.c
parentmedia: i2c: ccs-core: fix pm_runtime_get_sync() usage count (diff)
downloadlinux-62c90446868b439929cb04395f04a709a64ae04b.tar.xz
linux-62c90446868b439929cb04395f04a709a64ae04b.zip
media: i2c: imx334: fix the pm runtime get logic
The PM runtime get logic is currently broken, as it checks if ret is zero instead of checking if it is an error code, as reported by Dan Carpenter. While here, use the pm_runtime_resume_and_get() as added by: commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter") added pm_runtime_resume_and_get() in order to automatically handle dev->power.usage_count decrement on errors. As a bonus, such function always return zero on success. It should also be noticed that a fail of pm_runtime_get_sync() would potentially result in a spurious runtime_suspend(), instead of using pm_runtime_put_noidle(). Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Reviewed-by: Daniele Alessandrelli <daniele.alessandrelli@intel.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Diffstat (limited to 'drivers/media/i2c/imx334.c')
-rw-r--r--drivers/media/i2c/imx334.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c
index 047aa7658d21..23f28606e570 100644
--- a/drivers/media/i2c/imx334.c
+++ b/drivers/media/i2c/imx334.c
@@ -717,9 +717,9 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable)
}
if (enable) {
- ret = pm_runtime_get_sync(imx334->dev);
- if (ret)
- goto error_power_off;
+ ret = pm_runtime_resume_and_get(imx334->dev);
+ if (ret < 0)
+ goto error_unlock;
ret = imx334_start_streaming(imx334);
if (ret)
@@ -737,6 +737,7 @@ static int imx334_set_stream(struct v4l2_subdev *sd, int enable)
error_power_off:
pm_runtime_put(imx334->dev);
+error_unlock:
mutex_unlock(&imx334->mutex);
return ret;