linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5
@ 2024-10-23 23:54 David Lechner
  2024-10-23 23:54 ` [PATCH 01/11] iio: dac: ad5380: use devm_regulator_get_enable_read_voltage() David Lechner
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Here comes another round of reducing boilerplate code by simplifying
getting reference voltages and dropping more driver remove callbacks.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
David Lechner (11):
      iio: dac: ad5380: use devm_regulator_get_enable_read_voltage()
      iio: dac: ad5380: drop driver remove callbacks
      iio: dac: ad5446: use devm_regulator_get_enable_read_voltage()
      iio: dac: ad5446: drop driver remove callbacks
      iio: dac: ad5504: use devm_regulator_get_enable_read_voltage()
      iio: dac: ad5504: drop driver remove callback
      iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage()
      iio: dac: ad5624r: drop driver remove callback
      iio: dac: ad5761: use devm_regulator_get_enable_read_voltage()
      iio: dac: ad5761: drop driver remove callback
      iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage()

 drivers/iio/dac/ad5380.c      |  85 +++++++-------------------------
 drivers/iio/dac/ad5446.c      |  77 +++++++----------------------
 drivers/iio/dac/ad5504.c      |  59 ++++++-----------------
 drivers/iio/dac/ad5624r.h     |   1 -
 drivers/iio/dac/ad5624r_spi.c |  71 +++++----------------------
 drivers/iio/dac/ad5761.c      | 109 +++++++++---------------------------------
 drivers/iio/dac/ad5770r.c     |  41 ++--------------
 7 files changed, 88 insertions(+), 355 deletions(-)
---
base-commit: 9090ececac9ff1e22fb7e042f3c886990a8fb090
change-id: 20240813-iio-regulator-refactor-round-5-3248993c93b0

Best regards,
-- 
David Lechner <dlechner@baylibre.com>


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

* [PATCH 01/11] iio: dac: ad5380: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 02/11] iio: dac: ad5380: drop driver remove callbacks David Lechner
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5380.c | 36 ++++++++++--------------------------
 1 file changed, 10 insertions(+), 26 deletions(-)

diff --git a/drivers/iio/dac/ad5380.c b/drivers/iio/dac/ad5380.c
index 2e3e33f92bc0..7d1d7053c29e 100644
--- a/drivers/iio/dac/ad5380.c
+++ b/drivers/iio/dac/ad5380.c
@@ -47,7 +47,6 @@ struct ad5380_chip_info {
  * struct ad5380_state - driver instance specific data
  * @regmap:		regmap instance used by the device
  * @chip_info:		chip model specific constants, available modes etc
- * @vref_reg:		vref supply regulator
  * @vref:		actual reference voltage used in uA
  * @pwr_down:		whether the chip is currently in power down mode
  * @lock:		lock to protect the data buffer during regmap ops
@@ -55,7 +54,6 @@ struct ad5380_chip_info {
 struct ad5380_state {
 	struct regmap			*regmap;
 	const struct ad5380_chip_info	*chip_info;
-	struct regulator		*vref_reg;
 	int				vref;
 	bool				pwr_down;
 	struct mutex			lock;
@@ -400,42 +398,32 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
 	if (st->chip_info->int_vref == 2500)
 		ctrl |= AD5380_CTRL_INT_VREF_2V5;
 
-	st->vref_reg = devm_regulator_get(dev, "vref");
-	if (!IS_ERR(st->vref_reg)) {
-		ret = regulator_enable(st->vref_reg);
-		if (ret) {
-			dev_err(dev, "Failed to enable vref regulators: %d\n",
-				ret);
-			goto error_free_reg;
-		}
-
-		ret = regulator_get_voltage(st->vref_reg);
-		if (ret < 0)
-			goto error_disable_reg;
-
-		st->vref = ret / 1000;
-	} else {
+	ret = devm_regulator_get_enable_read_voltage(dev, "vref");
+	if (ret < 0 && ret != -ENODEV) {
+		dev_err(dev, "Failed to get vref voltage: %d\n", ret);
+		goto error_free_reg;
+	}
+	if (ret == -ENODEV) {
 		st->vref = st->chip_info->int_vref;
 		ctrl |= AD5380_CTRL_INT_VREF_EN;
+	} else {
+		st->vref = ret / 1000;
 	}
 
 	ret = regmap_write(st->regmap, AD5380_REG_SF_CTRL, ctrl);
 	if (ret) {
 		dev_err(dev, "Failed to write to device: %d\n", ret);
-		goto error_disable_reg;
+		goto error_free_reg;
 	}
 
 	ret = iio_device_register(indio_dev);
 	if (ret) {
 		dev_err(dev, "Failed to register iio device: %d\n", ret);
-		goto error_disable_reg;
+		goto error_free_reg;
 	}
 
 	return 0;
 
-error_disable_reg:
-	if (!IS_ERR(st->vref_reg))
-		regulator_disable(st->vref_reg);
 error_free_reg:
 	kfree(indio_dev->channels);
 
@@ -445,14 +433,10 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
 static void ad5380_remove(struct device *dev)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct ad5380_state *st = iio_priv(indio_dev);
 
 	iio_device_unregister(indio_dev);
 
 	kfree(indio_dev->channels);
-
-	if (!IS_ERR(st->vref_reg))
-		regulator_disable(st->vref_reg);
 }
 
 static bool ad5380_reg_false(struct device *dev, unsigned int reg)

-- 
2.43.0


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

* [PATCH 02/11] iio: dac: ad5380: drop driver remove callbacks
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
  2024-10-23 23:54 ` [PATCH 01/11] iio: dac: ad5380: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 03/11] iio: dac: ad5446: use devm_regulator_get_enable_read_voltage() David Lechner
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Drop use of the driver remove callbacks in the ad5380 driver.

By making use of a few more devm_ helpers, we can avoid the need for
remove callbacks entirely.

Also make use of dev_err_probe() while at it.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5380.c | 61 +++++++++++-------------------------------------
 1 file changed, 13 insertions(+), 48 deletions(-)

diff --git a/drivers/iio/dac/ad5380.c b/drivers/iio/dac/ad5380.c
index 7d1d7053c29e..392a1c7aee03 100644
--- a/drivers/iio/dac/ad5380.c
+++ b/drivers/iio/dac/ad5380.c
@@ -339,14 +339,14 @@ static const struct ad5380_chip_info ad5380_chip_info_tbl[] = {
 	},
 };
 
-static int ad5380_alloc_channels(struct iio_dev *indio_dev)
+static int ad5380_alloc_channels(struct device *dev, struct iio_dev *indio_dev)
 {
 	struct ad5380_state *st = iio_priv(indio_dev);
 	struct iio_chan_spec *channels;
 	unsigned int i;
 
-	channels = kcalloc(st->chip_info->num_channels,
-			   sizeof(struct iio_chan_spec), GFP_KERNEL);
+	channels = devm_kcalloc(dev, st->chip_info->num_channels,
+				sizeof(struct iio_chan_spec), GFP_KERNEL);
 
 	if (!channels)
 		return -ENOMEM;
@@ -377,7 +377,6 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
 	}
 
 	st = iio_priv(indio_dev);
-	dev_set_drvdata(dev, indio_dev);
 
 	st->chip_info = &ad5380_chip_info_tbl[type];
 	st->regmap = regmap;
@@ -389,20 +388,16 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
 
 	mutex_init(&st->lock);
 
-	ret = ad5380_alloc_channels(indio_dev);
-	if (ret) {
-		dev_err(dev, "Failed to allocate channel spec: %d\n", ret);
-		return ret;
-	}
+	ret = ad5380_alloc_channels(dev, indio_dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to allocate channel spec\n");
 
 	if (st->chip_info->int_vref == 2500)
 		ctrl |= AD5380_CTRL_INT_VREF_2V5;
 
 	ret = devm_regulator_get_enable_read_voltage(dev, "vref");
-	if (ret < 0 && ret != -ENODEV) {
-		dev_err(dev, "Failed to get vref voltage: %d\n", ret);
-		goto error_free_reg;
-	}
+	if (ret < 0 && ret != -ENODEV)
+		return dev_err_probe(dev, ret, "Failed to get vref voltage\n");
 	if (ret == -ENODEV) {
 		st->vref = st->chip_info->int_vref;
 		ctrl |= AD5380_CTRL_INT_VREF_EN;
@@ -411,32 +406,14 @@ static int ad5380_probe(struct device *dev, struct regmap *regmap,
 	}
 
 	ret = regmap_write(st->regmap, AD5380_REG_SF_CTRL, ctrl);
-	if (ret) {
-		dev_err(dev, "Failed to write to device: %d\n", ret);
-		goto error_free_reg;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to write to device\n");
 
-	ret = iio_device_register(indio_dev);
-	if (ret) {
-		dev_err(dev, "Failed to register iio device: %d\n", ret);
-		goto error_free_reg;
-	}
+	ret = devm_iio_device_register(dev, indio_dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to register iio device\n");
 
 	return 0;
-
-error_free_reg:
-	kfree(indio_dev->channels);
-
-	return ret;
-}
-
-static void ad5380_remove(struct device *dev)
-{
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-
-	iio_device_unregister(indio_dev);
-
-	kfree(indio_dev->channels);
 }
 
 static bool ad5380_reg_false(struct device *dev, unsigned int reg)
@@ -470,11 +447,6 @@ static int ad5380_spi_probe(struct spi_device *spi)
 	return ad5380_probe(&spi->dev, regmap, id->driver_data, id->name);
 }
 
-static void ad5380_spi_remove(struct spi_device *spi)
-{
-	ad5380_remove(&spi->dev);
-}
-
 static const struct spi_device_id ad5380_spi_ids[] = {
 	{ "ad5380-3", ID_AD5380_3 },
 	{ "ad5380-5", ID_AD5380_5 },
@@ -501,7 +473,6 @@ static struct spi_driver ad5380_spi_driver = {
 		   .name = "ad5380",
 	},
 	.probe = ad5380_spi_probe,
-	.remove = ad5380_spi_remove,
 	.id_table = ad5380_spi_ids,
 };
 
@@ -543,11 +514,6 @@ static int ad5380_i2c_probe(struct i2c_client *i2c)
 	return ad5380_probe(&i2c->dev, regmap, id->driver_data, id->name);
 }
 
-static void ad5380_i2c_remove(struct i2c_client *i2c)
-{
-	ad5380_remove(&i2c->dev);
-}
-
 static const struct i2c_device_id ad5380_i2c_ids[] = {
 	{ "ad5380-3", ID_AD5380_3 },
 	{ "ad5380-5", ID_AD5380_5 },
@@ -574,7 +540,6 @@ static struct i2c_driver ad5380_i2c_driver = {
 		   .name = "ad5380",
 	},
 	.probe = ad5380_i2c_probe,
-	.remove = ad5380_i2c_remove,
 	.id_table = ad5380_i2c_ids,
 };
 

-- 
2.43.0


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

* [PATCH 03/11] iio: dac: ad5446: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
  2024-10-23 23:54 ` [PATCH 01/11] iio: dac: ad5380: use devm_regulator_get_enable_read_voltage() David Lechner
  2024-10-23 23:54 ` [PATCH 02/11] iio: dac: ad5380: drop driver remove callbacks David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 04/11] iio: dac: ad5446: drop driver remove callbacks David Lechner
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Also simplify == NULL check while we are touching that line.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5446.c | 57 ++++++++++++++----------------------------------
 1 file changed, 16 insertions(+), 41 deletions(-)

diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c
index 708629efc157..574de97c1c08 100644
--- a/drivers/iio/dac/ad5446.c
+++ b/drivers/iio/dac/ad5446.c
@@ -32,7 +32,6 @@
  * struct ad5446_state - driver instance specific data
  * @dev:		this device
  * @chip_info:		chip model specific constants, available modes etc
- * @reg:		supply regulator
  * @vref_mv:		actual reference voltage used
  * @cached_val:		store/retrieve values during power down
  * @pwr_down_mode:	power down mode (1k, 100k or tristate)
@@ -43,7 +42,6 @@
 struct ad5446_state {
 	struct device		*dev;
 	const struct ad5446_chip_info	*chip_info;
-	struct regulator		*reg;
 	unsigned short			vref_mv;
 	unsigned			cached_val;
 	unsigned			pwr_down_mode;
@@ -226,32 +224,16 @@ static int ad5446_probe(struct device *dev, const char *name,
 {
 	struct ad5446_state *st;
 	struct iio_dev *indio_dev;
-	struct regulator *reg;
-	int ret, voltage_uv = 0;
-
-	reg = devm_regulator_get(dev, "vcc");
-	if (!IS_ERR(reg)) {
-		ret = regulator_enable(reg);
-		if (ret)
-			return ret;
-
-		ret = regulator_get_voltage(reg);
-		if (ret < 0)
-			goto error_disable_reg;
-
-		voltage_uv = ret;
-	}
+	int ret;
 
 	indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
-	if (indio_dev == NULL) {
-		ret = -ENOMEM;
-		goto error_disable_reg;
-	}
+	if (!indio_dev)
+		return -ENOMEM;
+
 	st = iio_priv(indio_dev);
 	st->chip_info = chip_info;
 
 	dev_set_drvdata(dev, indio_dev);
-	st->reg = reg;
 	st->dev = dev;
 
 	indio_dev->name = name;
@@ -264,33 +246,26 @@ static int ad5446_probe(struct device *dev, const char *name,
 
 	st->pwr_down_mode = MODE_PWRDWN_1k;
 
-	if (st->chip_info->int_vref_mv)
-		st->vref_mv = st->chip_info->int_vref_mv;
-	else if (voltage_uv)
-		st->vref_mv = voltage_uv / 1000;
-	else
-		dev_warn(dev, "reference voltage unspecified\n");
-
-	ret = iio_device_register(indio_dev);
-	if (ret)
-		goto error_disable_reg;
-
-	return 0;
+	ret = devm_regulator_get_enable_read_voltage(dev, "vcc");
+	if (ret < 0 && ret != -ENODEV)
+		return ret;
+	if (ret == -ENODEV) {
+		if (chip_info->int_vref_mv)
+			st->vref_mv = chip_info->int_vref_mv;
+		else
+			dev_warn(dev, "reference voltage unspecified\n");
+	} else {
+		st->vref_mv = ret / 1000;
+	}
 
-error_disable_reg:
-	if (!IS_ERR(reg))
-		regulator_disable(reg);
-	return ret;
+	return iio_device_register(indio_dev);
 }
 
 static void ad5446_remove(struct device *dev)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct ad5446_state *st = iio_priv(indio_dev);
 
 	iio_device_unregister(indio_dev);
-	if (!IS_ERR(st->reg))
-		regulator_disable(st->reg);
 }
 
 #if IS_ENABLED(CONFIG_SPI_MASTER)

-- 
2.43.0


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

* [PATCH 04/11] iio: dac: ad5446: drop driver remove callbacks
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (2 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 03/11] iio: dac: ad5446: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 05/11] iio: dac: ad5504: use devm_regulator_get_enable_read_voltage() David Lechner
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Drop use of the driver remove callbacks in the ad5446 driver.

By making use of a a devm_ helper, we can avoid the need for the remove
callbacks entirely.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5446.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/drivers/iio/dac/ad5446.c b/drivers/iio/dac/ad5446.c
index 574de97c1c08..6ad99f97eed5 100644
--- a/drivers/iio/dac/ad5446.c
+++ b/drivers/iio/dac/ad5446.c
@@ -233,7 +233,6 @@ static int ad5446_probe(struct device *dev, const char *name,
 	st = iio_priv(indio_dev);
 	st->chip_info = chip_info;
 
-	dev_set_drvdata(dev, indio_dev);
 	st->dev = dev;
 
 	indio_dev->name = name;
@@ -258,14 +257,7 @@ static int ad5446_probe(struct device *dev, const char *name,
 		st->vref_mv = ret / 1000;
 	}
 
-	return iio_device_register(indio_dev);
-}
-
-static void ad5446_remove(struct device *dev)
-{
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-
-	iio_device_unregister(indio_dev);
+	return devm_iio_device_register(dev, indio_dev);
 }
 
 #if IS_ENABLED(CONFIG_SPI_MASTER)
@@ -466,18 +458,12 @@ static int ad5446_spi_probe(struct spi_device *spi)
 		&ad5446_spi_chip_info[id->driver_data]);
 }
 
-static void ad5446_spi_remove(struct spi_device *spi)
-{
-	ad5446_remove(&spi->dev);
-}
-
 static struct spi_driver ad5446_spi_driver = {
 	.driver = {
 		.name	= "ad5446",
 		.of_match_table = ad5446_of_ids,
 	},
 	.probe		= ad5446_spi_probe,
-	.remove		= ad5446_spi_remove,
 	.id_table	= ad5446_spi_ids,
 };
 
@@ -550,11 +536,6 @@ static int ad5446_i2c_probe(struct i2c_client *i2c)
 		&ad5446_i2c_chip_info[id->driver_data]);
 }
 
-static void ad5446_i2c_remove(struct i2c_client *i2c)
-{
-	ad5446_remove(&i2c->dev);
-}
-
 static const struct i2c_device_id ad5446_i2c_ids[] = {
 	{"ad5301", ID_AD5602},
 	{"ad5311", ID_AD5612},
@@ -571,7 +552,6 @@ static struct i2c_driver ad5446_i2c_driver = {
 		   .name = "ad5446",
 	},
 	.probe = ad5446_i2c_probe,
-	.remove = ad5446_i2c_remove,
 	.id_table = ad5446_i2c_ids,
 };
 

-- 
2.43.0


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

* [PATCH 05/11] iio: dac: ad5504: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (3 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 04/11] iio: dac: ad5446: drop driver remove callbacks David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 06/11] iio: dac: ad5504: drop driver remove callback David Lechner
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5504.c | 52 ++++++++++++++----------------------------------
 1 file changed, 15 insertions(+), 37 deletions(-)

diff --git a/drivers/iio/dac/ad5504.c b/drivers/iio/dac/ad5504.c
index 305cd58cd257..f1717955ddcf 100644
--- a/drivers/iio/dac/ad5504.c
+++ b/drivers/iio/dac/ad5504.c
@@ -273,35 +273,27 @@ static int ad5504_probe(struct spi_device *spi)
 	const struct ad5504_platform_data *pdata = dev_get_platdata(&spi->dev);
 	struct iio_dev *indio_dev;
 	struct ad5504_state *st;
-	struct regulator *reg;
-	int ret, voltage_uv = 0;
+	int ret;
 
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
 	if (!indio_dev)
 		return -ENOMEM;
-	reg = devm_regulator_get(&spi->dev, "vcc");
-	if (!IS_ERR(reg)) {
-		ret = regulator_enable(reg);
-		if (ret)
-			return ret;
-
-		ret = regulator_get_voltage(reg);
-		if (ret < 0)
-			goto error_disable_reg;
-
-		voltage_uv = ret;
-	}
 
 	spi_set_drvdata(spi, indio_dev);
 	st = iio_priv(indio_dev);
-	if (voltage_uv)
-		st->vref_mv = voltage_uv / 1000;
-	else if (pdata)
-		st->vref_mv = pdata->vref_mv;
-	else
-		dev_warn(&spi->dev, "reference voltage unspecified\n");
 
-	st->reg = reg;
+	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vcc");
+	if (ret < 0 && ret != -ENODEV)
+		return ret;
+	if (ret == -ENODEV) {
+		if (pdata->vref_mv)
+			st->vref_mv = pdata->vref_mv;
+		else
+			dev_warn(&spi->dev, "reference voltage unspecified\n");
+	} else {
+		st->vref_mv = ret / 1000;
+	}
+
 	st->spi = spi;
 	indio_dev->name = spi_get_device_id(st->spi)->name;
 	indio_dev->info = &ad5504_info;
@@ -320,31 +312,17 @@ static int ad5504_probe(struct spi_device *spi)
 					   spi_get_device_id(st->spi)->name,
 					   indio_dev);
 		if (ret)
-			goto error_disable_reg;
+			return ret;
 	}
 
-	ret = iio_device_register(indio_dev);
-	if (ret)
-		goto error_disable_reg;
-
-	return 0;
-
-error_disable_reg:
-	if (!IS_ERR(reg))
-		regulator_disable(reg);
-
-	return ret;
+	return iio_device_register(indio_dev);
 }
 
 static void ad5504_remove(struct spi_device *spi)
 {
 	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-	struct ad5504_state *st = iio_priv(indio_dev);
 
 	iio_device_unregister(indio_dev);
-
-	if (!IS_ERR(st->reg))
-		regulator_disable(st->reg);
 }
 
 static const struct spi_device_id ad5504_id[] = {

-- 
2.43.0


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

* [PATCH 06/11] iio: dac: ad5504: drop driver remove callback
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (4 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 05/11] iio: dac: ad5504: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 07/11] iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage() David Lechner
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Drop use of the driver remove callback in the ad5504 driver.

By making use of a a devm_ helper, we can avoid the need for the remove
callback entirely.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5504.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/iio/dac/ad5504.c b/drivers/iio/dac/ad5504.c
index f1717955ddcf..ff0765c8af47 100644
--- a/drivers/iio/dac/ad5504.c
+++ b/drivers/iio/dac/ad5504.c
@@ -279,7 +279,6 @@ static int ad5504_probe(struct spi_device *spi)
 	if (!indio_dev)
 		return -ENOMEM;
 
-	spi_set_drvdata(spi, indio_dev);
 	st = iio_priv(indio_dev);
 
 	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vcc");
@@ -315,14 +314,7 @@ static int ad5504_probe(struct spi_device *spi)
 			return ret;
 	}
 
-	return iio_device_register(indio_dev);
-}
-
-static void ad5504_remove(struct spi_device *spi)
-{
-	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-
-	iio_device_unregister(indio_dev);
+	return devm_iio_device_register(&spi->dev, indio_dev);
 }
 
 static const struct spi_device_id ad5504_id[] = {
@@ -337,7 +329,6 @@ static struct spi_driver ad5504_driver = {
 		   .name = "ad5504",
 		   },
 	.probe = ad5504_probe,
-	.remove = ad5504_remove,
 	.id_table = ad5504_id,
 };
 module_spi_driver(ad5504_driver);

-- 
2.43.0


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

* [PATCH 07/11] iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (5 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 06/11] iio: dac: ad5504: drop driver remove callback David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 08/11] iio: dac: ad5624r: drop driver remove callback David Lechner
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5624r.h     |  1 -
 drivers/iio/dac/ad5624r_spi.c | 62 +++++++++----------------------------------
 2 files changed, 13 insertions(+), 50 deletions(-)

diff --git a/drivers/iio/dac/ad5624r.h b/drivers/iio/dac/ad5624r.h
index 13964f3a22a4..14a439b06eb6 100644
--- a/drivers/iio/dac/ad5624r.h
+++ b/drivers/iio/dac/ad5624r.h
@@ -54,7 +54,6 @@ struct ad5624r_chip_info {
 struct ad5624r_state {
 	struct spi_device		*us;
 	const struct ad5624r_chip_info	*chip_info;
-	struct regulator		*reg;
 	unsigned short			vref_mv;
 	unsigned			pwr_down_mask;
 	unsigned			pwr_down_mode;
diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
index 9304d0499bae..5a952b45f488 100644
--- a/drivers/iio/dac/ad5624r_spi.c
+++ b/drivers/iio/dac/ad5624r_spi.c
@@ -223,50 +223,27 @@ static int ad5624r_probe(struct spi_device *spi)
 {
 	struct ad5624r_state *st;
 	struct iio_dev *indio_dev;
-	int ret, voltage_uv = 0;
+	bool external_vref;
+	int ret;
 
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
 	if (!indio_dev)
 		return -ENOMEM;
 	st = iio_priv(indio_dev);
-	st->reg = devm_regulator_get_optional(&spi->dev, "vref");
-	if (!IS_ERR(st->reg)) {
-		ret = regulator_enable(st->reg);
-		if (ret)
-			return ret;
-
-		ret = regulator_get_voltage(st->reg);
-		if (ret < 0)
-			goto error_disable_reg;
-
-		voltage_uv = ret;
-	} else {
-		if (PTR_ERR(st->reg) != -ENODEV)
-			return PTR_ERR(st->reg);
+	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
+	if (ret == -ENODEV)
 		/* Backwards compatibility. This naming is not correct */
-		st->reg = devm_regulator_get_optional(&spi->dev, "vcc");
-		if (!IS_ERR(st->reg)) {
-			ret = regulator_enable(st->reg);
-			if (ret)
-				return ret;
-
-			ret = regulator_get_voltage(st->reg);
-			if (ret < 0)
-				goto error_disable_reg;
-
-			voltage_uv = ret;
-		}
-	}
+		ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vcc");
+	if (ret < 0 && ret != -ENODEV)
+		return ret;
+
+	external_vref = ret != -ENODEV;
+	st->vref_mv = external_vref ? ret / 1000 : st->chip_info->int_vref_mv;
 
 	spi_set_drvdata(spi, indio_dev);
 	st->chip_info =
 		&ad5624r_chip_info_tbl[spi_get_device_id(spi)->driver_data];
 
-	if (voltage_uv)
-		st->vref_mv = voltage_uv / 1000;
-	else
-		st->vref_mv = st->chip_info->int_vref_mv;
-
 	st->us = spi;
 
 	indio_dev->name = spi_get_device_id(spi)->name;
@@ -276,31 +253,18 @@ static int ad5624r_probe(struct spi_device *spi)
 	indio_dev->num_channels = AD5624R_DAC_CHANNELS;
 
 	ret = ad5624r_spi_write(spi, AD5624R_CMD_INTERNAL_REFER_SETUP, 0,
-				!!voltage_uv, 16);
+				external_vref, 16);
 	if (ret)
-		goto error_disable_reg;
-
-	ret = iio_device_register(indio_dev);
-	if (ret)
-		goto error_disable_reg;
-
-	return 0;
-
-error_disable_reg:
-	if (!IS_ERR(st->reg))
-		regulator_disable(st->reg);
+		return ret;
 
-	return ret;
+	return iio_device_register(indio_dev);
 }
 
 static void ad5624r_remove(struct spi_device *spi)
 {
 	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-	struct ad5624r_state *st = iio_priv(indio_dev);
 
 	iio_device_unregister(indio_dev);
-	if (!IS_ERR(st->reg))
-		regulator_disable(st->reg);
 }
 
 static const struct spi_device_id ad5624r_id[] = {

-- 
2.43.0


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

* [PATCH 08/11] iio: dac: ad5624r: drop driver remove callback
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (6 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 07/11] iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 09/11] iio: dac: ad5761: use devm_regulator_get_enable_read_voltage() David Lechner
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Drop use of the driver remove callback in the ad5624r_spi driver.

By making use of a a devm_ helper, we can avoid the need for the remove
callback entirely.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5624r_spi.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/iio/dac/ad5624r_spi.c b/drivers/iio/dac/ad5624r_spi.c
index 5a952b45f488..2fd38ac8f698 100644
--- a/drivers/iio/dac/ad5624r_spi.c
+++ b/drivers/iio/dac/ad5624r_spi.c
@@ -240,7 +240,6 @@ static int ad5624r_probe(struct spi_device *spi)
 	external_vref = ret != -ENODEV;
 	st->vref_mv = external_vref ? ret / 1000 : st->chip_info->int_vref_mv;
 
-	spi_set_drvdata(spi, indio_dev);
 	st->chip_info =
 		&ad5624r_chip_info_tbl[spi_get_device_id(spi)->driver_data];
 
@@ -257,14 +256,7 @@ static int ad5624r_probe(struct spi_device *spi)
 	if (ret)
 		return ret;
 
-	return iio_device_register(indio_dev);
-}
-
-static void ad5624r_remove(struct spi_device *spi)
-{
-	struct iio_dev *indio_dev = spi_get_drvdata(spi);
-
-	iio_device_unregister(indio_dev);
+	return devm_iio_device_register(&spi->dev, indio_dev);
 }
 
 static const struct spi_device_id ad5624r_id[] = {
@@ -283,7 +275,6 @@ static struct spi_driver ad5624r_driver = {
 		   .name = "ad5624r",
 		   },
 	.probe = ad5624r_probe,
-	.remove = ad5624r_remove,
 	.id_table = ad5624r_id,
 };
 module_spi_driver(ad5624r_driver);

-- 
2.43.0


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

* [PATCH 09/11] iio: dac: ad5761: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (7 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 08/11] iio: dac: ad5624r: drop driver remove callback David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 10/11] iio: dac: ad5761: drop driver remove callback David Lechner
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Error returns are updated to use dev_err_probe().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5761.c | 100 +++++++++++------------------------------------
 1 file changed, 23 insertions(+), 77 deletions(-)

diff --git a/drivers/iio/dac/ad5761.c b/drivers/iio/dac/ad5761.c
index 6aa1a068adb0..55e33cf5806e 100644
--- a/drivers/iio/dac/ad5761.c
+++ b/drivers/iio/dac/ad5761.c
@@ -53,7 +53,6 @@ enum ad5761_supported_device_ids {
 /**
  * struct ad5761_state - driver instance specific data
  * @spi:		spi_device
- * @vref_reg:		reference voltage regulator
  * @use_intref:		true when the internal voltage reference is used
  * @vref:		actual voltage reference in mVolts
  * @range:		output range mode used
@@ -62,7 +61,6 @@ enum ad5761_supported_device_ids {
  */
 struct ad5761_state {
 	struct spi_device		*spi;
-	struct regulator		*vref_reg;
 	struct mutex			lock;
 
 	bool use_intref;
@@ -287,63 +285,6 @@ static const struct ad5761_chip_info ad5761_chip_infos[] = {
 	},
 };
 
-static int ad5761_get_vref(struct ad5761_state *st,
-			   const struct ad5761_chip_info *chip_info)
-{
-	int ret;
-
-	st->vref_reg = devm_regulator_get_optional(&st->spi->dev, "vref");
-	if (PTR_ERR(st->vref_reg) == -ENODEV) {
-		/* Use Internal regulator */
-		if (!chip_info->int_vref) {
-			dev_err(&st->spi->dev,
-				"Voltage reference not found\n");
-			return -EIO;
-		}
-
-		st->use_intref = true;
-		st->vref = chip_info->int_vref;
-		return 0;
-	}
-
-	if (IS_ERR(st->vref_reg)) {
-		dev_err(&st->spi->dev,
-			"Error getting voltage reference regulator\n");
-		return PTR_ERR(st->vref_reg);
-	}
-
-	ret = regulator_enable(st->vref_reg);
-	if (ret) {
-		dev_err(&st->spi->dev,
-			 "Failed to enable voltage reference\n");
-		return ret;
-	}
-
-	ret = regulator_get_voltage(st->vref_reg);
-	if (ret < 0) {
-		dev_err(&st->spi->dev,
-			 "Failed to get voltage reference value\n");
-		goto disable_regulator_vref;
-	}
-
-	if (ret < 2000000 || ret > 3000000) {
-		dev_warn(&st->spi->dev,
-			 "Invalid external voltage ref. value %d uV\n", ret);
-		ret = -EIO;
-		goto disable_regulator_vref;
-	}
-
-	st->vref = ret / 1000;
-	st->use_intref = false;
-
-	return 0;
-
-disable_regulator_vref:
-	regulator_disable(st->vref_reg);
-	st->vref_reg = NULL;
-	return ret;
-}
-
 static int ad5761_probe(struct spi_device *spi)
 {
 	struct iio_dev *iio_dev;
@@ -363,9 +304,27 @@ static int ad5761_probe(struct spi_device *spi)
 	st->spi = spi;
 	spi_set_drvdata(spi, iio_dev);
 
-	ret = ad5761_get_vref(st, chip_info);
-	if (ret)
-		return ret;
+	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
+	if (ret < 0 && ret != -ENODEV)
+		return dev_err_probe(&spi->dev, ret,
+			"Failed to get voltage reference value\n");
+	if (ret == -ENODEV) {
+		/* Use Internal regulator */
+		if (!chip_info->int_vref)
+			return dev_err_probe(&spi->dev, -EIO,
+				"Voltage reference not found\n");
+
+		st->use_intref = true;
+		st->vref = chip_info->int_vref;
+	} else {
+		if (ret < 2000000 || ret > 3000000)
+			return dev_err_probe(&spi->dev, -EIO,
+				 "Invalid external voltage ref. value %d uV\n",
+				 ret);
+
+		st->use_intref = false;
+		st->vref = ret / 1000;
+	}
 
 	if (pdata)
 		voltage_range = pdata->voltage_range;
@@ -374,35 +333,22 @@ static int ad5761_probe(struct spi_device *spi)
 
 	ret = ad5761_spi_set_range(st, voltage_range);
 	if (ret)
-		goto disable_regulator_err;
+		return ret;
 
 	iio_dev->info = &ad5761_info;
 	iio_dev->modes = INDIO_DIRECT_MODE;
 	iio_dev->channels = &chip_info->channel;
 	iio_dev->num_channels = 1;
 	iio_dev->name = spi_get_device_id(st->spi)->name;
-	ret = iio_device_register(iio_dev);
-	if (ret)
-		goto disable_regulator_err;
 
-	return 0;
-
-disable_regulator_err:
-	if (!IS_ERR_OR_NULL(st->vref_reg))
-		regulator_disable(st->vref_reg);
-
-	return ret;
+	return iio_device_register(iio_dev);
 }
 
 static void ad5761_remove(struct spi_device *spi)
 {
 	struct iio_dev *iio_dev = spi_get_drvdata(spi);
-	struct ad5761_state *st = iio_priv(iio_dev);
 
 	iio_device_unregister(iio_dev);
-
-	if (!IS_ERR_OR_NULL(st->vref_reg))
-		regulator_disable(st->vref_reg);
 }
 
 static const struct spi_device_id ad5761_id[] = {

-- 
2.43.0


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

* [PATCH 10/11] iio: dac: ad5761: drop driver remove callback
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (8 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 09/11] iio: dac: ad5761: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-23 23:54 ` [PATCH 11/11] iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage() David Lechner
  2024-10-26 14:55 ` [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 Jonathan Cameron
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Drop use of the driver remove callback in the ad5761 driver.

By making use of a a devm_ helper, we can avoid the need for the remove
callback entirely.

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5761.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/iio/dac/ad5761.c b/drivers/iio/dac/ad5761.c
index 55e33cf5806e..0aa5ba7f4654 100644
--- a/drivers/iio/dac/ad5761.c
+++ b/drivers/iio/dac/ad5761.c
@@ -302,7 +302,6 @@ static int ad5761_probe(struct spi_device *spi)
 	st = iio_priv(iio_dev);
 
 	st->spi = spi;
-	spi_set_drvdata(spi, iio_dev);
 
 	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
 	if (ret < 0 && ret != -ENODEV)
@@ -341,14 +340,7 @@ static int ad5761_probe(struct spi_device *spi)
 	iio_dev->num_channels = 1;
 	iio_dev->name = spi_get_device_id(st->spi)->name;
 
-	return iio_device_register(iio_dev);
-}
-
-static void ad5761_remove(struct spi_device *spi)
-{
-	struct iio_dev *iio_dev = spi_get_drvdata(spi);
-
-	iio_device_unregister(iio_dev);
+	return devm_iio_device_register(&spi->dev, iio_dev);
 }
 
 static const struct spi_device_id ad5761_id[] = {
@@ -365,7 +357,6 @@ static struct spi_driver ad5761_driver = {
 		   .name = "ad5761",
 		   },
 	.probe = ad5761_probe,
-	.remove = ad5761_remove,
 	.id_table = ad5761_id,
 };
 module_spi_driver(ad5761_driver);

-- 
2.43.0


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

* [PATCH 11/11] iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage()
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (9 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 10/11] iio: dac: ad5761: drop driver remove callback David Lechner
@ 2024-10-23 23:54 ` David Lechner
  2024-10-26 14:55 ` [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 Jonathan Cameron
  11 siblings, 0 replies; 13+ messages in thread
From: David Lechner @ 2024-10-23 23:54 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel, David Lechner

Simplify the code by using devm_regulator_get_enable_read_voltage().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/dac/ad5770r.c | 41 +++++------------------------------------
 1 file changed, 5 insertions(+), 36 deletions(-)

diff --git a/drivers/iio/dac/ad5770r.c b/drivers/iio/dac/ad5770r.c
index 7d7f5110d66a..25cf11d0471b 100644
--- a/drivers/iio/dac/ad5770r.c
+++ b/drivers/iio/dac/ad5770r.c
@@ -122,7 +122,6 @@ struct ad5770r_out_range {
  * struct ad5770r_state - driver instance specific data
  * @spi:		spi_device
  * @regmap:		regmap
- * @vref_reg:		fixed regulator for reference configuration
  * @gpio_reset:		gpio descriptor
  * @output_mode:	array contains channels output ranges
  * @vref:		reference value
@@ -134,7 +133,6 @@ struct ad5770r_out_range {
 struct ad5770r_state {
 	struct spi_device		*spi;
 	struct regmap			*regmap;
-	struct regulator		*vref_reg;
 	struct gpio_desc		*gpio_reset;
 	struct ad5770r_out_range	output_mode[AD5770R_MAX_CHANNELS];
 	int				vref;
@@ -591,13 +589,6 @@ static int ad5770r_init(struct ad5770r_state *st)
 	return ret;
 }
 
-static void ad5770r_disable_regulator(void *data)
-{
-	struct ad5770r_state *st = data;
-
-	regulator_disable(st->vref_reg);
-}
-
 static int ad5770r_probe(struct spi_device *spi)
 {
 	struct ad5770r_state *st;
@@ -622,34 +613,12 @@ static int ad5770r_probe(struct spi_device *spi)
 	}
 	st->regmap = regmap;
 
-	st->vref_reg = devm_regulator_get_optional(&spi->dev, "vref");
-	if (!IS_ERR(st->vref_reg)) {
-		ret = regulator_enable(st->vref_reg);
-		if (ret) {
-			dev_err(&spi->dev,
-				"Failed to enable vref regulators: %d\n", ret);
-			return ret;
-		}
+	ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vref");
+	if (ret < 0 && ret != -ENODEV)
+		return dev_err_probe(&spi->dev, ret, "Failed to get vref voltage\n");
 
-		ret = devm_add_action_or_reset(&spi->dev,
-					       ad5770r_disable_regulator,
-					       st);
-		if (ret < 0)
-			return ret;
-
-		ret = regulator_get_voltage(st->vref_reg);
-		if (ret < 0)
-			return ret;
-
-		st->vref = ret / 1000;
-	} else {
-		if (PTR_ERR(st->vref_reg) == -ENODEV) {
-			st->vref = AD5770R_LOW_VREF_mV;
-			st->internal_ref = true;
-		} else {
-			return PTR_ERR(st->vref_reg);
-		}
-	}
+	st->internal_ref = ret == -ENODEV;
+	st->vref = st->internal_ref ? AD5770R_LOW_VREF_mV : ret / 1000;
 
 	indio_dev->name = spi_get_device_id(spi)->name;
 	indio_dev->info = &ad5770r_info;

-- 
2.43.0


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

* Re: [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5
  2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
                   ` (10 preceding siblings ...)
  2024-10-23 23:54 ` [PATCH 11/11] iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-10-26 14:55 ` Jonathan Cameron
  11 siblings, 0 replies; 13+ messages in thread
From: Jonathan Cameron @ 2024-10-26 14:55 UTC (permalink / raw)
  To: David Lechner
  Cc: Michael Hennerich, Liam Girdwood, Mark Brown, linux-iio,
	linux-kernel

On Wed, 23 Oct 2024 18:54:04 -0500
David Lechner <dlechner@baylibre.com> wrote:

> Here comes another round of reducing boilerplate code by simplifying
> getting reference voltages and dropping more driver remove callbacks.
> 
Nice series. Applied to the togreg branch of iio.git and pushed out as testing.

Thanks,

Jonathan

> Signed-off-by: David Lechner <dlechner@baylibre.com>
> ---
> David Lechner (11):
>       iio: dac: ad5380: use devm_regulator_get_enable_read_voltage()
>       iio: dac: ad5380: drop driver remove callbacks
>       iio: dac: ad5446: use devm_regulator_get_enable_read_voltage()
>       iio: dac: ad5446: drop driver remove callbacks
>       iio: dac: ad5504: use devm_regulator_get_enable_read_voltage()
>       iio: dac: ad5504: drop driver remove callback
>       iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage()
>       iio: dac: ad5624r: drop driver remove callback
>       iio: dac: ad5761: use devm_regulator_get_enable_read_voltage()
>       iio: dac: ad5761: drop driver remove callback
>       iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage()
> 
>  drivers/iio/dac/ad5380.c      |  85 +++++++-------------------------
>  drivers/iio/dac/ad5446.c      |  77 +++++++----------------------
>  drivers/iio/dac/ad5504.c      |  59 ++++++-----------------
>  drivers/iio/dac/ad5624r.h     |   1 -
>  drivers/iio/dac/ad5624r_spi.c |  71 +++++----------------------
>  drivers/iio/dac/ad5761.c      | 109 +++++++++---------------------------------
>  drivers/iio/dac/ad5770r.c     |  41 ++--------------
>  7 files changed, 88 insertions(+), 355 deletions(-)
> ---
> base-commit: 9090ececac9ff1e22fb7e042f3c886990a8fb090
> change-id: 20240813-iio-regulator-refactor-round-5-3248993c93b0
> 
> Best regards,


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

end of thread, other threads:[~2024-10-26 14:55 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-23 23:54 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 David Lechner
2024-10-23 23:54 ` [PATCH 01/11] iio: dac: ad5380: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-23 23:54 ` [PATCH 02/11] iio: dac: ad5380: drop driver remove callbacks David Lechner
2024-10-23 23:54 ` [PATCH 03/11] iio: dac: ad5446: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-23 23:54 ` [PATCH 04/11] iio: dac: ad5446: drop driver remove callbacks David Lechner
2024-10-23 23:54 ` [PATCH 05/11] iio: dac: ad5504: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-23 23:54 ` [PATCH 06/11] iio: dac: ad5504: drop driver remove callback David Lechner
2024-10-23 23:54 ` [PATCH 07/11] iio: dac: ad5624r: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-23 23:54 ` [PATCH 08/11] iio: dac: ad5624r: drop driver remove callback David Lechner
2024-10-23 23:54 ` [PATCH 09/11] iio: dac: ad5761: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-23 23:54 ` [PATCH 10/11] iio: dac: ad5761: drop driver remove callback David Lechner
2024-10-23 23:54 ` [PATCH 11/11] iio: dac: ad5770r: use devm_regulator_get_enable_read_voltage() David Lechner
2024-10-26 14:55 ` [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 5 Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).