Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs
@ 2026-09-05  9:36 mdshahid03
  2026-09-05  9:36 ` [PATCH v3 1/6] iio: adc: bcm_iproc_adc: sort headers alphabetically mdshahid03
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Convert the bcm_iproc_adc driver to use devm-managed APIs to simplify
resource management and cleanup.

Changes in v3:

-Add the missing direct include dependencies.
-Split the clock and ADC cleanup conversions into separate patches.
-Use devm_clk_get_enabled() for clock management.
-Use devm_add_action_or_reset() for ADC cleanup.
-Remove platform_set_drvdata() and the remove callback when converting
 to devm_iio_device_register().
-Simplify the devm_iio_device_register() return path.

---
Mohammad Shahid (6):
  iio: adc: bcm_iproc_adc: sort headers alphabetically
  iio: adc: bcm_iproc_adc: fix include dependencies
  iio: adc: bcm_iproc_adc: use devm-managed clock
  iio: adc: bcm_iproc_adc: use devm-managed ADC cleanup
  iio: adc: bcm_iproc_adc: use devm-managed mutex initialization
  iio: adc: bcm_iproc_adc: use devm_iio_device_register()

 drivers/iio/adc/bcm_iproc_adc.c | 67 +++++++++++++--------------------
 1 file changed, 27 insertions(+), 40 deletions(-)

-- 
2.43.0



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 1/6] iio: adc: bcm_iproc_adc: sort headers alphabetically
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  2026-09-05  9:36 ` [PATCH v3 2/6] iio: adc: bcm_iproc_adc: fix include dependencies mdshahid03
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Sort the Linux kernel headers alphabetically to improve consistency
and make the include list easier to maintain.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index ab66b97d2f04..e46e3761993a 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -3,14 +3,14 @@
  * Copyright 2016 Broadcom
  */
 
-#include <linux/module.h>
-#include <linux/io.h>
 #include <linux/clk.h>
-#include <linux/mfd/syscon.h>
-#include <linux/regmap.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/regmap.h>
 
 #include <linux/iio/iio.h>
 
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/6] iio: adc: bcm_iproc_adc: fix include dependencies
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
  2026-09-05  9:36 ` [PATCH v3 1/6] iio: adc: bcm_iproc_adc: sort headers alphabetically mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  2026-09-05  9:36 ` [PATCH v3 3/6] iio: adc: bcm_iproc_adc: use devm-managed clock mdshahid03
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Add the headers required directly by the driver for the APIs and
types it uses.

Remove the unused linux/io.h header now that register access is
handled through regmap APIs.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index e46e3761993a..e54f613d266a 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -2,15 +2,18 @@
 /*
  * Copyright 2016 Broadcom
  */
-
+#include <linux/array_size.h>
+#include <linux/bits.h>
 #include <linux/clk.h>
+#include <linux/completion.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
-#include <linux/io.h>
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
+#include <linux/mutex.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
+#include <linux/types.h>
 
 #include <linux/iio/iio.h>
 
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 3/6] iio: adc: bcm_iproc_adc: use devm-managed clock
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
  2026-09-05  9:36 ` [PATCH v3 1/6] iio: adc: bcm_iproc_adc: sort headers alphabetically mdshahid03
  2026-09-05  9:36 ` [PATCH v3 2/6] iio: adc: bcm_iproc_adc: fix include dependencies mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  2026-09-05  9:36 ` [PATCH v3 4/6] iio: adc: bcm_iproc_adc: use devm-managed ADC cleanup mdshahid03
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Convert the ADC clock to use devm-managed APIs to simplify
resource cleanup.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index e54f613d266a..3bbf814d4c8f 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -109,7 +109,6 @@ do { \
 
 struct iproc_adc_priv {
 	struct regmap *regmap;
-	struct clk *adc_clk;
 	struct mutex mutex;
 	int  irqno;
 	int chan_val;
@@ -510,6 +509,7 @@ static int iproc_adc_probe(struct platform_device *pdev)
 	struct iproc_adc_priv *adc_priv;
 	struct iio_dev *indio_dev = NULL;
 	struct device *dev = &pdev->dev;
+	struct clk *adc_clk;
 	int ret;
 
 	indio_dev = devm_iio_device_alloc(dev, sizeof(*adc_priv));
@@ -529,10 +529,9 @@ static int iproc_adc_probe(struct platform_device *pdev)
 		return dev_err_probe(dev, PTR_ERR(adc_priv->regmap),
 				     "failed to get handle for tsc syscon\n");
 
-	adc_priv->adc_clk = devm_clk_get(dev, "tsc_clk");
-	if (IS_ERR(adc_priv->adc_clk))
-		return dev_err_probe(dev, PTR_ERR(adc_priv->adc_clk),
-				     "failed getting clock tsc_clk\n");
+	adc_clk = devm_clk_get_enabled(dev, "tsc_clk");
+	if (IS_ERR(adc_clk))
+		return dev_err_probe(dev, PTR_ERR(adc_clk), "failed to enable clock\n");
 
 	adc_priv->irqno = platform_get_irq(pdev, 0);
 	if (adc_priv->irqno < 0)
@@ -550,10 +549,6 @@ static int iproc_adc_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	ret = clk_prepare_enable(adc_priv->adc_clk);
-	if (ret)
-		return dev_err_probe(dev, ret, "failed to enable clock\n");
-
 	ret = iproc_adc_enable(indio_dev);
 	if (ret)
 		goto err_adc_enable;
@@ -575,19 +570,15 @@ static int iproc_adc_probe(struct platform_device *pdev)
 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



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 4/6] iio: adc: bcm_iproc_adc: use devm-managed ADC cleanup
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
                   ` (2 preceding siblings ...)
  2026-09-05  9:36 ` [PATCH v3 3/6] iio: adc: bcm_iproc_adc: use devm-managed clock mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  2026-09-05  9:36 ` [PATCH v3 5/6] iio: adc: bcm_iproc_adc: use devm-managed mutex initialization mdshahid03
  2026-09-05  9:36 ` [PATCH v3 6/6] iio: adc: bcm_iproc_adc: use devm_iio_device_register() mdshahid03
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Use devm_add_action_or_reset() to disable the ADC automatically when
the device is detached or probe fails.

This removes the manual ADC cleanup from the remove and error paths
and ties the ADC cleanup to the device lifetime.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index 3bbf814d4c8f..24fb41751e93 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -450,6 +450,13 @@ 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 int iproc_adc_read_raw(struct iio_dev *indio_dev,
 			  struct iio_chan_spec const *chan,
 			  int *val,
@@ -551,7 +558,11 @@ static int iproc_adc_probe(struct platform_device *pdev)
 
 	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;
@@ -560,17 +571,11 @@ 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:
-	return ret;
 }
 
 static void iproc_adc_remove(struct platform_device *pdev)
@@ -578,7 +583,6 @@ static void iproc_adc_remove(struct platform_device *pdev)
 	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
 
 	iio_device_unregister(indio_dev);
-	iproc_adc_disable(indio_dev);
 }
 
 static const struct of_device_id iproc_adc_of_match[] = {
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 5/6] iio: adc: bcm_iproc_adc: use devm-managed mutex initialization
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
                   ` (3 preceding siblings ...)
  2026-09-05  9:36 ` [PATCH v3 4/6] iio: adc: bcm_iproc_adc: use devm-managed ADC cleanup mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  2026-09-05  9:36 ` [PATCH v3 6/6] iio: adc: bcm_iproc_adc: use devm_iio_device_register() mdshahid03
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Use devm_mutex_init() to tie the mutex lifetime to the device and
improve debugging when CONFIG_DEBUG_MUTEXES is enabled.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index 24fb41751e93..f4676607682b 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -526,7 +526,9 @@ static int iproc_adc_probe(struct platform_device *pdev)
 	adc_priv = iio_priv(indio_dev);
 	platform_set_drvdata(pdev, indio_dev);
 
-	mutex_init(&adc_priv->mutex);
+	ret = devm_mutex_init(dev, &adc_priv->mutex);
+	if (ret)
+		return ret;
 
 	init_completion(&adc_priv->completion);
 
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 6/6] iio: adc: bcm_iproc_adc: use devm_iio_device_register()
  2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
                   ` (4 preceding siblings ...)
  2026-09-05  9:36 ` [PATCH v3 5/6] iio: adc: bcm_iproc_adc: use devm-managed mutex initialization mdshahid03
@ 2026-09-05  9:36 ` mdshahid03
  5 siblings, 0 replies; 7+ messages in thread
From: mdshahid03 @ 2026-09-05  9:36 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-iio,
	linux-arm-kernel, linux-kernel, Mohammad Shahid

From: Mohammad Shahid <mdshahid03@gmail.com>

Use devm_iio_device_register() to automatically unregister the IIO
device when the device is detached.

This removes the manual iio_device_unregister() call and makes the
iproc_adc_remove() callback unnecessary.

Signed-off-by: Mohammad Shahid <mdshahid03@gmail.com>
---
 drivers/iio/adc/bcm_iproc_adc.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/iio/adc/bcm_iproc_adc.c b/drivers/iio/adc/bcm_iproc_adc.c
index f4676607682b..6eae7596ac8d 100644
--- a/drivers/iio/adc/bcm_iproc_adc.c
+++ b/drivers/iio/adc/bcm_iproc_adc.c
@@ -524,7 +524,6 @@ static int iproc_adc_probe(struct platform_device *pdev)
 		return -ENOMEM;
 
 	adc_priv = iio_priv(indio_dev);
-	platform_set_drvdata(pdev, indio_dev);
 
 	ret = devm_mutex_init(dev, &adc_priv->mutex);
 	if (ret)
@@ -572,19 +571,8 @@ static int iproc_adc_probe(struct platform_device *pdev)
 	indio_dev->channels = iproc_adc_iio_channels;
 	indio_dev->num_channels = ARRAY_SIZE(iproc_adc_iio_channels);
 
-	ret = iio_device_register(indio_dev);
-	if (ret)
-		return dev_err_probe(dev, ret, "iio_device_register failed\n");
-
-	return 0;
-
-}
-
-static void iproc_adc_remove(struct platform_device *pdev)
-{
-	struct iio_dev *indio_dev = platform_get_drvdata(pdev);
+	return devm_iio_device_register(dev, indio_dev);
 
-	iio_device_unregister(indio_dev);
 }
 
 static const struct of_device_id iproc_adc_of_match[] = {
@@ -595,7 +583,6 @@ MODULE_DEVICE_TABLE(of, iproc_adc_of_match);
 
 static struct platform_driver iproc_adc_driver = {
 	.probe = iproc_adc_probe,
-	.remove = iproc_adc_remove,
 	.driver = {
 		.name = "iproc-static-adc",
 		.of_match_table = iproc_adc_of_match,
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-09-05  9:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-05  9:36 [PATCH v3 0/6] iio: adc: bcm_iproc_adc: convert to devm-managed APIs mdshahid03
2026-09-05  9:36 ` [PATCH v3 1/6] iio: adc: bcm_iproc_adc: sort headers alphabetically mdshahid03
2026-09-05  9:36 ` [PATCH v3 2/6] iio: adc: bcm_iproc_adc: fix include dependencies mdshahid03
2026-09-05  9:36 ` [PATCH v3 3/6] iio: adc: bcm_iproc_adc: use devm-managed clock mdshahid03
2026-09-05  9:36 ` [PATCH v3 4/6] iio: adc: bcm_iproc_adc: use devm-managed ADC cleanup mdshahid03
2026-09-05  9:36 ` [PATCH v3 5/6] iio: adc: bcm_iproc_adc: use devm-managed mutex initialization mdshahid03
2026-09-05  9:36 ` [PATCH v3 6/6] iio: adc: bcm_iproc_adc: use devm_iio_device_register() mdshahid03

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox