From: mdshahid03@gmail.com
To: Jonathan Cameron <jic23@kernel.org>
Cc: "David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Ray Jui" <rjui@broadcom.com>,
"Scott Branden" <sbranden@broadcom.com>,
bcm-kernel-feedback-list@broadcom.com, linux-iio@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
"Mohammad Shahid" <mdshahid03@gmail.com>
Subject: [PATCH v1 2/3] iio: adc: bcm_iproc_adc: use devm_add_action_or_reset()
Date: Tue, 25 Aug 2026 22:51:54 +0530 [thread overview]
Message-ID: <20260825172155.250484-3-mdshahid03@gmail.com> (raw)
In-Reply-To: <20260825172155.250484-1-mdshahid03@gmail.com>
From: Mohammad Shahid <mdshahid03@gmail.com>
Replace the manual ADC and clock cleanup in probe error paths
and remove() with devm_add_action_or_reset().
Register cleanup actions immediately after enabling the clock and
ADC so that the resources are automatically released on probe
failure and device removal.
This also allows the cleanup labels to be removed and the
iio_device_register() failure path to return directly.
Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
drivers/iio/adc/bcm_iproc_adc.c | 39 +++++++++++++++++++++------------
1 file changed, 25 insertions(+), 14 deletions(-)
diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index e46e3761993a..1464c60bc83e 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -448,6 +448,20 @@ static void iproc_adc_disable(struct iio_dev *indio_dev)
}
}
+static void iproc_adc_disable_action(void *data)
+{
+ struct iio_dev *indio_dev = data;
+
+ iproc_adc_disable(indio_dev);
+}
+
+static void iproc_adc_clk_disable(void *data)
+{
+ struct clk *clk = data;
+
+ clk_disable_unprepare(clk);
+}
+
static int iproc_adc_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan,
int *val,
@@ -551,9 +565,17 @@ static int iproc_adc_probe(struct platform_device *pdev)
if (ret)
return dev_err_probe(dev, ret, "failed to enable clock\n");
+ ret = devm_add_action_or_reset(dev, iproc_adc_clk_disable, adc_priv->adc_clk);
+ if (ret)
+ return ret;
+
ret = iproc_adc_enable(indio_dev);
if (ret)
- goto err_adc_enable;
+ return ret;
+
+ ret = devm_add_action_or_reset(dev, iproc_adc_disable_action, indio_dev);
+ if (ret)
+ return ret;
indio_dev->name = "iproc-static-adc";
indio_dev->info = &iproc_adc_iio_info;
@@ -562,29 +584,18 @@ static int iproc_adc_probe(struct platform_device *pdev)
indio_dev->num_channels = ARRAY_SIZE(iproc_adc_iio_channels);
ret = iio_device_register(indio_dev);
- if (ret) {
- dev_err(&pdev->dev, "iio_device_register failed:err %d\n", ret);
- goto err_clk;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "iio_device_register failed\n");
return 0;
-err_clk:
- iproc_adc_disable(indio_dev);
-err_adc_enable:
- clk_disable_unprepare(adc_priv->adc_clk);
-
- return ret;
}
static void iproc_adc_remove(struct platform_device *pdev)
{
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
- struct iproc_adc_priv *adc_priv = iio_priv(indio_dev);
iio_device_unregister(indio_dev);
- iproc_adc_disable(indio_dev);
- clk_disable_unprepare(adc_priv->adc_clk);
}
static const struct of_device_id iproc_adc_of_match[] = {
--
2.43.0
next prev parent reply other threads:[~2026-08-25 17:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 17:21 [PATCH v1 0/3] iio: adc: bcm_iproc_adc: Convert to devm-managed resources mdshahid03
2026-08-25 17:21 ` [PATCH v1 1/3] iio: adc: bcm_iproc_adc: sort headers alphabetically mdshahid03
2026-08-26 3:28 ` Marcelo Schmitt
2026-08-26 8:26 ` Andy Shevchenko
2026-08-25 17:21 ` mdshahid03 [this message]
2026-08-26 3:33 ` [PATCH v1 2/3] iio: adc: bcm_iproc_adc: use devm_add_action_or_reset() Marcelo Schmitt
2026-08-25 17:21 ` [PATCH v1 3/3] iio: adc: bcm_iproc_adc: use devm-managed mutex initialization mdshahid03
2026-08-26 3:35 ` Marcelo Schmitt
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=20260825172155.250484-3-mdshahid03@gmail.com \
--to=mdshahid03@gmail.com \
--cc=andy@kernel.org \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=rjui@broadcom.com \
--cc=sbranden@broadcom.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