Re: [PATCH v2] iio: pressure: mpl115: Fix runtime PM cleanup
Jonathan Cameron <[email protected]>
| Newsgroups | org.kernel.vger.linux-iio,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <20260724005356.4505e552@jic23-huawei> |
On Mon, 20 Jul 2026 10:43:12 +0800 Can Peng <[email protected]> wrote: > mpl115_probe() enables runtime PM when a shutdown GPIO is present and > then returns the result of devm_iio_device_register(). If registration > fails, runtime PM remains enabled and autosuspend remains selected. > > The same unmanaged runtime PM state is also left behind on driver > unbind, as the IIO device registration is managed but the runtime PM > setup is not. > > Use devm_pm_runtime_enable() so runtime PM is disabled automatically on > probe failure and driver unbind, and check pm_runtime_set_active() so > setup errors are reported. > > Set the autosuspend parameters before enabling runtime PM. Once probe > has completed, the driver core queues an idle request for the device, so > an explicit pm_runtime_get_noresume()/pm_runtime_put() pair is not > needed to start autosuspend. > > Fixes: 0c3a333524a3 ("iio: pressure: mpl115: Implementing low power mode by shutdown gpio") > Cc: [email protected] > Suggested-by: [email protected] > Signed-off-by: Can Peng <[email protected]> Hi, Looks good to me. I'm going to take it the slow path via the next merge window as it is a fairly low impact bug. Applied to the testing branch of iio.git Thanks, Jonathan > --- > Changes in v2: > - Drop the explicit pm_runtime_get_noresume()/pm_runtime_put() pair and > rely on the driver core idle request after probe. > - Set autosuspend parameters before enabling runtime PM. > - Update the commit message accordingly. > - Link to v1: https://lore.kernel.org/all/[email protected]/ > > drivers/iio/pressure/mpl115.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/iio/pressure/mpl115.c b/drivers/iio/pressure/mpl115.c > index 16e112b796ba..2929ea8e4e01 100644 > --- a/drivers/iio/pressure/mpl115.c > +++ b/drivers/iio/pressure/mpl115.c > @@ -203,9 +203,9 @@ int mpl115_probe(struct device *dev, const char *name, > > if (data->shutdown) { > /* Enable runtime PM */ > - pm_runtime_get_noresume(dev); > - pm_runtime_set_active(dev); > - pm_runtime_enable(dev); > + ret = pm_runtime_set_active(dev); > + if (ret) > + return ret; > > /* > * As the device takes 3 ms to come up with a fresh > @@ -215,7 +215,10 @@ int mpl115_probe(struct device *dev, const char *name, > */ > pm_runtime_set_autosuspend_delay(dev, 2000); > pm_runtime_use_autosuspend(dev); > - pm_runtime_put(dev); > + > + ret = devm_pm_runtime_enable(dev); > + if (ret) > + return ret; > > dev_dbg(dev, "low-power mode enabled"); > } else