From: Archit Anant <architanant5@gmail.com>
To: jic23@kernel.org
Cc: dlechner@baylibre.com, andy@kernel.org, nuno.sa@analog.com,
u.kleine-koenig@baylibre.com, linux-iio@vger.kernel.org,
linux-kernel@vger.kernel.org, joshua.crofts1@gmail.com
Subject: [PATCH v6 06/11] iio: adc: ti-ads1015: Remove ads1015_set_power_state()
Date: Mon, 9 Nov 2026 22:28:00 +0530 [thread overview]
Message-ID: <20261109165805.31160-1-architanant5@gmail.com> (raw)
Remove the unnecessary ads1015_set_power_state() helper and
use runtime PM helpers directly at the call sites.
Use PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND() to manage the
runtime PM reference in __ads1015_read_info_raw(), ensuring
it is automatically released on function exit, including
error paths.
For event configuration and buffer operations, retain
explicit reference management as the runtime PM reference
must remain held beyond the lifetime of the respective
function.
Mark the device as last busy before putting it into
autosuspend.
Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Archit Anant <architanant5@gmail.com>
---
drivers/iio/adc/ti-ads1015.c | 59 +++++++++++++++---------------------
1 file changed, 24 insertions(+), 35 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 9fd07ee21ede8..2e6bf45871340 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -366,30 +366,6 @@ static const struct iio_chan_spec tla2024_channels[] = {
IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
};
-
-#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 ret < 0 ? ret : 0;
-}
-
-#else /* !CONFIG_PM */
-
-static int ads1015_set_power_state(struct ads1015_data *data, bool on)
-{
- return 0;
-}
-
-#endif /* !CONFIG_PM */
-
static
int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
{
@@ -532,26 +508,26 @@ static int ads1015_read_avail(struct iio_dev *indio_dev,
static int __ads1015_read_info_raw(struct ads1015_data *data,
struct iio_chan_spec const *chan, int *val)
{
+ struct device *dev = regmap_get_device(data->regmap);
int ret;
if (ads1015_event_channel_enabled(data) &&
data->event_channel != chan->address)
return -EBUSY;
- ret = ads1015_set_power_state(data, true);
- if (ret < 0)
+ PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND(dev, guard);
+ ret = PM_RUNTIME_ACQUIRE_ERR(&guard);
+ if (ret)
return ret;
ret = ads1015_get_adc_result(data, chan->address, val);
- if (ret < 0) {
- ads1015_set_power_state(data, false);
+ if (ret < 0)
return ret;
- }
*val = sign_extend32(*val >> chan->scan_type.shift,
chan->scan_type.realbits - 1);
- return ads1015_set_power_state(data, false);
+ return 0;
}
static int ads1015_read_raw(struct iio_dev *indio_dev,
@@ -709,6 +685,7 @@ static int ads1015_enable_event_config(struct ads1015_data *data,
{
int low_thresh = data->thresh_data[chan->address].low_thresh;
int high_thresh = data->thresh_data[chan->address].high_thresh;
+ struct device *dev = regmap_get_device(data->regmap);
int ret;
unsigned int val;
@@ -735,7 +712,7 @@ static int ads1015_enable_event_config(struct ads1015_data *data,
if (ret)
return ret;
- ret = ads1015_set_power_state(data, true);
+ ret = pm_runtime_resume_and_get(dev);
if (ret < 0)
return ret;
@@ -744,7 +721,8 @@ static int ads1015_enable_event_config(struct ads1015_data *data,
ret = ads1015_get_adc_result(data, chan->address, &val);
if (ret) {
ads1015_event_channel_disable(data, chan->address);
- ads1015_set_power_state(data, false);
+ pm_runtime_mark_last_busy(dev);
+ pm_runtime_put_autosuspend(dev);
}
return ret;
@@ -753,6 +731,7 @@ static int ads1015_enable_event_config(struct ads1015_data *data,
static int ads1015_disable_event_config(struct ads1015_data *data,
const struct iio_chan_spec *chan, int comp_mode)
{
+ struct device *dev = regmap_get_device(data->regmap);
int ret;
if (!ads1015_event_channel_enabled(data))
@@ -774,7 +753,10 @@ static int ads1015_disable_event_config(struct ads1015_data *data,
ads1015_event_channel_disable(data, chan->address);
- return ads1015_set_power_state(data, false);
+ pm_runtime_mark_last_busy(dev);
+ pm_runtime_put_autosuspend(dev);
+
+ return 0;
}
static int ads1015_write_event_config(struct iio_dev *indio_dev,
@@ -830,17 +812,24 @@ static irqreturn_t ads1015_event_handler(int irq, void *priv)
static int ads1015_buffer_preenable(struct iio_dev *indio_dev)
{
struct ads1015_data *data = iio_priv(indio_dev);
+ struct device *dev = regmap_get_device(data->regmap);
/* Prevent from enabling both buffer and event at a time */
if (ads1015_event_channel_enabled(data))
return -EBUSY;
- return ads1015_set_power_state(iio_priv(indio_dev), true);
+ return pm_runtime_resume_and_get(dev);
}
static int ads1015_buffer_postdisable(struct iio_dev *indio_dev)
{
- return ads1015_set_power_state(iio_priv(indio_dev), false);
+ struct ads1015_data *data = iio_priv(indio_dev);
+ struct device *dev = regmap_get_device(data->regmap);
+
+ pm_runtime_mark_last_busy(dev);
+ pm_runtime_put_autosuspend(dev);
+
+ return 0;
}
static const struct iio_buffer_setup_ops ads1015_buffer_setup_ops = {
--
2.39.5
next reply other threads:[~2026-11-09 16:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 16:58 Archit Anant [this message]
2026-11-09 16:58 ` [PATCH v6 07/11] iio: adc: ti-ads1015: drop unneeded < 0 error checks Archit Anant
2026-11-09 18:49 ` Andy Shevchenko
2026-11-09 16:58 ` [PATCH v6 08/11] iio: adc: ti-ads1015: use devm_mutex_init() Archit Anant
2026-11-09 16:58 ` [PATCH v6 09/11] iio: adc: ti-ads1015: use managed runtime PM setup Archit Anant
2026-11-09 16:58 ` [PATCH v6 10/11] iio: adc: ti-ads1015: inline ads1015_set_conv_mode() Archit Anant
2026-11-09 16:58 ` [PATCH v6 11/11] iio: adc: ti-ads1015: Replace custom shift macros with FIELD_PREP/GET Archit Anant
2026-11-09 19:43 ` Andy Shevchenko
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=20261109165805.31160-1-architanant5@gmail.com \
--to=architanant5@gmail.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=joshua.crofts1@gmail.com \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=u.kleine-koenig@baylibre.com \
/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®