diff mbox series

media: i2c: Use pm_runtime_resume_and_get()

Message ID 20230914172054.31825-1-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show
Series media: i2c: Use pm_runtime_resume_and_get() | expand

Commit Message

Laurent Pinchart Sept. 14, 2023, 5:20 p.m. UTC
Simplify error handling by using pm_runtime_resume_and_get() instead of
pm_runtime_get_sync() with a put call in the error path.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/media/i2c/ccs/ccs-core.c |  6 +++---
 drivers/media/i2c/hi846.c        |  6 ++----
 drivers/media/i2c/hi847.c        |  5 ++---
 drivers/media/i2c/imx208.c       | 14 +++++++-------
 drivers/media/i2c/og01a1b.c      |  5 ++---
 drivers/media/i2c/ov5693.c       |  6 +++---
 drivers/media/i2c/ov7251.c       |  8 +++++---
 drivers/media/i2c/st-vgxy61.c    |  9 ++-------
 8 files changed, 26 insertions(+), 33 deletions(-)


base-commit: 0bb80ecc33a8fb5a682236443c1e740d5c917d1d

Comments

Benjamin Mugnier Sept. 15, 2023, 1:26 p.m. UTC | #1
Hi Laurent,

Just tested it on the vgxy61. Thanks for cleaning the
pm_runtime_put_autosuspend part.

On 9/14/23 19:20, Laurent Pinchart wrote:
> diff --git a/drivers/media/i2c/st-vgxy61.c b/drivers/media/i2c/st-vgxy61.c
> index 30f82ca344c4..5dbfb04b3124 100644
> --- a/drivers/media/i2c/st-vgxy61.c
> +++ b/drivers/media/i2c/st-vgxy61.c
> @@ -1170,14 +1170,9 @@ static int vgxy61_stream_enable(struct vgxy61_dev *sensor)
>  	if (ret)
>  		return ret;
>  
> -	ret = pm_runtime_get_sync(&client->dev);
> -	if (ret < 0) {
> -		pm_runtime_put_autosuspend(&client->dev);
> +	ret = pm_runtime_resume_and_get(&client->dev);
> +	if (ret)
>  		return ret;
> -	}
> -
> -	/* pm_runtime_get_sync() can return 1 as a valid return code */
> -	ret = 0;
>  
>  	vgxy61_write_reg(sensor, VGXY61_REG_FORMAT_CTRL,
>  			 get_bpp_by_code(sensor->fmt.code), &ret);

Acked-By: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
Martin Kepplinger-Novakovic Sept. 26, 2023, 7:16 a.m. UTC | #2
Am Donnerstag, dem 14.09.2023 um 20:20 +0300 schrieb Laurent Pinchart:
> Simplify error handling by using pm_runtime_resume_and_get() instead
> of
> pm_runtime_get_sync() with a put call in the error path.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  drivers/media/i2c/ccs/ccs-core.c |  6 +++---
>  drivers/media/i2c/hi846.c        |  6 ++----
>  drivers/media/i2c/hi847.c        |  5 ++---
>  drivers/media/i2c/imx208.c       | 14 +++++++-------
>  drivers/media/i2c/og01a1b.c      |  5 ++---
>  drivers/media/i2c/ov5693.c       |  6 +++---
>  drivers/media/i2c/ov7251.c       |  8 +++++---
>  drivers/media/i2c/st-vgxy61.c    |  9 ++-------
>  8 files changed, 26 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/media/i2c/ccs/ccs-core.c
> b/drivers/media/i2c/ccs/ccs-core.c
> index 49e0d9a09530..569bf9b67539 100644
> --- a/drivers/media/i2c/ccs/ccs-core.c
> +++ b/drivers/media/i2c/ccs/ccs-core.c
> @@ -1893,9 +1893,9 @@ static int ccs_pm_get_init(struct ccs_sensor
> *sensor)
>          * relies at the returned value to detect if the device was
> already
>          * active or not.
>          */
> -       rval = pm_runtime_get_sync(&client->dev);
> -       if (rval < 0)
> -               goto error;
> +       rval = pm_runtime_resume_and_get(&client->dev);
> +       if (rval)
> +               return rval;
>  
>         /* Device was already active, so don't set controls */
>         if (rval == 1)
> diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c
> index fa0038749a3b..8a8ae89a8453 100644
> --- a/drivers/media/i2c/hi846.c
> +++ b/drivers/media/i2c/hi846.c
> @@ -1613,11 +1613,9 @@ static int hi846_set_stream(struct v4l2_subdev
> *sd, int enable)
>         mutex_lock(&hi846->mutex);
>  
>         if (enable) {
> -               ret = pm_runtime_get_sync(&client->dev);
> -               if (ret < 0) {
> -                       pm_runtime_put_noidle(&client->dev);
> +               ret = pm_runtime_resume_and_get(&client->dev);
> +               if (ret)
>                         goto out;
> -               }
>  
>                 ret = hi846_start_streaming(hi846);
> 

for the hi846 driver:

Tested-by: Martin Kepplinger <martink@posteo.de> 

thanks for the patch!
diff mbox series

Patch

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 49e0d9a09530..569bf9b67539 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -1893,9 +1893,9 @@  static int ccs_pm_get_init(struct ccs_sensor *sensor)
 	 * relies at the returned value to detect if the device was already
 	 * active or not.
 	 */
-	rval = pm_runtime_get_sync(&client->dev);
-	if (rval < 0)
-		goto error;
+	rval = pm_runtime_resume_and_get(&client->dev);
+	if (rval)
+		return rval;
 
 	/* Device was already active, so don't set controls */
 	if (rval == 1)
diff --git a/drivers/media/i2c/hi846.c b/drivers/media/i2c/hi846.c
index fa0038749a3b..8a8ae89a8453 100644
--- a/drivers/media/i2c/hi846.c
+++ b/drivers/media/i2c/hi846.c
@@ -1613,11 +1613,9 @@  static int hi846_set_stream(struct v4l2_subdev *sd, int enable)
 	mutex_lock(&hi846->mutex);
 
 	if (enable) {
-		ret = pm_runtime_get_sync(&client->dev);
-		if (ret < 0) {
-			pm_runtime_put_noidle(&client->dev);
+		ret = pm_runtime_resume_and_get(&client->dev);
+		if (ret)
 			goto out;
-		}
 
 		ret = hi846_start_streaming(hi846);
 	}
diff --git a/drivers/media/i2c/hi847.c b/drivers/media/i2c/hi847.c
index 32547d7a2659..47aa2cd06e32 100644
--- a/drivers/media/i2c/hi847.c
+++ b/drivers/media/i2c/hi847.c
@@ -2623,9 +2623,8 @@  static int hi847_set_stream(struct v4l2_subdev *sd, int enable)
 
 	mutex_lock(&hi847->mutex);
 	if (enable) {
-		ret = pm_runtime_get_sync(&client->dev);
-		if (ret < 0) {
-			pm_runtime_put_noidle(&client->dev);
+		ret = pm_runtime_resume_and_get(&client->dev);
+		if (ret) {
 			mutex_unlock(&hi847->mutex);
 			return ret;
 		}
diff --git a/drivers/media/i2c/imx208.c b/drivers/media/i2c/imx208.c
index ee5a28675388..a6edcae4ef47 100644
--- a/drivers/media/i2c/imx208.c
+++ b/drivers/media/i2c/imx208.c
@@ -720,9 +720,11 @@  static int imx208_set_stream(struct v4l2_subdev *sd, int enable)
 	}
 
 	if (enable) {
-		ret = pm_runtime_get_sync(&client->dev);
-		if (ret < 0)
-			goto err_rpm_put;
+		ret = pm_runtime_resume_and_get(&client->dev);
+		if (ret) {
+			mutex_unlock(&imx208->imx208_mx);
+			return ret;
+		}
 
 		/*
 		 * Apply default & customized values
@@ -819,11 +821,9 @@  static int imx208_read_otp(struct imx208 *imx208)
 	if (imx208->otp_read)
 		goto out_unlock;
 
-	ret = pm_runtime_get_sync(&client->dev);
-	if (ret < 0) {
-		pm_runtime_put_noidle(&client->dev);
+	ret = pm_runtime_resume_and_get(&client->dev);
+	if (ret)
 		goto out_unlock;
-	}
 
 	ret = imx208_identify_module(imx208);
 	if (ret)
diff --git a/drivers/media/i2c/og01a1b.c b/drivers/media/i2c/og01a1b.c
index 365ce5684583..ccf6731ea2e2 100644
--- a/drivers/media/i2c/og01a1b.c
+++ b/drivers/media/i2c/og01a1b.c
@@ -737,9 +737,8 @@  static int og01a1b_set_stream(struct v4l2_subdev *sd, int enable)
 
 	mutex_lock(&og01a1b->mutex);
 	if (enable) {
-		ret = pm_runtime_get_sync(&client->dev);
-		if (ret < 0) {
-			pm_runtime_put_noidle(&client->dev);
+		ret = pm_runtime_resume_and_get(&client->dev);
+		if (ret) {
 			mutex_unlock(&og01a1b->mutex);
 			return ret;
 		}
diff --git a/drivers/media/i2c/ov5693.c b/drivers/media/i2c/ov5693.c
index 488ee6d9d301..033cf7f14f19 100644
--- a/drivers/media/i2c/ov5693.c
+++ b/drivers/media/i2c/ov5693.c
@@ -975,9 +975,9 @@  static int ov5693_s_stream(struct v4l2_subdev *sd, int enable)
 	int ret;
 
 	if (enable) {
-		ret = pm_runtime_get_sync(ov5693->dev);
-		if (ret < 0)
-			goto err_power_down;
+		ret = pm_runtime_resume_and_get(ov5693->dev);
+		if (ret)
+			return ret;
 
 		mutex_lock(&ov5693->lock);
 		ret = __v4l2_ctrl_handler_setup(&ov5693->ctrls.handler);
diff --git a/drivers/media/i2c/ov7251.c b/drivers/media/i2c/ov7251.c
index 675fb37a6fea..6582cc0e2384 100644
--- a/drivers/media/i2c/ov7251.c
+++ b/drivers/media/i2c/ov7251.c
@@ -1340,9 +1340,11 @@  static int ov7251_s_stream(struct v4l2_subdev *subdev, int enable)
 	mutex_lock(&ov7251->lock);
 
 	if (enable) {
-		ret = pm_runtime_get_sync(ov7251->dev);
-		if (ret < 0)
-			goto err_power_down;
+		ret = pm_runtime_resume_and_get(ov7251->dev);
+		if (ret) {
+			mutex_unlock(&ov7251->lock);
+			return ret;
+		}
 
 		ret = ov7251_pll_configure(ov7251);
 		if (ret) {
diff --git a/drivers/media/i2c/st-vgxy61.c b/drivers/media/i2c/st-vgxy61.c
index 30f82ca344c4..5dbfb04b3124 100644
--- a/drivers/media/i2c/st-vgxy61.c
+++ b/drivers/media/i2c/st-vgxy61.c
@@ -1170,14 +1170,9 @@  static int vgxy61_stream_enable(struct vgxy61_dev *sensor)
 	if (ret)
 		return ret;
 
-	ret = pm_runtime_get_sync(&client->dev);
-	if (ret < 0) {
-		pm_runtime_put_autosuspend(&client->dev);
+	ret = pm_runtime_resume_and_get(&client->dev);
+	if (ret)
 		return ret;
-	}
-
-	/* pm_runtime_get_sync() can return 1 as a valid return code */
-	ret = 0;
 
 	vgxy61_write_reg(sensor, VGXY61_REG_FORMAT_CTRL,
 			 get_bpp_by_code(sensor->fmt.code), &ret);