* [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function
@ 2026-10-06 23:13 Brian Norris
2026-10-06 23:13 ` [PATCH 01/13] hwrng: cctrng: Discard pm_runtime_put_autosuspend() return value Brian Norris
` (12 more replies)
0 siblings, 13 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Bryan O'Donoghue, Maíra Canal, Nuno Sá,
Alex Elder, Andy Shevchenko, Bard Liao, Bartosz Golaszewski,
Bjorn Andersson, Cezary Rojewski, Daniel Baluta, David Lechner,
Dikshita Agarwal, Geert Uytterhoeven, Greg Kroah-Hartman,
Hadar Gat, Herbert Xu, Jaroslav Kysela, Jessica Zhang,
Johan Hovold, Jonathan Cameron, Jyri Sarha, Kai Vehmanen,
Liam Girdwood, Liam Girdwood, Linus Walleij, Maarten Lankhorst,
Magnus Damm, Marek Vasut, Mark Brown, Mauro Carvalho Chehab,
Maxime Ripard, Melissa Wen, Neil Armstrong, Olivia Mackall,
Peter Ujfalusi, Pierre-Louis Bossart, Rui Miguel Silva,
Srinivas Kandagatla, Takashi Iwai, Thomas Zimmermann,
Tomi Valkeinen, Vijendar Mukunda, Vikash Garodia, dri-devel,
greybus-dev, linux-arm-msm, linux-crypto, linux-gpio, linux-iio,
linux-media, linux-renesas-soc, linux-sound, linux-spi,
linux-staging, sound-open-firmware
Similar to this effort:
Subject: [PATCH v1 00/23] PM: runtime: Convert pm_runtime_put() to a void function
https://lore.kernel.org/all/6245770.lOV4Wx5bFT@rafael.j.wysocki/
i.e., commit 3afd8df02433 ("PM: runtime: Change pm_runtime_put() return
type to void") and friends.
As with pm_runtime_put(), there is very little value in return-code
checking for any of the other async __pm_runtime_suspend() and
__pm_runtime_idle() APIs:
pm_runtime_put_autosuspend()
pm_request_idle()
pm_request_autosuspend()
Checking the return code is more likely to
produce a race condition (fighting with user space writing "on" to the
"control" attribute) than to tell a consumer useful info.
Nobody outside KUnit tests checks pm_request_idle() or
pm_request_autosuspend() return codes, but there are a number of
pm_runtime_put_autosuspend() callers that check its return code. Thus,
this series largely deals with pm_runtime_put_autosuspend().
Patches 1-11 are independent of each other, and similarly to the last
series, I expect the respective maintainers can pick them up. We can
apply patch 12 later. Patch 13 is also independent, but included in this
topic for completeness. It can be applied any time.
This touches a lot of trees/maintainers, so I tried to keep CC's only
for the relevant patch(es), plus the cover letter. I hope that's not too
noisy.
- Brian
Brian Norris (13):
hwrng: cctrng: Discard pm_runtime_put_autosuspend() return value
drm: Discard pm_runtime_put_autosuspend() return values
iio: Discard pm_runtime_put_autosuspend() return values
media: venus: Discard pm_runtime_put_autosuspend() return values
pinctrl: qcom: lpass-lpi: Discard pm_runtime_put_autosuspend() return
values
spi: ti-qspi: Discard pm_runtime_put_autosuspend() return value
greybus: Discard pm_runtime_put_autosuspend() return value
ALSA: hda: Discard pm_runtime_put_autosuspend() return value
ASoC: codecs: lpass: Discard pm_runtime_put_autosuspend() return
values
ASoC: intel: atom: Discard pm_runtime_put_autosuspend() return value
ASoC: SOF: Discard pm_runtime_put_autosuspend() return values
PM: runtime: Drop pm_runtime_put_autosuspend() return code
PM: runtime: Drop pm_request_{idle,autosuspend}() return codes
drivers/base/power/runtime-test.c | 8 ---
drivers/char/hw_random/cctrng.c | 6 +-
drivers/gpu/drm/panel/panel-simple.c | 8 +--
drivers/gpu/drm/tidss/tidss_drv.c | 7 +--
drivers/gpu/drm/v3d/v3d_drv.h | 4 +-
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 +-
drivers/media/platform/qcom/venus/vdec.c | 10 ++-
drivers/media/platform/qcom/venus/venc.c | 10 ++-
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 16 +++--
drivers/spi/spi-ti-qspi.c | 6 +-
drivers/staging/greybus/power_supply.c | 8 +--
include/linux/greybus/bundle.h | 12 +---
include/linux/pm_runtime.h | 63 +++----------------
include/sound/hdaudio.h | 8 +--
sound/hda/core/device.c | 13 ++--
sound/soc/codecs/lpass-rx-macro.c | 4 +-
sound/soc/codecs/lpass-tx-macro.c | 4 +-
sound/soc/codecs/lpass-va-macro.c | 17 ++---
sound/soc/codecs/lpass-wsa-macro.c | 8 +--
sound/soc/intel/atom/sst/sst.h | 2 +-
sound/soc/intel/atom/sst/sst_drv_interface.c | 4 +-
sound/soc/intel/atom/sst/sst_pvt.c | 9 +--
sound/soc/sof/control.c | 6 +-
sound/soc/sof/sof-client-ipc-flood-test.c | 5 +-
.../soc/sof/sof-client-ipc-kernel-injector.c | 4 +-
sound/soc/sof/sof-client-ipc-msg-injector.c | 6 +-
sound/soc/sof/sof-client-probes.c | 18 ++----
44 files changed, 152 insertions(+), 325 deletions(-)
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 01/13] hwrng: cctrng: Discard pm_runtime_put_autosuspend() return value
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 ` Brian Norris
2026-10-06 23:13 ` [PATCH 02/13] drm: Discard pm_runtime_put_autosuspend() return values Brian Norris
` (11 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Hadar Gat,
Herbert Xu, Olivia Mackall, linux-crypto
Printing an error message on pm_runtime_put_autosuspend() returning a
non-zero value 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.
Accordingly, update cc_trng_pm_put_suspend() to simply discard the
return value of pm_runtime_put_autosuspend().
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.
drivers/char/hw_random/cctrng.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/char/hw_random/cctrng.c b/drivers/char/hw_random/cctrng.c
index a6925211c3b5..7e1e1a7844b0 100644
--- a/drivers/char/hw_random/cctrng.c
+++ b/drivers/char/hw_random/cctrng.c
@@ -96,11 +96,7 @@ static int cc_trng_pm_get(struct device *dev)
static void cc_trng_pm_put_suspend(struct device *dev)
{
- int rc = 0;
-
- rc = pm_runtime_put_autosuspend(dev);
- if (rc)
- dev_err(dev, "pm_runtime_put_autosuspend returned %x\n", rc);
+ pm_runtime_put_autosuspend(dev);
}
static int cc_trng_pm_init(struct cctrng_drvdata *drvdata)
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 02/13] drm: Discard pm_runtime_put_autosuspend() return values
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 ` Brian Norris
2026-10-06 23:13 ` [PATCH 03/13] iio: " Brian Norris
` (10 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Maíra Canal, Jessica Zhang, Jyri Sarha, Maarten Lankhorst,
Maxime Ripard, Melissa Wen, Neil Armstrong, Thomas Zimmermann,
Tomi Valkeinen, dri-devel
Several DRM drivers use or propagate the pm_runtime_put_autosuspend()
return value, 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 type of
v3d_pm_runtime_put() (whose return value is never used) to void. Also
drop the redundant pm_runtime_mark_last_busy() calls right before
pm_runtime_put_autosuspend().
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.
drivers/gpu/drm/panel/panel-simple.c | 8 +-------
drivers/gpu/drm/tidss/tidss_drv.c | 7 +------
drivers/gpu/drm/v3d/v3d_drv.h | 4 ++--
3 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index c95964ba25a9..193d1b2b0ba5 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -318,12 +318,7 @@ static int panel_simple_suspend(struct device *dev)
static int panel_simple_unprepare(struct drm_panel *panel)
{
- int ret;
-
- pm_runtime_mark_last_busy(panel->dev);
- ret = pm_runtime_put_autosuspend(panel->dev);
- if (ret < 0)
- return ret;
+ pm_runtime_put_autosuspend(panel->dev);
return 0;
}
@@ -389,7 +384,6 @@ static int panel_simple_get_modes(struct drm_panel *panel,
num += drm_edid_connector_add_modes(connector);
- pm_runtime_mark_last_busy(panel->dev);
pm_runtime_put_autosuspend(panel->dev);
}
diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c
index 1c8cc18bc53c..44b0b009c29a 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -40,12 +40,7 @@ int tidss_runtime_get(struct tidss_device *tidss)
void tidss_runtime_put(struct tidss_device *tidss)
{
- int r;
-
- pm_runtime_mark_last_busy(tidss->dev);
-
- r = pm_runtime_put_autosuspend(tidss->dev);
- WARN_ON(r < 0);
+ pm_runtime_put_autosuspend(tidss->dev);
}
static int __maybe_unused tidss_pm_runtime_suspend(struct device *dev)
diff --git a/drivers/gpu/drm/v3d/v3d_drv.h b/drivers/gpu/drm/v3d/v3d_drv.h
index 29fa14be130b..eb002048ae9c 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -669,9 +669,9 @@ static __always_inline int v3d_pm_runtime_get(struct v3d_dev *v3d)
return pm_runtime_resume_and_get(v3d->drm.dev);
}
-static __always_inline int v3d_pm_runtime_put(struct v3d_dev *v3d)
+static __always_inline void v3d_pm_runtime_put(struct v3d_dev *v3d)
{
- return pm_runtime_put_autosuspend(v3d->drm.dev);
+ pm_runtime_put_autosuspend(v3d->drm.dev);
}
/* v3d_sched.c */
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 03/13] iio: Discard pm_runtime_put_autosuspend() return values
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-06 23:13 ` Brian Norris
2026-10-06 23:13 ` [PATCH 04/13] media: venus: " Brian Norris
` (9 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Nuno Sá,
Andy Shevchenko, David Lechner, Geert Uytterhoeven,
Jonathan Cameron, Magnus Damm, Marek Vasut, Rui Miguel Silva,
linux-iio, linux-renesas-soc
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.
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);
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)
{
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)
#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)
#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;
- 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/rcar-gyroadc.c b/drivers/iio/adc/rcar-gyroadc.c
index d38cf3caeae0..0d3b061d6ec2 100644
--- a/drivers/iio/adc/rcar-gyroadc.c
+++ b/drivers/iio/adc/rcar-gyroadc.c
@@ -199,10 +199,8 @@ static int rcar_gyroadc_read_raw(struct iio_dev *indio_dev,
*val = readl(priv->regs + datareg);
*val &= BIT(priv->sample_width) - 1;
- ret = pm_runtime_put_autosuspend(priv->dev);
+ pm_runtime_put_autosuspend(priv->dev);
iio_device_release_direct(indio_dev);
- if (ret < 0)
- return ret;
return IIO_VAL_INT;
case IIO_CHAN_INFO_SCALE:
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 */
diff --git a/drivers/iio/chemical/atlas-sensor.c b/drivers/iio/chemical/atlas-sensor.c
index 1d4a9919df1a..48598475512f 100644
--- a/drivers/iio/chemical/atlas-sensor.c
+++ b/drivers/iio/chemical/atlas-sensor.c
@@ -426,9 +426,7 @@ static int atlas_buffer_predisable(struct iio_dev *indio_dev)
if (ret)
return ret;
- ret = pm_runtime_put_autosuspend(&data->client->dev);
- if (ret)
- return ret;
+ pm_runtime_put_autosuspend(&data->client->dev);
return 0;
}
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index 60808e2430ca..d76a6d9f04f6 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
@@ -154,21 +154,17 @@ int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
{
#ifdef CONFIG_PM
- int ret;
-
if (atomic_add_unless(&st->runtime_pm_enable, 1, 1))
pm_runtime_enable(&st->pdev->dev);
if (state) {
atomic_inc(&st->user_requested_state);
- ret = pm_runtime_resume_and_get(&st->pdev->dev);
- } else {
- atomic_dec(&st->user_requested_state);
- pm_runtime_use_autosuspend(&st->pdev->dev);
- ret = pm_runtime_put_autosuspend(&st->pdev->dev);
+ return pm_runtime_resume_and_get(&st->pdev->dev);
}
- if (ret < 0)
- return ret;
+
+ atomic_dec(&st->user_requested_state);
+ pm_runtime_use_autosuspend(&st->pdev->dev);
+ pm_runtime_put_autosuspend(&st->pdev->dev);
return 0;
#else
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);
- 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)
{
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/imu/kmx61.c b/drivers/iio/imu/kmx61.c
index c288437d53ea..a8d37aa549ae 100644
--- a/drivers/iio/imu/kmx61.c
+++ b/drivers/iio/imu/kmx61.c
@@ -747,16 +747,15 @@ static int kmx61_set_power_state(struct kmx61_data *data, bool on, u8 device)
data->mag_ps = on;
}
- 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: kmx61_set_power_state for %d, ret %d\n",
- on, ret);
-
- 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
return 0;
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
@@ -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;
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;
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().
*/
- 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) {
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;
}
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);
+ return 0;
}
static int us5182d_read_value(struct us5182d_data *data,
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 04/13] media: venus: Discard pm_runtime_put_autosuspend() return values
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (2 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 03/13] iio: " Brian Norris
@ 2026-10-06 23:13 ` Brian Norris
2026-10-06 23:13 ` [PATCH 05/13] pinctrl: qcom: lpass-lpi: " Brian Norris
` (8 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Bryan O'Donoghue, Dikshita Agarwal, Mauro Carvalho Chehab,
Vikash Garodia, linux-arm-msm, linux-media
Propagating the pm_runtime_put_autosuspend() return value to callers 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.
Accordingly, update the Venus vdec and venc drivers to simply discard
the return value of pm_runtime_put_autosuspend().
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.
drivers/media/platform/qcom/venus/vdec.c | 10 ++++------
drivers/media/platform/qcom/venus/venc.c | 10 ++++------
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 6a43ea191da1..35c1b6ec1f9f 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -644,12 +644,12 @@ static int vdec_pm_put(struct venus_inst *inst, bool autosuspend)
{
struct venus_core *core = inst->core;
struct device *dev = core->dev_dec;
- int ret;
+ int ret = 0;
mutex_lock(&core->pm_lock);
if (autosuspend)
- ret = pm_runtime_put_autosuspend(dev);
+ pm_runtime_put_autosuspend(dev);
else
ret = pm_runtime_put_sync(dev);
@@ -671,7 +671,7 @@ static int vdec_pm_get_put(struct venus_inst *inst)
if (ret < 0)
goto error;
- ret = pm_runtime_put_autosuspend(dev);
+ pm_runtime_put_autosuspend(dev);
}
error:
@@ -1200,9 +1200,7 @@ static int vdec_start_streaming(struct vb2_queue *q, unsigned int count)
if (ret)
goto put_power;
- ret = vdec_pm_put(inst, true);
- if (ret)
- goto error;
+ vdec_pm_put(inst, true);
ret = vdec_start_output(inst);
}
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index 79acf7c1ec9a..3c7c24dd7159 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -617,12 +617,12 @@ static int venc_pm_put(struct venus_inst *inst, bool autosuspend)
{
struct venus_core *core = inst->core;
struct device *dev = core->dev_enc;
- int ret;
+ int ret = 0;
mutex_lock(&core->pm_lock);
if (autosuspend)
- ret = pm_runtime_put_autosuspend(dev);
+ pm_runtime_put_autosuspend(dev);
else
ret = pm_runtime_put_sync(dev);
@@ -644,7 +644,7 @@ static int venc_pm_get_put(struct venus_inst *inst)
if (ret < 0)
goto error;
- ret = pm_runtime_put_autosuspend(dev);
+ pm_runtime_put_autosuspend(dev);
}
error:
@@ -1275,9 +1275,7 @@ static int venc_start_streaming(struct vb2_queue *q, unsigned int count)
if (ret)
goto put_power;
- ret = venc_pm_put(inst, true);
- if (ret)
- goto error;
+ venc_pm_put(inst, true);
ret = venc_set_properties(inst);
if (ret)
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 05/13] pinctrl: qcom: lpass-lpi: Discard pm_runtime_put_autosuspend() return values
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (3 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 04/13] media: venus: " Brian Norris
@ 2026-10-06 23:13 ` 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
` (7 subsequent siblings)
12 siblings, 1 reply; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Bartosz Golaszewski, Bjorn Andersson, Linus Walleij,
linux-arm-msm, linux-gpio
Passing the pm_runtime_put_autosuspend() return value to callers 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.
Accordingly, update the LPASS LPI pinctrl driver to simply discard the
return value of pm_runtime_put_autosuspend() and return 0 to the
callers.
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.
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/pinctrl/qcom/pinctrl-lpass-lpi.c b/drivers/pinctrl/qcom/pinctrl-lpass-lpi.c
index 5fd4a4eba654..b93f661c36e5 100644
--- a/drivers/pinctrl/qcom/pinctrl-lpass-lpi.c
+++ b/drivers/pinctrl/qcom/pinctrl-lpass-lpi.c
@@ -76,7 +76,9 @@ static int lpi_gpio_read(struct lpi_pinctrl *state, unsigned int pin,
lpi_gpio_read_reg(state, pin, addr, val);
- return pm_runtime_put_autosuspend(state->dev);
+ pm_runtime_put_autosuspend(state->dev);
+
+ return 0;
}
static const struct pinctrl_ops lpi_gpio_pinctrl_ops = {
@@ -164,7 +166,9 @@ static int lpi_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned int function,
u32p_replace_bits(&val, i, LPI_GPIO_FUNCTION_MASK);
lpi_gpio_write_reg(pctrl, pin, LPI_GPIO_CFG_REG, val);
- return pm_runtime_put_autosuspend(pctrl->dev);
+ pm_runtime_put_autosuspend(pctrl->dev);
+
+ return 0;
}
static const struct pinmux_ops lpi_gpio_pinmux_ops = {
@@ -261,7 +265,9 @@ static int lpi_config_set_slew_rate(struct lpi_pinctrl *pctrl,
mutex_unlock(&pctrl->lock);
- return pm_runtime_put_autosuspend(pctrl->dev);
+ pm_runtime_put_autosuspend(pctrl->dev);
+
+ return 0;
}
static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
@@ -335,7 +341,9 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,
lpi_gpio_write_reg(pctrl, group, LPI_GPIO_CFG_REG, val);
- return pm_runtime_put_autosuspend(pctrl->dev);
+ pm_runtime_put_autosuspend(pctrl->dev);
+
+ return 0;
}
static const struct pinconf_ops lpi_gpio_pinconf_ops = {
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 06/13] spi: ti-qspi: Discard pm_runtime_put_autosuspend() return value
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (4 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 05/13] pinctrl: qcom: lpass-lpi: " Brian Norris
@ 2026-10-06 23:13 ` Brian Norris
2026-10-06 23:13 ` [PATCH 07/13] greybus: " Brian Norris
` (6 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Mark Brown, linux-spi
Failing SPI setup due to pm_runtime_put_autosuspend() returning a
negative value 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.
Accordingly, update ti_qspi_setup() to simply discard the return value
of pm_runtime_put_autosuspend().
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.
drivers/spi/spi-ti-qspi.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index 34b154922ff2..63b9098ec8a2 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -158,11 +158,7 @@ static int ti_qspi_setup(struct spi_device *spi)
return ret;
}
- ret = pm_runtime_put_autosuspend(qspi->dev);
- if (ret < 0) {
- dev_err(qspi->dev, "pm_runtime_put_autosuspend() failed\n");
- return ret;
- }
+ pm_runtime_put_autosuspend(qspi->dev);
return 0;
}
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 07/13] greybus: Discard pm_runtime_put_autosuspend() return value
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (5 preceding siblings ...)
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 ` Brian Norris
2026-10-06 23:13 ` [PATCH 08/13] ALSA: hda: " Brian Norris
` (5 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Alex Elder,
Greg Kroah-Hartman, Johan Hovold, Rui Miguel Silva, greybus-dev,
linux-staging
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.
Modify gb_pm_runtime_put_autosuspend() to discard the
pm_runtime_put_autosuspend() return value, change its return type to
void, and update its caller in the Greybus power supply driver
accordingly. Also drop the redundant pm_runtime_mark_last_busy() call
from gb_pm_runtime_put_autosuspend() while we're here, as this is
already part of pm_runtime_put_autosuspend().
Note that this resolves a bug in the power_supply driver: in tracking
'gbpsy->pm_acquired', it erroneously assumed that
pm_runtime_put_autosuspend() would not release a refcount when it
returned a non-zero value. That's a false assumption.
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.
drivers/staging/greybus/power_supply.c | 8 ++------
include/linux/greybus/bundle.h | 12 +++---------
2 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/drivers/staging/greybus/power_supply.c b/drivers/staging/greybus/power_supply.c
index 44bd8a72fa50..beefcbaf3681 100644
--- a/drivers/staging/greybus/power_supply.c
+++ b/drivers/staging/greybus/power_supply.c
@@ -377,12 +377,8 @@ static void gb_power_supply_state_change(struct gb_power_supply *gbpsy,
gbpsy->pm_acquired = true;
} else {
if (gbpsy->pm_acquired) {
- ret = gb_pm_runtime_put_autosuspend(connection->bundle);
- if (ret)
- dev_err(&connection->bundle->dev,
- "Fail to set wake unlock for none charging\n");
- else
- gbpsy->pm_acquired = false;
+ gb_pm_runtime_put_autosuspend(connection->bundle);
+ gbpsy->pm_acquired = false;
}
}
diff --git a/include/linux/greybus/bundle.h b/include/linux/greybus/bundle.h
index df8d88424cb7..361a94d3499b 100644
--- a/include/linux/greybus/bundle.h
+++ b/include/linux/greybus/bundle.h
@@ -59,14 +59,9 @@ static inline int gb_pm_runtime_get_sync(struct gb_bundle *bundle)
return 0;
}
-static inline int gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle)
+static inline void gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle)
{
- int retval;
-
- pm_runtime_mark_last_busy(&bundle->dev);
- retval = pm_runtime_put_autosuspend(&bundle->dev);
-
- return retval;
+ pm_runtime_put_autosuspend(&bundle->dev);
}
static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle)
@@ -82,8 +77,7 @@ static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle)
#else
static inline int gb_pm_runtime_get_sync(struct gb_bundle *bundle)
{ return 0; }
-static inline int gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle)
-{ return 0; }
+static inline void gb_pm_runtime_put_autosuspend(struct gb_bundle *bundle) {}
static inline void gb_pm_runtime_get_noresume(struct gb_bundle *bundle) {}
static inline void gb_pm_runtime_put_noidle(struct gb_bundle *bundle) {}
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 08/13] ALSA: hda: Discard pm_runtime_put_autosuspend() return value
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (6 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 07/13] greybus: " Brian Norris
@ 2026-10-06 23:13 ` 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
` (4 subsequent siblings)
12 siblings, 1 reply; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Jaroslav Kysela, Takashi Iwai, linux-sound
snd_hdac_power_down() and snd_hdac_power_down_pm() are defined to return
an int, but their return values are never used by any caller.
snd_hdac_power_down() also passes the return value of
pm_runtime_put_autosuspend() to the caller, which is not very 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.
Modify snd_hdac_power_down() to discard the pm_runtime_put_autosuspend()
return value and change the return types of snd_hdac_power_down() and
snd_hdac_power_down_pm() to void.
No intentional functional impact.
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.
include/sound/hdaudio.h | 8 ++++----
sound/hda/core/device.c | 13 ++++---------
2 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/include/sound/hdaudio.h b/include/sound/hdaudio.h
index aa994d6e6d35..4cbbb1744740 100644
--- a/include/sound/hdaudio.h
+++ b/include/sound/hdaudio.h
@@ -179,9 +179,9 @@ static inline int snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid,
#ifdef CONFIG_PM
int snd_hdac_power_up(struct hdac_device *codec);
-int snd_hdac_power_down(struct hdac_device *codec);
+void snd_hdac_power_down(struct hdac_device *codec);
int snd_hdac_power_up_pm(struct hdac_device *codec);
-int snd_hdac_power_down_pm(struct hdac_device *codec);
+void snd_hdac_power_down_pm(struct hdac_device *codec);
int snd_hdac_keep_power_up(struct hdac_device *codec);
/* call this at entering into suspend/resume callbacks in codec driver */
@@ -207,9 +207,9 @@ static inline bool snd_hdac_is_power_on(struct hdac_device *codec)
}
#else
static inline int snd_hdac_power_up(struct hdac_device *codec) { return 0; }
-static inline int snd_hdac_power_down(struct hdac_device *codec) { return 0; }
+static inline void snd_hdac_power_down(struct hdac_device *codec) {}
static inline int snd_hdac_power_up_pm(struct hdac_device *codec) { return 0; }
-static inline int snd_hdac_power_down_pm(struct hdac_device *codec) { return 0; }
+static inline void snd_hdac_power_down_pm(struct hdac_device *codec) {}
static inline int snd_hdac_keep_power_up(struct hdac_device *codec) { return 0; }
static inline void snd_hdac_enter_pm(struct hdac_device *codec) {}
static inline void snd_hdac_leave_pm(struct hdac_device *codec) {}
diff --git a/sound/hda/core/device.c b/sound/hda/core/device.c
index a45f61e12c1a..6187ffaedbfa 100644
--- a/sound/hda/core/device.c
+++ b/sound/hda/core/device.c
@@ -572,14 +572,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_power_up);
/**
* snd_hdac_power_down - power down the codec
* @codec: the codec object
- *
- * Returns zero if successful, or a negative error code.
*/
-int snd_hdac_power_down(struct hdac_device *codec)
+void snd_hdac_power_down(struct hdac_device *codec)
{
struct device *dev = &codec->dev;
- return pm_runtime_put_autosuspend(dev);
+ pm_runtime_put_autosuspend(dev);
}
EXPORT_SYMBOL_GPL(snd_hdac_power_down);
@@ -624,14 +622,11 @@ int snd_hdac_keep_power_up(struct hdac_device *codec)
*
* Like snd_hdac_power_up_pm(), this function is used in a recursive
* code path like init code which may be called by PM suspend/resume again.
- *
- * Returns zero if successful, or a negative error code.
*/
-int snd_hdac_power_down_pm(struct hdac_device *codec)
+void snd_hdac_power_down_pm(struct hdac_device *codec)
{
if (atomic_dec_if_positive(&codec->in_pm) < 0)
- return snd_hdac_power_down(codec);
- return 0;
+ snd_hdac_power_down(codec);
}
EXPORT_SYMBOL_GPL(snd_hdac_power_down_pm);
#endif
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 09/13] ASoC: codecs: lpass: Discard pm_runtime_put_autosuspend() return values
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (7 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 08/13] ALSA: hda: " Brian Norris
@ 2026-10-06 23:13 ` Brian Norris
2026-10-06 23:13 ` [PATCH 10/13] ASoC: intel: atom: Discard pm_runtime_put_autosuspend() return value Brian Norris
` (3 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris,
Jaroslav Kysela, Liam Girdwood, Mark Brown, Srinivas Kandagatla,
Takashi Iwai, linux-arm-msm, linux-sound
Printing warning messages on pm_runtime_put_autosuspend() returning
negative values 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.
Accordingly, update the LPASS macro codec drivers to simply discard the
return value of pm_runtime_put_autosuspend().
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.
sound/soc/codecs/lpass-rx-macro.c | 4 +---
sound/soc/codecs/lpass-tx-macro.c | 4 +---
sound/soc/codecs/lpass-va-macro.c | 17 ++++-------------
sound/soc/codecs/lpass-wsa-macro.c | 8 ++------
4 files changed, 8 insertions(+), 25 deletions(-)
diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 282a6aaa9986..e6c27893584c 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -3917,9 +3917,7 @@ static int rx_macro_probe(struct platform_device *pdev)
if (ret)
goto err_rpm_put;
- ret = pm_runtime_put_autosuspend(dev);
- if (ret < 0)
- dev_warn(dev, "runtime PM put failed after probe: %d\n", ret);
+ pm_runtime_put_autosuspend(dev);
return 0;
diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
index a8e83eb60ba2..149373384a15 100644
--- a/sound/soc/codecs/lpass-tx-macro.c
+++ b/sound/soc/codecs/lpass-tx-macro.c
@@ -2370,9 +2370,7 @@ static int tx_macro_probe(struct platform_device *pdev)
if (ret)
goto err_rpm_put;
- ret = pm_runtime_put_autosuspend(dev);
- if (ret < 0)
- dev_warn(dev, "runtime PM put failed after probe: %d\n", ret);
+ pm_runtime_put_autosuspend(dev);
return 0;
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index dbc5795b9273..48139119b335 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -1352,7 +1352,7 @@ static int fsgen_gate_enable(struct clk_hw *hw)
{
struct va_macro *va = to_va_macro(hw);
struct regmap *regmap = va->regmap;
- int ret, rpm_ret;
+ int ret;
ret = pm_runtime_resume_and_get(va->dev);
if (ret < 0)
@@ -1360,11 +1360,7 @@ static int fsgen_gate_enable(struct clk_hw *hw)
ret = va_macro_mclk_enable(va, true);
if (ret) {
- rpm_ret = pm_runtime_put_autosuspend(va->dev);
- if (rpm_ret < 0)
- dev_warn(va->dev,
- "runtime PM put failed in fsgen enable unwind: %d\n",
- rpm_ret);
+ pm_runtime_put_autosuspend(va->dev);
return ret;
}
if (va->has_swr_master)
@@ -1378,7 +1374,6 @@ static void fsgen_gate_disable(struct clk_hw *hw)
{
struct va_macro *va = to_va_macro(hw);
struct regmap *regmap = va->regmap;
- int ret;
if (va->has_swr_master)
regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_SWR_CONTROL,
@@ -1386,9 +1381,7 @@ static void fsgen_gate_disable(struct clk_hw *hw)
va_macro_mclk_enable(va, false);
- ret = pm_runtime_put_autosuspend(va->dev);
- if (ret < 0)
- dev_warn(va->dev, "runtime PM put failed in fsgen disable: %d\n", ret);
+ pm_runtime_put_autosuspend(va->dev);
}
static int fsgen_gate_is_enabled(struct clk_hw *hw)
@@ -1693,9 +1686,7 @@ static int va_macro_probe(struct platform_device *pdev)
goto err_rpm_put;
}
- rpm_ret = pm_runtime_put_autosuspend(dev);
- if (rpm_ret < 0)
- dev_warn(dev, "runtime PM put failed after probe: %d\n", rpm_ret);
+ pm_runtime_put_autosuspend(dev);
return 0;
diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index cfd2ac0a6cda..60d285a2040f 100644
--- a/sound/soc/codecs/lpass-wsa-macro.c
+++ b/sound/soc/codecs/lpass-wsa-macro.c
@@ -2548,9 +2548,7 @@ static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable)
CDC_WSA_SWR_CLK_EN_MASK, 0);
wsa_macro_mclk_enable(wsa, false);
- ret = pm_runtime_put_autosuspend(wsa->dev);
- if (ret < 0)
- dev_warn(wsa->dev, "runtime PM put failed: %d\n", ret);
+ pm_runtime_put_autosuspend(wsa->dev);
}
return 0;
@@ -2820,9 +2818,7 @@ static int wsa_macro_probe(struct platform_device *pdev)
if (ret)
goto err_rpm_put;
- ret = pm_runtime_put_autosuspend(dev);
- if (ret < 0)
- dev_warn(dev, "runtime PM put failed after probe: %d\n", ret);
+ pm_runtime_put_autosuspend(dev);
return 0;
err_rpm_put:
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 10/13] ASoC: intel: atom: Discard pm_runtime_put_autosuspend() return value
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (8 preceding siblings ...)
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 ` Brian Norris
2026-10-06 23:13 ` [PATCH 11/13] ASoC: SOF: Discard pm_runtime_put_autosuspend() return values Brian Norris
` (2 subsequent siblings)
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Bard Liao,
Cezary Rojewski, Jaroslav Kysela, Kai Vehmanen, Liam Girdwood,
Mark Brown, Peter Ujfalusi, Pierre-Louis Bossart, Takashi Iwai,
linux-sound
Propagating the pm_runtime_put_autosuspend() return value to callers 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.
Modify sst_pm_runtime_put() to discard the pm_runtime_put_autosuspend()
return value, change its return type to void, and update its callers in
sst_power_control() accordingly.
Note that in one error path for sst_power_control(), we would previously
overwrite one error code (from "FW download fail") with the return code
from pm_runtime_put_autosuspend(). This was probably an unexpected
behavior, which is now changed to propagate the sst_load_fw() error
code.
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.
sound/soc/intel/atom/sst/sst.h | 2 +-
sound/soc/intel/atom/sst/sst_drv_interface.c | 4 ++--
sound/soc/intel/atom/sst/sst_pvt.c | 9 ++-------
3 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/sound/soc/intel/atom/sst/sst.h b/sound/soc/intel/atom/sst/sst.h
index c43946c5ecee..518b2b53510d 100644
--- a/sound/soc/intel/atom/sst/sst.h
+++ b/sound/soc/intel/atom/sst/sst.h
@@ -497,7 +497,7 @@ int get_stream_id_mrfld(struct intel_sst_drv *sst_drv_ctx,
u32 relocate_imr_addr_mrfld(u32 base_addr);
void sst_add_to_dispatch_list_and_post(struct intel_sst_drv *sst,
struct ipc_post *msg);
-int sst_pm_runtime_put(struct intel_sst_drv *sst_drv);
+void sst_pm_runtime_put(struct intel_sst_drv *sst_drv);
int sst_shim_write(void __iomem *addr, int offset, int value);
u32 sst_shim_read(void __iomem *addr, int offset);
u64 sst_reg_read64(void __iomem *addr, int offset);
diff --git a/sound/soc/intel/atom/sst/sst_drv_interface.c b/sound/soc/intel/atom/sst/sst_drv_interface.c
index 2646c4632ca1..c99697b975d8 100644
--- a/sound/soc/intel/atom/sst/sst_drv_interface.c
+++ b/sound/soc/intel/atom/sst/sst_drv_interface.c
@@ -135,13 +135,13 @@ static int sst_power_control(struct device *dev, bool state)
if (ret) {
dev_err(dev, "FW download fail %d\n", ret);
sst_set_fw_state_locked(ctx, SST_RESET);
- ret = sst_pm_runtime_put(ctx);
+ sst_pm_runtime_put(ctx);
}
}
} else {
usage_count = GET_USAGE_COUNT(dev);
dev_dbg(ctx->dev, "Disable: pm usage count: %d\n", usage_count);
- return sst_pm_runtime_put(ctx);
+ sst_pm_runtime_put(ctx);
}
return ret;
}
diff --git a/sound/soc/intel/atom/sst/sst_pvt.c b/sound/soc/intel/atom/sst/sst_pvt.c
index 0b0cfd70efbc..913e232bf6ed 100644
--- a/sound/soc/intel/atom/sst/sst_pvt.c
+++ b/sound/soc/intel/atom/sst/sst_pvt.c
@@ -255,14 +255,9 @@ int sst_prepare_and_post_msg(struct intel_sst_drv *sst,
return ret;
}
-int sst_pm_runtime_put(struct intel_sst_drv *sst_drv)
+void sst_pm_runtime_put(struct intel_sst_drv *sst_drv)
{
- int ret;
-
- ret = pm_runtime_put_autosuspend(sst_drv->dev);
- if (ret < 0)
- return ret;
- return 0;
+ pm_runtime_put_autosuspend(sst_drv->dev);
}
void sst_fill_header_mrfld(union ipc_header_mrfld *header,
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 11/13] ASoC: SOF: Discard pm_runtime_put_autosuspend() return values
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (9 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 10/13] ASoC: intel: atom: Discard pm_runtime_put_autosuspend() return value Brian Norris
@ 2026-10-06 23:13 ` 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
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris, Bard Liao,
Daniel Baluta, Jaroslav Kysela, Kai Vehmanen, Liam Girdwood,
Mark Brown, Peter Ujfalusi, Pierre-Louis Bossart, Takashi Iwai,
Vijendar Mukunda, linux-sound, sound-open-firmware
Printing error messages on pm_runtime_put_autosuspend() returning
negative values 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.
Accordingly, update the SOF driver to simply discard the return value of
pm_runtime_put_autosuspend().
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.
sound/soc/sof/control.c | 6 ++----
sound/soc/sof/sof-client-ipc-flood-test.c | 5 +----
sound/soc/sof/sof-client-ipc-kernel-injector.c | 4 +---
sound/soc/sof/sof-client-ipc-msg-injector.c | 6 ++----
sound/soc/sof/sof-client-probes.c | 18 ++++++------------
5 files changed, 12 insertions(+), 27 deletions(-)
diff --git a/sound/soc/sof/control.c b/sound/soc/sof/control.c
index 74d997a4f620..8718c293c5b9 100644
--- a/sound/soc/sof/control.c
+++ b/sound/soc/sof/control.c
@@ -185,7 +185,7 @@ int snd_sof_bytes_ext_volatile_get(struct snd_kcontrol *kcontrol, unsigned int _
struct snd_soc_component *scomp = scontrol->scomp;
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
- int ret, err;
+ int ret;
/* ignore the ext_volatile_get call if the callbacks are not provided */
if (!tplg_ops || !tplg_ops->control ||
@@ -205,9 +205,7 @@ int snd_sof_bytes_ext_volatile_get(struct snd_kcontrol *kcontrol, unsigned int _
binary_data,
size);
- err = pm_runtime_put_autosuspend(scomp->dev);
- if (err < 0)
- dev_err_ratelimited(scomp->dev, "%s: failed to idle %d\n", __func__, err);
+ pm_runtime_put_autosuspend(scomp->dev);
return ret;
}
diff --git a/sound/soc/sof/sof-client-ipc-flood-test.c b/sound/soc/sof/sof-client-ipc-flood-test.c
index 2396cc35489a..a86dd5630790 100644
--- a/sound/soc/sof/sof-client-ipc-flood-test.c
+++ b/sound/soc/sof/sof-client-ipc-flood-test.c
@@ -157,7 +157,6 @@ static ssize_t sof_ipc_flood_dfs_write(struct file *file, const char __user *buf
unsigned long ipc_duration_ms = 0;
bool flood_duration_test = false;
unsigned long ipc_count = 0;
- int err;
char *string;
int ret;
@@ -223,9 +222,7 @@ static ssize_t sof_ipc_flood_dfs_write(struct file *file, const char __user *buf
ret = sof_debug_ipc_flood_test(cdev, flood_duration_test,
ipc_duration_ms, ipc_count);
- err = pm_runtime_put_autosuspend(dev);
- if (err < 0)
- dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err);
+ pm_runtime_put_autosuspend(dev);
/* return count if test is successful */
if (ret >= 0)
diff --git a/sound/soc/sof/sof-client-ipc-kernel-injector.c b/sound/soc/sof/sof-client-ipc-kernel-injector.c
index 02d0d97ad1a0..751d6a0bef79 100644
--- a/sound/soc/sof/sof-client-ipc-kernel-injector.c
+++ b/sound/soc/sof/sof-client-ipc-kernel-injector.c
@@ -66,9 +66,7 @@ static ssize_t sof_kernel_msg_inject_dfs_write(struct file *file, const char __u
if (!ret)
sof_client_ipc_rx_message(cdev, hdr, priv->kernel_buffer);
- ret = pm_runtime_put_autosuspend(dev);
- if (ret < 0)
- dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", ret);
+ pm_runtime_put_autosuspend(dev);
return count;
};
diff --git a/sound/soc/sof/sof-client-ipc-msg-injector.c b/sound/soc/sof/sof-client-ipc-msg-injector.c
index 932ab459c079..2eaec52ab439 100644
--- a/sound/soc/sof/sof-client-ipc-msg-injector.c
+++ b/sound/soc/sof/sof-client-ipc-msg-injector.c
@@ -122,7 +122,7 @@ static int sof_msg_inject_send_message(struct sof_client_dev *cdev)
{
struct sof_msg_inject_priv *priv = cdev->data;
struct device *dev = &cdev->auxdev.dev;
- int ret, err;
+ int ret;
ret = pm_runtime_resume_and_get(dev);
if (ret < 0 && ret != -EACCES) {
@@ -140,9 +140,7 @@ static int sof_msg_inject_send_message(struct sof_client_dev *cdev)
dev_err(dev, "IPC message send failed: %d\n", ret);
}
- err = pm_runtime_put_autosuspend(dev);
- if (err < 0)
- dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err);
+ pm_runtime_put_autosuspend(dev);
return ret;
}
diff --git a/sound/soc/sof/sof-client-probes.c b/sound/soc/sof/sof-client-probes.c
index 124f55508159..32e31d6aa9bb 100644
--- a/sound/soc/sof/sof-client-probes.c
+++ b/sound/soc/sof/sof-client-probes.c
@@ -211,7 +211,7 @@ static ssize_t sof_probes_dfs_points_read(struct file *file, char __user *to,
int remaining, offset;
size_t num_desc;
char *buf;
- int i, ret, err;
+ int i, ret;
if (priv->extractor_stream_tag == SOF_PROBES_INVALID_NODE_ID) {
dev_warn(dev, "no extractor stream running\n");
@@ -258,9 +258,7 @@ static ssize_t sof_probes_dfs_points_read(struct file *file, char __user *to,
kfree(desc);
pm_error:
- err = pm_runtime_put_autosuspend(dev);
- if (err < 0)
- dev_err_ratelimited(dev, "debugfs read failed to idle %d\n", err);
+ pm_runtime_put_autosuspend(dev);
exit:
kfree(buf);
@@ -294,7 +292,7 @@ sof_probes_dfs_points_write(struct file *file, const char __user *from,
struct sof_probe_point_desc *desc;
u32 num_elems, *array;
size_t bytes;
- int ret, err;
+ int ret;
if (priv->extractor_stream_tag == SOF_PROBES_INVALID_NODE_ID) {
dev_warn(dev, "no extractor stream running\n");
@@ -327,9 +325,7 @@ sof_probes_dfs_points_write(struct file *file, const char __user *from,
ret = count;
}
- err = pm_runtime_put_autosuspend(dev);
- if (err < 0)
- dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err);
+ pm_runtime_put_autosuspend(dev);
exit:
kfree(array);
return ret;
@@ -360,7 +356,7 @@ sof_probes_dfs_points_remove_write(struct file *file, const char __user *from,
struct sof_probes_priv *priv = cdev->data;
const struct sof_probes_ipc_ops *ipc = priv->ipc_ops;
struct device *dev = &cdev->auxdev.dev;
- int ret, err;
+ int ret;
u32 *array;
if (priv->extractor_stream_tag == SOF_PROBES_INVALID_NODE_ID) {
@@ -385,9 +381,7 @@ sof_probes_dfs_points_remove_write(struct file *file, const char __user *from,
ret = count;
}
- err = pm_runtime_put_autosuspend(dev);
- if (err < 0)
- dev_err_ratelimited(dev, "debugfs write failed to idle %d\n", err);
+ pm_runtime_put_autosuspend(dev);
exit:
kfree(array);
return ret;
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 12/13] PM: runtime: Drop pm_runtime_put_autosuspend() return code
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (10 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 11/13] ASoC: SOF: Discard pm_runtime_put_autosuspend() return values Brian Norris
@ 2026-10-06 23:13 ` Brian Norris
2026-10-06 23:13 ` [PATCH 13/13] PM: runtime: Drop pm_request_{idle,autosuspend}() return codes Brian Norris
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris
The primary role of pm_runtime_put_autosuspend() is to update the last
access time and decrement the runtime PM usage counter of the given
device. It always does that regardless of the value returned by it
later.
In addition, if the runtime PM usage counter after decrementation turns
out to be zero, a timer or work item is queued up to check whether or
not the device can be suspended once its autosuspend delay has elapsed.
This is not guaranteed to succeed though and even if it is successful,
the device may still not be suspended going forward.
There are multiple valid reasons why pm_runtime_put_autosuspend() may
not decide to queue up the timer or work item mentioned above,
including, but not limited to, the case when user space has written
"on" to the device's runtime PM "control" file in sysfs. In some of
those cases, pm_runtime_put_autosuspend() returns a negative error code
(even though the device's runtime PM usage counter has been successfully
decremented by it) which is very confusing.
Accordingly, to avoid the confusion mentioned above, change the return
types of pm_runtime_put_autosuspend() and __pm_runtime_put_autosuspend()
to void, similar to commit 3afd8df02433 ("PM: runtime: Change
pm_runtime_put() return type to void").
Signed-off-by: Brian Norris <briannorris@chromium.org>
---
This patch must be applied after all the preceding patches. Presumably
that can wait for other maintainers.
include/linux/pm_runtime.h | 32 ++++----------------------------
1 file changed, 4 insertions(+), 28 deletions(-)
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 322e3b17f987..b0e7dfb3805f 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -593,22 +593,10 @@ static inline void pm_runtime_put(struct device *dev)
*
* Decrement the runtime PM usage counter of @dev and if it turns out to be
* equal to 0, queue up a work item for @dev like in pm_request_autosuspend().
- *
- * Return:
- * * %1: Success. Usage counter dropped to zero, but device was already suspended.
- * * %0: Success.
- * * %-EINVAL: Runtime PM error.
- * * %-EACCES: Runtime PM disabled.
- * * %-EAGAIN: Runtime PM usage counter became non-zero or Runtime PM status
- * change ongoing.
- * * %-EBUSY: Runtime PM child_count non-zero.
- * * %-EPERM: Device PM QoS resume latency 0.
- * * %-EINPROGRESS: Suspend already in progress.
- * * %-ENOSYS: %CONFIG_PM not enabled.
*/
-static inline int __pm_runtime_put_autosuspend(struct device *dev)
+static inline void __pm_runtime_put_autosuspend(struct device *dev)
{
- return __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_ASYNC | RPM_AUTO);
+ __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_ASYNC | RPM_AUTO);
}
/**
@@ -619,23 +607,11 @@ static inline int __pm_runtime_put_autosuspend(struct device *dev)
* Update the last access time of @dev and decrement its runtime PM usage
* counter. If the counter drops to zero, asynchronously request the PM core to
* suspend the device once its autosuspend delay has elapsed.
- *
- * Return:
- * * %1: Success. Usage counter dropped to zero, but device was already suspended.
- * * %0: Success.
- * * %-EINVAL: Runtime PM error.
- * * %-EACCES: Runtime PM disabled.
- * * %-EAGAIN: Runtime PM usage counter became non-zero or Runtime PM status
- * change ongoing.
- * * %-EBUSY: Runtime PM child_count non-zero.
- * * %-EPERM: Device PM QoS resume latency 0.
- * * %-EINPROGRESS: Suspend already in progress.
- * * %-ENOSYS: %CONFIG_PM not enabled.
*/
-static inline int pm_runtime_put_autosuspend(struct device *dev)
+static inline void pm_runtime_put_autosuspend(struct device *dev)
{
pm_runtime_mark_last_busy(dev);
- return __pm_runtime_put_autosuspend(dev);
+ __pm_runtime_put_autosuspend(dev);
}
DEFINE_GUARD(pm_runtime_noresume, struct device *,
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 13/13] PM: runtime: Drop pm_request_{idle,autosuspend}() return codes
2026-10-06 23:13 [PATCH 00/13] PM: runtime: Convert pm_runtime_put_autosuspend() and friends to a void function Brian Norris
` (11 preceding siblings ...)
2026-10-06 23:13 ` [PATCH 12/13] PM: runtime: Drop pm_runtime_put_autosuspend() return code Brian Norris
@ 2026-10-06 23:13 ` Brian Norris
12 siblings, 0 replies; 16+ messages in thread
From: Brian Norris @ 2026-10-06 23:13 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: linux-pm, Ulf Hansson, linux-kernel, Brian Norris
No in-tree callers (outside of KUnit tests) use the return values of
pm_request_idle() or pm_request_autosuspend().
As with pm_runtime_put() and pm_runtime_put_autosuspend(), these
functions asynchronously queue up a timer or work item to check whether
or not the device can be suspended, which is not guaranteed to succeed
and may return a negative error code in many valid situations (for
example, when user space has written "on" to the device's runtime PM
"control" file in sysfs, or when the device's usage counter is
non-zero).
Accordingly, change the return types of pm_request_idle() and
pm_request_autosuspend() to void, 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 and could be applied on its own. I
put in this series because it has the same justification as the more
noisy one, "PM: runtime: Drop pm_runtime_put_autosuspend() return code"
drivers/base/power/runtime-test.c | 8 --------
include/linux/pm_runtime.h | 31 ++++---------------------------
2 files changed, 4 insertions(+), 35 deletions(-)
diff --git a/drivers/base/power/runtime-test.c b/drivers/base/power/runtime-test.c
index 24865ce844fc..ac3d7277e0c5 100644
--- a/drivers/base/power/runtime-test.c
+++ b/drivers/base/power/runtime-test.c
@@ -43,7 +43,6 @@ static void pm_runtime_already_suspended_test(struct kunit *test)
KUNIT_EXPECT_EQ(test, 1, pm_runtime_suspend(dev));
KUNIT_EXPECT_EQ(test, 1, pm_runtime_autosuspend(dev));
- KUNIT_EXPECT_EQ(test, 1, pm_request_autosuspend(dev));
pm_runtime_get_noresume(dev);
KUNIT_EXPECT_EQ(test, 1, pm_runtime_put_sync_autosuspend(dev));
@@ -81,7 +80,6 @@ static void pm_runtime_idle_test(struct kunit *test)
KUNIT_EXPECT_EQ(test, 0, pm_runtime_idle(dev));
KUNIT_EXPECT_TRUE(test, pm_runtime_suspended(dev));
KUNIT_EXPECT_EQ(test, -EAGAIN, pm_runtime_idle(dev));
- KUNIT_EXPECT_EQ(test, -EAGAIN, pm_request_idle(dev));
}
static void pm_runtime_disabled_test(struct kunit *test)
@@ -112,9 +110,7 @@ static void pm_runtime_disabled_test(struct kunit *test)
KUNIT_EXPECT_EQ(test, -EACCES, pm_runtime_resume_and_get(dev));
KUNIT_EXPECT_EQ(test, -EACCES, pm_runtime_idle(dev));
- KUNIT_EXPECT_EQ(test, -EACCES, pm_request_idle(dev));
KUNIT_EXPECT_EQ(test, -EACCES, pm_request_resume(dev));
- KUNIT_EXPECT_EQ(test, -EACCES, pm_request_autosuspend(dev));
KUNIT_EXPECT_EQ(test, -EACCES, pm_runtime_suspend(dev));
KUNIT_EXPECT_EQ(test, -EACCES, pm_runtime_resume(dev));
KUNIT_EXPECT_EQ(test, -EACCES, pm_runtime_autosuspend(dev));
@@ -154,9 +150,7 @@ static void pm_runtime_error_test(struct kunit *test)
KUNIT_EXPECT_EQ(test, -EINVAL, pm_runtime_resume_and_get(dev));
KUNIT_EXPECT_EQ(test, -EINVAL, pm_runtime_idle(dev));
- KUNIT_EXPECT_EQ(test, -EINVAL, pm_request_idle(dev));
KUNIT_EXPECT_EQ(test, -EINVAL, pm_request_resume(dev));
- KUNIT_EXPECT_EQ(test, -EINVAL, pm_request_autosuspend(dev));
KUNIT_EXPECT_EQ(test, -EINVAL, pm_runtime_suspend(dev));
KUNIT_EXPECT_EQ(test, -EINVAL, pm_runtime_resume(dev));
KUNIT_EXPECT_EQ(test, -EINVAL, pm_runtime_autosuspend(dev));
@@ -189,9 +183,7 @@ static void pm_runtime_error_test(struct kunit *test)
* (already resumed).
*/
KUNIT_EXPECT_EQ(test, -EAGAIN, pm_runtime_idle(dev));
- KUNIT_EXPECT_EQ(test, -EAGAIN, pm_request_idle(dev));
KUNIT_EXPECT_EQ(test, 1, pm_request_resume(dev));
- KUNIT_EXPECT_EQ(test, -EAGAIN, pm_request_autosuspend(dev));
KUNIT_EXPECT_EQ(test, -EAGAIN, pm_runtime_suspend(dev));
KUNIT_EXPECT_EQ(test, 1, pm_runtime_resume(dev));
KUNIT_EXPECT_EQ(test, -EAGAIN, pm_runtime_autosuspend(dev));
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index b0e7dfb3805f..418a51319a62 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -447,21 +447,10 @@ static inline int pm_runtime_resume(struct device *dev)
*
* Asynchronously request the PM core to evaluate whether @dev can be idled
* or suspended, invoking its ->runtime_idle() callback if provided.
- *
- * Return:
- * * %0: Success.
- * * %-EINVAL: Runtime PM error.
- * * %-EACCES: Runtime PM disabled.
- * * %-EAGAIN: Runtime PM usage counter non-zero, Runtime PM status change
- * ongoing or device not in %RPM_ACTIVE state.
- * * %-EBUSY: Runtime PM child_count non-zero.
- * * %-EPERM: Device PM QoS resume latency 0.
- * * %-EINPROGRESS: Suspend already in progress.
- * * %-ENOSYS: %CONFIG_PM not enabled.
*/
-static inline int pm_request_idle(struct device *dev)
+static inline void pm_request_idle(struct device *dev)
{
- return __pm_runtime_idle(dev, RPM_ASYNC);
+ __pm_runtime_idle(dev, RPM_ASYNC);
}
/**
@@ -487,23 +476,11 @@ static inline int pm_request_resume(struct device *dev)
*
* Update the last access time of @dev and asynchronously request the PM core
* to suspend it after the autosuspend delay has elapsed.
- *
- * Return:
- * * %1: Success; device was already suspended.
- * * %0: Success.
- * * %-EINVAL: Runtime PM error.
- * * %-EACCES: Runtime PM disabled.
- * * %-EAGAIN: Runtime PM usage counter non-zero or Runtime PM status change
- * ongoing.
- * * %-EBUSY: Runtime PM child_count non-zero.
- * * %-EPERM: Device PM QoS resume latency 0.
- * * %-EINPROGRESS: Suspend already in progress.
- * * %-ENOSYS: %CONFIG_PM not enabled.
*/
-static inline int pm_request_autosuspend(struct device *dev)
+static inline void pm_request_autosuspend(struct device *dev)
{
pm_runtime_mark_last_busy(dev);
- return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO);
+ __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO);
}
/**
--
2.56.0.360.g66cac248cb-goog
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 08/13] ALSA: hda: Discard pm_runtime_put_autosuspend() return value
2026-10-06 23:13 ` [PATCH 08/13] ALSA: hda: " Brian Norris
@ 2026-10-07 9:45 ` Takashi Iwai
0 siblings, 0 replies; 16+ messages in thread
From: Takashi Iwai @ 2026-10-07 9:45 UTC (permalink / raw)
To: Brian Norris
Cc: Rafael J. Wysocki, linux-pm, Ulf Hansson, linux-kernel,
Jaroslav Kysela, Takashi Iwai, linux-sound
On Wed, 07 Oct 2026 01:13:36 +0200,
Brian Norris wrote:
>
> snd_hdac_power_down() and snd_hdac_power_down_pm() are defined to return
> an int, but their return values are never used by any caller.
> snd_hdac_power_down() also passes the return value of
> pm_runtime_put_autosuspend() to the caller, which is not very 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.
>
> Modify snd_hdac_power_down() to discard the pm_runtime_put_autosuspend()
> return value and change the return types of snd_hdac_power_down() and
> snd_hdac_power_down_pm() to void.
>
> No intentional functional impact.
>
> 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.
OK, I applied this one to sound.git tree for-next branch now.
thanks,
Takashi
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 05/13] pinctrl: qcom: lpass-lpi: Discard pm_runtime_put_autosuspend() return values
2026-10-06 23:13 ` [PATCH 05/13] pinctrl: qcom: lpass-lpi: " Brian Norris
@ 2026-10-07 11:44 ` Linus Walleij
0 siblings, 0 replies; 16+ messages in thread
From: Linus Walleij @ 2026-10-07 11:44 UTC (permalink / raw)
To: Brian Norris
Cc: Rafael J. Wysocki, linux-pm, Ulf Hansson, linux-kernel,
Bartosz Golaszewski, Bjorn Andersson, linux-arm-msm, linux-gpio
On Wed, Oct 7, 2026 at 1:19 AM Brian Norris <briannorris@chromium.org> wrote:
> Passing the pm_runtime_put_autosuspend() return value to callers 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.
>
> Accordingly, update the LPASS LPI pinctrl driver to simply discard the
> return value of pm_runtime_put_autosuspend() and return 0 to the
> callers.
>
> 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>
Acked-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-10-07 11:45 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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-06 23:13 ` [PATCH 03/13] iio: " Brian Norris
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-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-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
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®