From: Brian Norris <briannorris@chromium.org>
To: Jonathan Cameron <jic23@kernel.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
linux-pm@vger.kernel.org, "Ulf Hansson" <ulfh@kernel.org>,
linux-kernel@vger.kernel.org, "Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Magnus Damm" <magnus.damm@gmail.com>,
"Marek Vasut" <marek.vasut+renesas@mailbox.org>,
"Rui Miguel Silva" <rmfrfs@gmail.com>,
linux-iio@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 03/13] iio: Discard pm_runtime_put_autosuspend() return values
Date: Mon, 19 Oct 2026 15:02:08 -0700 [thread overview]
Message-ID: <ataTYER7XM_MEYKL@google.com> (raw)
In-Reply-To: <20261018211807.66bfea0d@jic23-hlaptop>
Hi Jonathan,
On Sun, Oct 18, 2026 at 09:18:07PM +0100, Jonathan Cameron wrote:
> On Tue, 6 Oct 2026 16:13:31 -0700
> Brian Norris <briannorris@chromium.org> wrote:
>
> > Multiple IIO drivers inspect or propagate the return value of
> > pm_runtime_put_autosuspend(), which is not particularly useful.
> >
> > Returning an error code from pm_runtime_put_autosuspend() merely means
> > that it has not queued up a timer or work item to check whether or not
> > the device can be suspended and there are many perfectly valid
> > situations in which that can happen, like after writing "on" to the
> > device's runtime PM "control" attribute in sysfs for one example.
> >
> > For this reason, modify these drivers to simply discard the
> > pm_runtime_put_autosuspend() return value, and change the return types
> > of fxls8962af_power_off() and fxas21002c_pm_put() to void.
> >
> > This will facilitate a planned change of the
> > pm_runtime_put_autosuspend() return type to void in the future, similar
> > to commit 3afd8df02433 ("PM: runtime: Change pm_runtime_put() return
> > type to void").
> >
> > Signed-off-by: Brian Norris <briannorris@chromium.org>
> > ---
> > This patch is independent of the rest of the series, except for the end
> > (changing the return type). I expect it can be applied by individual
> > maintainers, and we pick up the end once the dust is settled.
> >
> > I couldn't decide if I should split this up by individual driver, or
> > just 1 for the whole drivers/iio/ subsystem. Many of these drivers have
> > borrowed the same patterns, so I chose to just send 1. Let me know if I
> > should split it up.
>
> Hi Brian,
>
> Great that you are doing this, but sadly it opens the can of worms that
> are the helpers a lot of these drivers have. They just about made
> sense before various recent runtime_pm useability improvements.
> Now they make very little sense at all. Dropping the return value
> here also removes the reason for a bunch of odd defensive ifdefs.
>
> As such, I'm requesting some slightly more involved changes. Some of
> them I think are coupled tightly to what you are doing here so should
> be in this series, others can be left for later.
Thanks for the notes. I'll handle the ones that are at least
approximately related to the code I'm touching. I think there are a few
bugs that get resolved along the way too.
I may not get the more tangential ones though.
Also, unless you'd prefer otherwise, I plan to wait a bit more to send
v2, since the merge window only just opened, and some of this series
will just be a RESEND. I'd prefer maximizing the chance that the
recipients will actually notice the patches, by submitting outside that
window.
(OTOH, the bulk of these changes are in IIO, so I can just make IIO its
own series if that helps things along.)
I'll leave a few comments below.
> With that in mind, I think the changes will become a little more
> complex and so we probably end up with one patch per driver.
>
> Jonathan
>
> p.s. I'm feeling a bit mean asking for so many additional changes,
> so if you don't have time say that and I'll see if I can find some
> time (or someone else!) to do the extra work.
>
> >
> > drivers/iio/accel/bmc150-accel-core.c | 14 +++++-----
> > drivers/iio/accel/fxls8962af-core.c | 11 +++-----
> > drivers/iio/accel/kxcjk-1013.c | 15 ++++++-----
> > drivers/iio/accel/mma8452.c | 15 +++++------
> > drivers/iio/accel/mma9551_core.c | 15 +++++------
> > drivers/iio/adc/rcar-gyroadc.c | 4 +--
> > drivers/iio/adc/ti-ads1015.c | 8 +++---
> > drivers/iio/chemical/atlas-sensor.c | 4 +--
> > .../common/hid-sensors/hid-sensor-trigger.c | 14 ++++------
> > drivers/iio/gyro/bmg160_core.c | 17 +++++-------
> > drivers/iio/gyro/fxas21002c_core.c | 12 +++------
> > drivers/iio/imu/kmx61.c | 17 ++++++------
> > drivers/iio/light/apds9960.c | 2 +-
> > drivers/iio/light/isl29028.c | 15 +++--------
> > drivers/iio/light/pa12203001.c | 3 ++-
> > drivers/iio/light/rpr0521.c | 15 +++++------
> > drivers/iio/light/tsl2583.c | 27 +++----------------
> > drivers/iio/light/us5182d.c | 3 ++-
> > 18 files changed, 80 insertions(+), 131 deletions(-)
> >
> > diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c
> > index 46bb36d9366e..2f7fe28e3e0b 100644
> > --- a/drivers/iio/accel/bmc150-accel-core.c
> > +++ b/drivers/iio/accel/bmc150-accel-core.c
> > @@ -332,14 +332,14 @@ static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on)
> > struct device *dev = regmap_get_device(data->regmap);
> This driver could do with modernizing to use the stuff that
> lets the compiler drop unused pm functions. That is a bit
> of a bigger change though so entirely optional wrt to this set.
>
> > int ret;
> >
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_resume_and_get(dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(dev);
> > - if (ret < 0) {
> > - dev_err(dev,
> > - "Failed: %s for %d\n", __func__, on);
> > - return ret;
> > + if (ret < 0) {
> > + dev_err(dev, "%s: failed to resume: %d\n", __func__, ret);
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(dev);
> > }
> >
> > return 0;
> > diff --git a/drivers/iio/accel/fxls8962af-core.c b/drivers/iio/accel/fxls8962af-core.c
> > index 18d7b09bddd2..3a2c4ce0557c 100644
> > --- a/drivers/iio/accel/fxls8962af-core.c
> > +++ b/drivers/iio/accel/fxls8962af-core.c
> > @@ -216,16 +216,11 @@ static int fxls8962af_power_on(struct fxls8962af_data *data)
> > return ret;
> > }
> >
> > -static int fxls8962af_power_off(struct fxls8962af_data *data)
> > +static void fxls8962af_power_off(struct fxls8962af_data *data)
>
> This helper is completely pointless after you cleanup. Please drop
> it. The _on() one just exists to print an error. So ideally drop
> that one as well.
Ack.
> > {
> > struct device *dev = regmap_get_device(data->regmap);
> > - int ret;
> > -
> > - ret = pm_runtime_put_autosuspend(dev);
> > - if (ret)
> > - dev_err(dev, "failed to power off\n");
> >
> > - return ret;
> > + pm_runtime_put_autosuspend(dev);
> > }
> >
> > static int fxls8962af_standby(struct fxls8962af_data *data)
> > @@ -692,7 +687,7 @@ fxls8962af_write_event_config(struct iio_dev *indio_dev,
> > return -EBUSY;
> >
> > /* Not in buffered mode so disable power */
> > - ret = fxls8962af_power_off(data);
> > + fxls8962af_power_off(data);
> >
> > iio_device_release_direct(indio_dev);
> > }
> > diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
> > index 166fb786425f..f068753469a8 100644
> > --- a/drivers/iio/accel/kxcjk-1013.c
> > +++ b/drivers/iio/accel/kxcjk-1013.c
> > @@ -633,14 +633,15 @@ static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on)
>
> Same as the one below.
Ack.
> > #ifdef CONFIG_PM
> > int ret;
> >
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_resume_and_get(&data->client->dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(&data->client->dev);
> > - if (ret < 0) {
> > - dev_err(&data->client->dev,
> > - "Failed: %s for %d\n", __func__, on);
> > - return ret;
> > + if (ret < 0) {
> > + dev_err(&data->client->dev,
> > + "%s: failed to resume: %d\n", __func__, ret);
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(&data->client->dev);
> > }
> > #endif
> >
> > diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> > index 7d683686dd9d..711689db8694 100644
> > --- a/drivers/iio/accel/mma8452.c
> > +++ b/drivers/iio/accel/mma8452.c
> > @@ -224,15 +224,14 @@ static int mma8452_set_runtime_pm_state(struct i2c_client *client, bool on)
>
> As with so many of the others. This is now a pointless function.
> The reason for the ifdef is gone I believe after this patch so dropping
> that would be minimum. Better would be to get rid of the helper
> and just make the runtime pm calls directly wherever this
> was called.
Ack.
> > #ifdef CONFIG_PM
> > int ret;
> >
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_resume_and_get(&client->dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(&client->dev);
> > - if (ret < 0) {
> > - dev_err(&client->dev,
> > - "failed to change power state to %d\n", on);
> > -
> > - return ret;
> > + if (ret < 0) {
> > + dev_err(&client->dev, "failed to resume: %d\n", ret);
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(&client->dev);
> > }
> > #endif
> >
> > diff --git a/drivers/iio/accel/mma9551_core.c b/drivers/iio/accel/mma9551_core.c
> > index 2ccb1fb19b96..d8aa0a062779 100644
> > --- a/drivers/iio/accel/mma9551_core.c
> > +++ b/drivers/iio/accel/mma9551_core.c
> > @@ -669,15 +669,14 @@ int mma9551_set_power_state(struct i2c_client *client, bool on)
> > #ifdef CONFIG_PM
> > int ret;
>
> Another one where I think the ifdef was for the return value of stubbed
> pm_runtime_put_autosuspend. So we can drop that.
> Also the function no longer has any real purpose - so if you don't
> mind going a little further, dropping this helper and calling
> the pm_runtime functions inline would be much nicer.
Ack.
> >
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_resume_and_get(&client->dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(&client->dev);
> > - if (ret < 0) {
> > - dev_err(&client->dev,
> > - "failed to change power state to %d\n", on);
> > -
> > - return ret;
> > + if (ret < 0) {
> > + dev_err(&client->dev, "failed to resume: %d\n", ret);
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(&client->dev);
> > }
> > #endif
> >
>
> > diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
> > index 0fbfa4e499aa..817ec1c73df4 100644
> > --- a/drivers/iio/adc/ti-ads1015.c
> > +++ b/drivers/iio/adc/ti-ads1015.c
> > @@ -370,15 +370,13 @@ static const struct iio_chan_spec tla2024_channels[] = {
> > #ifdef CONFIG_PM
> > static int ads1015_set_power_state(struct ads1015_data *data, bool on)
> > {
> > - int ret;
> > struct device *dev = regmap_get_device(data->regmap);
> >
> > if (on)
> > - ret = pm_runtime_resume_and_get(dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(dev);
> > + return pm_runtime_resume_and_get(dev);
> >
> > - return ret < 0 ? ret : 0;
> > + pm_runtime_put_autosuspend(dev);
> > + return 0;
> > }
> >
> > #else /* !CONFIG_PM */
>
> I think the ifdef stuff here was to paper over the return value
> you are removing. Should be able to drop it now.
>
>
> > diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
> > index d611341a0e2a..e8e511daa7c4 100644
> > --- a/drivers/iio/gyro/bmg160_core.c
> > +++ b/drivers/iio/gyro/bmg160_core.c
> > @@ -319,18 +319,15 @@ static int bmg160_set_power_state(struct bmg160_data *data, bool on)
> > struct device *dev = regmap_get_device(data->regmap);
> > int ret;
> >
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_get_sync(dev);
>
> gah. Please just change this to use pm_runtime_resume_and_get() whilst you
> are here.
>
> Ideally squash the helper in favour of direct calls to the runtime
> pm. Yet another pace that the recent improvements in runtime pm useability
> have made what was of minor benefit entirely pointless.
>
> The ifdef can go away as well as I think the only thing that helped with
> was the return value of the put you are removing.
One thing I found while looking through this driver:
bmg160_write_event_config() and bmg160_data_rdy_trigger_set_state() do
some ghastly things w.r.t. runtime PM. In particular, they seem to
perform put_autosuspend() *before* they're done touching the hardware,
and then rely on the (very large) autosuspend delay to defer the
runtime_suspend() operation. It even has a bunch of comments about the
incorrect ordering.
That's one giant race condition. And the autosuspend delay is
configurable via user space, so it's extra dangerous.
Anyway, that's to say: I plan to refactor/reorder the put_autosuspend()
ordering there while I'm at it.
(There's also some strange error handling that potentially leads to
runtime PM underflow. I'll fix that one while I'm here.)
I think this one is imitated in another few drivers as well.
> > - else
> > - ret = pm_runtime_put_autosuspend(dev);
> > -
> > - if (ret < 0) {
> > - dev_err(dev, "Failed: bmg160_set_power_state for %d\n", on);
> > -
> > - if (on)
> > + if (ret < 0) {
> > + dev_err(dev, "%s: failed to resume: %d\n", __func__, ret);
> > pm_runtime_put_noidle(dev);
> > -
> > - return ret;
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(dev);
> > }
> > #endif
> >
> > diff --git a/drivers/iio/gyro/fxas21002c_core.c b/drivers/iio/gyro/fxas21002c_core.c
> > index a88670207cec..408f88f12fe7 100644
> > --- a/drivers/iio/gyro/fxas21002c_core.c
> > +++ b/drivers/iio/gyro/fxas21002c_core.c
> > @@ -369,11 +369,11 @@ static int fxas21002c_pm_get(struct fxas21002c_data *data)
> > return pm_runtime_resume_and_get(regmap_get_device(data->regmap));
> > }
> >
> > -static int fxas21002c_pm_put(struct fxas21002c_data *data)
> > +static void fxas21002c_pm_put(struct fxas21002c_data *data)
> The two runtime pm helpers in here have evolved to become a terrible
> idea.
>
> Can we just drop them as part of your change and make the
> runtime pm calls directly instead? The dev is always available
> at the call sites so this should be trivial.
Ack.
> > {
> > struct device *dev = regmap_get_device(data->regmap);
> >
> > - return pm_runtime_put_autosuspend(dev);
> > + pm_runtime_put_autosuspend(dev);
> > }
> >
> > static int fxas21002c_temp_get(struct fxas21002c_data *data, int *val)
> > @@ -396,9 +396,7 @@ static int fxas21002c_temp_get(struct fxas21002c_data *data, int *val)
> >
> > *val = sign_extend32(temp, 7);
> >
> > - ret = fxas21002c_pm_put(data);
> > - if (ret < 0)
> > - goto data_unlock;
> > + fxas21002c_pm_put(data);
> >
> > ret = IIO_VAL_INT;
> >
> > @@ -430,9 +428,7 @@ static int fxas21002c_axis_get(struct fxas21002c_data *data,
> >
> > *val = sign_extend32(be16_to_cpu(axis_be), 15);
> >
> > - ret = fxas21002c_pm_put(data);
> > - if (ret < 0)
> > - goto data_unlock;
> > + fxas21002c_pm_put(data);
> >
> > ret = IIO_VAL_INT;
> >
>
> > diff --git a/drivers/iio/light/apds9960.c b/drivers/iio/light/apds9960.c
> > index afe520de60e2..611e59d6b027 100644
> > --- a/drivers/iio/light/apds9960.c
> > +++ b/drivers/iio/light/apds9960.c
>
> Not needed for this series but...
>
> Another one that has become rather pointless and should just be split
> into separate functions for enable and disable (where disable one
> is just pm_runtime_put_autosuspend)
>
> > @@ -495,7 +495,7 @@ static int apds9960_set_power_state(struct apds9960_data *data, bool on)
> > usleep_range(data->als_adc_int_us,
> > APDS9960_MAX_INT_TIME_IN_US);
> > } else {
> > - ret = pm_runtime_put_autosuspend(dev);
> > + pm_runtime_put_autosuspend(dev);
> > }
> >
> > mutex_unlock(&data->lock);
> > diff --git a/drivers/iio/light/isl29028.c b/drivers/iio/light/isl29028.c
> > index 33deb1726689..190ce67d2efe 100644
> > --- a/drivers/iio/light/isl29028.c
> > +++ b/drivers/iio/light/isl29028.c
> > @@ -395,9 +395,7 @@ static int isl29028_write_raw(struct iio_dev *indio_dev,
> > if (ret < 0)
> > return ret;
> >
> > - ret = pm_runtime_put_autosuspend(dev);
> > - if (ret < 0)
> > - return ret;
> > + pm_runtime_put_autosuspend(dev);
> >
> > return 0;
> > }
> > @@ -408,7 +406,7 @@ static int isl29028_read_raw(struct iio_dev *indio_dev,
> > {
> > struct isl29028_chip *chip = iio_priv(indio_dev);
> > struct device *dev = regmap_get_device(chip->regmap);
> > - int ret, pm_ret;
> > + int ret;
>
> Not one for this series (the patch for this LGTM),
> but if anyone is reading and bored, cleanup.h magic would simplify
> this code nicely.
>
>
> >
> > ret = pm_runtime_resume_and_get(dev);
> > if (ret < 0)
> > @@ -464,14 +462,7 @@ static int isl29028_read_raw(struct iio_dev *indio_dev,
> > if (ret < 0)
> > return ret;
> >
> > - /**
> > - * Preserve the ret variable if the call to
> > - * pm_runtime_put_autosuspend() is successful so the reading
> > - * (if applicable) is returned to user space.
> > - */
> > - pm_ret = pm_runtime_put_autosuspend(dev);
> > - if (pm_ret < 0)
> > - return pm_ret;
> > + pm_runtime_put_autosuspend(dev);
> >
> > return ret;
> > }
> > diff --git a/drivers/iio/light/pa12203001.c b/drivers/iio/light/pa12203001.c
> > index c0f4db8d95f7..d4e197e05d26 100644
> > --- a/drivers/iio/light/pa12203001.c
> > +++ b/drivers/iio/light/pa12203001.c
> > @@ -188,7 +188,8 @@ static int pa12203001_set_power_state(struct pa12203001_data *data, bool on,
> > if (on)
> > return pm_runtime_resume_and_get(&data->client->dev);
> >
> > - return pm_runtime_put_autosuspend(&data->client->dev);
> > + pm_runtime_put_autosuspend(&data->client->dev);
> > + return 0;
>
> This function has evolved to the point of silliness.
> Given how minor your change is, feel free to ignore the following however!
>
> There is zero shared code in here between the on and off paths so
> rename the function pa12203001_runtime_enable() and cover only the
> 'on' case. Then just put the pm_runtime_put_autosuspend() in wherever
> on was previously false.
Ack. But because "runtime_enable()" has a specific runtime PM meaning
that is very different than the usage here, I've chosen the name
"pa12203001_runtime_resume_and_get()" instead, which I think makes for
more API symmetry.
> Given that presumably one of the things is being turned on whenever
> we enable it, also pull the mutex out of the if blocks and use
> guard() to simplify that.
guard() is tricky, since it produces a deadlock if you hold the lock
across pm_runtime_resume_and_get(). So I'll skip that part and leave it
to someone (or no one) who is more particularly interested in this
driver.
> >
> > err:
> > mutex_unlock(&data->lock);
> > diff --git a/drivers/iio/light/rpr0521.c b/drivers/iio/light/rpr0521.c
> > index 7d82efc31f3a..60c5e85bac2c 100644
> > --- a/drivers/iio/light/rpr0521.c
> > +++ b/drivers/iio/light/rpr0521.c
> > @@ -357,15 +357,14 @@ static int rpr0521_set_power_state(struct rpr0521_data *data, bool on,
> > * Note: If either measurement is re-enabled before _suspend(),
> > * both stay enabled until _suspend().
>
> Not asking for it in your series as beyond the scope, but
> this function should just be split in two. Almost no code is shared
> between the get and put paths.
>
> However...
>
> > */
> > - if (on)
> > + if (on) {
> > ret = pm_runtime_resume_and_get(&data->client->dev);
> > - else
> > - ret = pm_runtime_put_autosuspend(&data->client->dev);
> > - if (ret < 0) {
> > - dev_err(&data->client->dev,
> > - "Failed: rpr0521_set_power_state for %d, ret %d\n",
> > - on, ret);
> > - return ret;
> > + if (ret < 0) {
> > + dev_err(&data->client->dev, "Failed to resume: %d\n", ret);
> > + return ret;
> > + }
> > + } else {
> > + pm_runtime_put_autosuspend(&data->client->dev);
> > }
> >
> > if (on) {
>
> This no longer makes any sense so maybe it is better to just split the
> code as part of your change set or at minimum change to
>
> if (!on) {
> pm_runtime_put_autosuspend(&data->client->dev);
>
> return 0;
> }
>
> ret = pm_runtime_resume_and_get(&data->client->dev);
> if (ret < 0) {
> dev_err(&data->client->dev, "Failed to resume: %d\n", ret);
> return ret;
> }
>
> /* If _resume() was not called, enable measurement now. */
> if (data->als_ps_need_en) {
> ret = rpr0521_als_enable(data, RPR0521_MODE_ALS_ENABLE);
> if (ret)
> return ret;
> data->als_ps_need_en = false;
> }
>
> if (data->pxs_ps_need_en) {
> ret = rpr0521_pxs_enable(data, RPR0521_MODE_PXS_ENABLE);
> if (ret)
> return ret;
> data->pxs_ps_need_en = false;
> }
> #endif //mess that makes sense with more context!
> return 0;
> }
Ack.
> > diff --git a/drivers/iio/light/tsl2583.c b/drivers/iio/light/tsl2583.c
> > index 53fd423aa7ae..deaa71485468 100644
> > --- a/drivers/iio/light/tsl2583.c
> > +++ b/drivers/iio/light/tsl2583.c
> > @@ -640,7 +640,7 @@ static int tsl2583_read_raw(struct iio_dev *indio_dev,
> > int *val, int *val2, long mask)
> > {
> > struct tsl2583_chip *chip = iio_priv(indio_dev);
> > - int ret, pm_ret;
> > + int ret;
> >
> > ret = pm_runtime_resume_and_get(&chip->client->dev);
> > if (ret < 0)
> > @@ -709,19 +709,7 @@ static int tsl2583_read_raw(struct iio_dev *indio_dev,
> > read_done:
> > mutex_unlock(&chip->als_mutex);
> >
> > - if (ret < 0) {
> > - pm_runtime_put_autosuspend(&chip->client->dev);
> > - return ret;
> > - }
> > -
> > - /*
> > - * Preserve the ret variable if the call to
> > - * pm_runtime_put_autosuspend() is successful so the reading
> > - * (if applicable) is returned to user space.
> > - */
> > - pm_ret = pm_runtime_put_autosuspend(&chip->client->dev);
> > - if (pm_ret < 0)
> > - return pm_ret;
> > + pm_runtime_put_autosuspend(&chip->client->dev);
> >
> > return ret;
> > }
> > @@ -773,16 +761,9 @@ static int tsl2583_write_raw(struct iio_dev *indio_dev,
> >
> > mutex_unlock(&chip->als_mutex);
> >
> > - if (ret < 0) {
> > - pm_runtime_put_autosuspend(&chip->client->dev);
> > - return ret;
> > - }
> > + pm_runtime_put_autosuspend(&chip->client->dev);
> >
> > - ret = pm_runtime_put_autosuspend(&chip->client->dev);
> > - if (ret < 0)
> > - return ret;
> > -
> > - return 0;
> > + return ret;
> Yuck this was indeed a mess, so great to clean that up!
>
> Not asking for it in this series, but this is a great place to use
> some cleanup.h magic for the mutex and the runtime pm.
>
>
> > }
> >
> > static const struct iio_info tsl2583_info = {
> > diff --git a/drivers/iio/light/us5182d.c b/drivers/iio/light/us5182d.c
> > index ab518311fd79..e76c40b422f4 100644
> > --- a/drivers/iio/light/us5182d.c
> > +++ b/drivers/iio/light/us5182d.c
> > @@ -366,7 +366,8 @@ static int us5182d_set_power_state(struct us5182d_data *data, bool on)
> > if (on)
> > return pm_runtime_resume_and_get(&data->client->dev);
> >
> > - return pm_runtime_put_autosuspend(&data->client->dev);
> > + pm_runtime_put_autosuspend(&data->client->dev);
>
> Prefer a blank line here. Always nice before a simple return like this.
Ack.
Brian
> > + return 0;
> > }
> >
> > static int us5182d_read_value(struct us5182d_data *data,
>
next prev parent reply other threads:[~2026-10-19 22:02 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
2026-10-06 23:13 ` [PATCH 01/13] hwrng: cctrng: Discard pm_runtime_put_autosuspend() return value Brian Norris
2026-10-06 23:13 ` [PATCH 02/13] drm: Discard pm_runtime_put_autosuspend() return values Brian Norris
2026-10-13 13:55 ` Maíra Canal
2026-10-06 23:13 ` [PATCH 03/13] iio: " Brian Norris
2026-10-12 20:39 ` Andy Shevchenko
2026-10-18 20:18 ` Jonathan Cameron
2026-10-19 22:02 ` Brian Norris [this message]
2026-10-06 23:13 ` [PATCH 04/13] media: venus: " Brian Norris
2026-10-06 23:13 ` [PATCH 05/13] pinctrl: qcom: lpass-lpi: " Brian Norris
2026-10-07 11:44 ` Linus Walleij
2026-10-06 23:13 ` [PATCH 06/13] spi: ti-qspi: Discard pm_runtime_put_autosuspend() return value Brian Norris
2026-10-06 23:13 ` [PATCH 07/13] greybus: " Brian Norris
2026-10-07 14:28 ` Alex Elder
2026-10-07 15:19 ` Brian Norris
2026-10-06 23:13 ` [PATCH 08/13] ALSA: hda: " Brian Norris
2026-10-07 9:45 ` Takashi Iwai
2026-10-06 23:13 ` [PATCH 09/13] ASoC: codecs: lpass: Discard pm_runtime_put_autosuspend() return values Brian Norris
2026-10-06 23:13 ` [PATCH 10/13] ASoC: intel: atom: Discard pm_runtime_put_autosuspend() return value Brian Norris
2026-10-10 9:34 ` Cezary Rojewski
2026-10-06 23:13 ` [PATCH 11/13] ASoC: SOF: Discard pm_runtime_put_autosuspend() return values Brian Norris
2026-10-06 23:13 ` [PATCH 12/13] PM: runtime: Drop pm_runtime_put_autosuspend() return code Brian Norris
2026-10-06 23:13 ` [PATCH 13/13] PM: runtime: Drop pm_request_{idle,autosuspend}() return codes Brian Norris
2026-10-10 8:42 ` (subset) [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ataTYER7XM_MEYKL@google.com \
--to=briannorris@chromium.org \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=geert+renesas@glider.be \
--cc=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=marek.vasut+renesas@mailbox.org \
--cc=nuno.sa@analog.com \
--cc=rafael@kernel.org \
--cc=rmfrfs@gmail.com \
--cc=ulfh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®