mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path
@ 2026-05-29 10:10 Stepan Ionichev
  2026-05-29 11:07 ` Joshua Crofts
  2026-05-29 17:34 ` Jonathan Cameron
  0 siblings, 2 replies; 3+ messages in thread
From: Stepan Ionichev @ 2026-05-29 10:10 UTC (permalink / raw)
  To: jic23; +Cc: dlechner, nuno.sa, andy, linux-iio, linux-kernel

ads1015_probe() calls pm_runtime_enable() and then iio_device_register().
If iio_device_register() fails the function returns directly, leaving
runtime PM enabled and autosuspend in use. On subsequent probe/rebind
the runtime PM tracking complains about an unbalanced enable.

Switch to devm_pm_runtime_enable() so the enable (and the matching
dont_use_autosuspend) are torn down automatically on probe failure and
on driver unbind. The manual pm_runtime_disable() and
pm_runtime_set_suspended() calls in ads1015_remove() are no longer
needed and are dropped; the devm action runs after .remove() and now
handles the teardown. While here, convert the dev_err() + return to
dev_err_probe() to follow current style.

Signed-off-by: Stepan Ionichev <sozdayvek@gmail.com>
---
 drivers/iio/adc/ti-ads1015.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index c7ffe47449e2..2331e946c519 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -1037,13 +1037,14 @@ static int ads1015_probe(struct i2c_client *client)
 		return ret;
 	pm_runtime_set_autosuspend_delay(&client->dev, ADS1015_SLEEP_DELAY_MS);
 	pm_runtime_use_autosuspend(&client->dev);
-	pm_runtime_enable(&client->dev);
+	ret = devm_pm_runtime_enable(&client->dev);
+	if (ret)
+		return ret;
 
 	ret = iio_device_register(indio_dev);
-	if (ret < 0) {
-		dev_err(&client->dev, "Failed to register IIO device\n");
-		return ret;
-	}
+	if (ret < 0)
+		return dev_err_probe(&client->dev, ret,
+				     "Failed to register IIO device\n");
 
 	return 0;
 }
@@ -1056,9 +1057,6 @@ static void ads1015_remove(struct i2c_client *client)
 
 	iio_device_unregister(indio_dev);
 
-	pm_runtime_disable(&client->dev);
-	pm_runtime_set_suspended(&client->dev);
-
 	/* power down single shot mode */
 	ret = ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
 	if (ret)
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path
  2026-05-29 10:10 [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path Stepan Ionichev
@ 2026-05-29 11:07 ` Joshua Crofts
  2026-05-29 17:34 ` Jonathan Cameron
  1 sibling, 0 replies; 3+ messages in thread
From: Joshua Crofts @ 2026-05-29 11:07 UTC (permalink / raw)
  To: Stepan Ionichev; +Cc: jic23, dlechner, nuno.sa, andy, linux-iio, linux-kernel

On Fri, 29 May 2026 at 12:12, Stepan Ionichev <sozdayvek@gmail.com> wrote:
>
> ads1015_probe() calls pm_runtime_enable() and then iio_device_register().
> If iio_device_register() fails the function returns directly, leaving
> runtime PM enabled and autosuspend in use. On subsequent probe/rebind
> the runtime PM tracking complains about an unbalanced enable.
>
> Switch to devm_pm_runtime_enable() so the enable (and the matching
> dont_use_autosuspend) are torn down automatically on probe failure and
> on driver unbind. The manual pm_runtime_disable() and
> pm_runtime_set_suspended() calls in ads1015_remove() are no longer
> needed and are dropped; the devm action runs after .remove() and now
> handles the teardown. While here, convert the dev_err() + return to
> dev_err_probe() to follow current style.
>
> Signed-off-by: Stepan Ionichev <sozdayvek@gmail.com>
> ---
>  drivers/iio/adc/ti-ads1015.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
> index c7ffe47449e2..2331e946c519 100644
> --- a/drivers/iio/adc/ti-ads1015.c
> +++ b/drivers/iio/adc/ti-ads1015.c
> @@ -1037,13 +1037,14 @@ static int ads1015_probe(struct i2c_client *client)
>                 return ret;
>         pm_runtime_set_autosuspend_delay(&client->dev, ADS1015_SLEEP_DELAY_MS);
>         pm_runtime_use_autosuspend(&client->dev);
> -       pm_runtime_enable(&client->dev);
> +       ret = devm_pm_runtime_enable(&client->dev);
> +       if (ret)
> +               return ret;
>
>         ret = iio_device_register(indio_dev);
> -       if (ret < 0) {
> -               dev_err(&client->dev, "Failed to register IIO device\n");
> -               return ret;
> -       }
> +       if (ret < 0)
> +               return dev_err_probe(&client->dev, ret,
> +                                    "Failed to register IIO device\n");
>

The pm_runtime stuff seems fine, however not sure why you slipped
this change into the patch - there are a few more instances where
dev_err() can be moved to dev_err_probe(), e.g.

https://elixir.bootlin.com/linux/v7.1-rc5/source/drivers/iio/adc/ti-ads1015.c#L981

-- 
Kind regards

CJD

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path
  2026-05-29 10:10 [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path Stepan Ionichev
  2026-05-29 11:07 ` Joshua Crofts
@ 2026-05-29 17:34 ` Jonathan Cameron
  1 sibling, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2026-05-29 17:34 UTC (permalink / raw)
  To: Stepan Ionichev; +Cc: dlechner, nuno.sa, andy, linux-iio, linux-kernel

On Fri, 29 May 2026 15:10:11 +0500
Stepan Ionichev <sozdayvek@gmail.com> wrote:

> ads1015_probe() calls pm_runtime_enable() and then iio_device_register().
> If iio_device_register() fails the function returns directly, leaving
> runtime PM enabled and autosuspend in use. On subsequent probe/rebind
> the runtime PM tracking complains about an unbalanced enable.
> 
> Switch to devm_pm_runtime_enable() so the enable (and the matching
> dont_use_autosuspend) are torn down automatically on probe failure and
> on driver unbind. The manual pm_runtime_disable() and
> pm_runtime_set_suspended() calls in ads1015_remove() are no longer
> needed and are dropped; the devm action runs after .remove() and now
> handles the teardown. While here, convert the dev_err() + return to
> dev_err_probe() to follow current style.
> 
> Signed-off-by: Stepan Ionichev <sozdayvek@gmail.com>
> ---
>  drivers/iio/adc/ti-ads1015.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
> index c7ffe47449e2..2331e946c519 100644
> --- a/drivers/iio/adc/ti-ads1015.c
> +++ b/drivers/iio/adc/ti-ads1015.c
> @@ -1037,13 +1037,14 @@ static int ads1015_probe(struct i2c_client *client)
>  		return ret;
>  	pm_runtime_set_autosuspend_delay(&client->dev, ADS1015_SLEEP_DELAY_MS);
>  	pm_runtime_use_autosuspend(&client->dev);
> -	pm_runtime_enable(&client->dev);
> +	ret = devm_pm_runtime_enable(&client->dev);
> +	if (ret)
> +		return ret;
>  
>  	ret = iio_device_register(indio_dev);
> -	if (ret < 0) {
> -		dev_err(&client->dev, "Failed to register IIO device\n");
> -		return ret;
> -	}
> +	if (ret < 0)
> +		return dev_err_probe(&client->dev, ret,
> +				     "Failed to register IIO device\n");
>  
>  	return 0;
>  }
> @@ -1056,9 +1057,6 @@ static void ads1015_remove(struct i2c_client *client)
>  
>  	iio_device_unregister(indio_dev);
>  
> -	pm_runtime_disable(&client->dev);
> -	pm_runtime_set_suspended(&client->dev);
> -
>  	/* power down single shot mode */
>  	ret = ads1015_set_conv_mode(data, ADS1015_SINGLESHOT);
Hmm. Looks like this is undoing the setting of continuous mode just above the runtime PM
stuff. That isn't done in the error path but should be.  If it were then there would have
been a goto for that iio_deivce_unregister() and it would have been obvious the change
here would break the ordering.

>  	if (ret)


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-05-29 17:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-29 10:10 [PATCH] iio: adc: ti-ads1015: use devm_pm_runtime_enable() to fix probe error path Stepan Ionichev
2026-05-29 11:07 ` Joshua Crofts
2026-05-29 17:34 ` Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®