* [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6
@ 2024-11-20 21:33 David Lechner
2024-11-20 21:33 ` [PATCH 01/11] iio: dac: ad5624r: fix struct name in doc comment David Lechner
` (10 more replies)
0 siblings, 11 replies; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
This series includes the last of the low-hanging fruit for converting
to devm_regulator_get_enable_read_voltage().
By low-hanging fruit, I mean that these are the drivers that read the
voltage of a regulator in the probe function. If you grep for this, you
will still find a few that do this, but in those cases, they usually
have power management where we need a handle to the regulator to power
things down and back up in suspend/resume. So we can't take advantage of
this helper function in those cases.
There is another class of drivers that could potentially make use of
this helper function that I haven't addressed. There are many drivers
that call regulator_get_voltage() in the IIO_CHAN_INFO_SCALE case of
the read_raw() callback. In most of these cases we could move the call
to regulator_get_voltage() to the probe function and store the value in
the private data structure instead. For those, we would need to be a bit
careful though to make sure the the intention wasn't to handle a change
in voltage during operation.
As a bonus, this series also includes a few other minor cleanups to fix
some copy/paste typos and remove some driver remove() callbacks.
---
David Lechner (11):
iio: dac: ad5624r: fix struct name in doc comment
iio: dac: ad5686: fix struct name in doc comment
iio: dac: ad5686: use devm_regulator_get_enable_read_voltage()
iio: dac: ad5686: drop driver remove function
iio: dac: ad7293: use devm_regulator_get_enable_read_voltage()
iio: dac: ad8801: use devm_regulator_get_enable_read_voltage()
iio: dac ad8801: drop driver remove function
iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage()
iio: dac ltc2632: drop driver remove function
iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage()
iio: dac: max5821: use devm_regulator_get_enable_read_voltage()
drivers/iio/dac/ad5624r.h | 2 +-
drivers/iio/dac/ad5686-spi.c | 6 ----
drivers/iio/dac/ad5686.c | 62 ++++++++-------------------------
drivers/iio/dac/ad5686.h | 6 +---
drivers/iio/dac/ad5696-i2c.c | 6 ----
drivers/iio/dac/ad7293.c | 66 ++++++------------------------------
drivers/iio/dac/ad8801.c | 81 +++++++-------------------------------------
drivers/iio/dac/ltc2632.c | 69 +++++++++++--------------------------
drivers/iio/dac/ltc2688.c | 44 ++++++------------------
drivers/iio/dac/max5821.c | 36 +++-----------------
10 files changed, 74 insertions(+), 304 deletions(-)
---
base-commit: 414c97c966b69e4a6ea7b32970fa166b2f9b9ef0
change-id: 20241120-iio-regulator-cleanup-round-6-78b05be06718
Best regards,
--
David Lechner <dlechner@baylibre.com>
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 01/11] iio: dac: ad5624r: fix struct name in doc comment
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-20 21:33 ` [PATCH 02/11] iio: dac: ad5686: " David Lechner
` (9 subsequent siblings)
10 siblings, 0 replies; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Fix a copy/paste mistake in the struct ad5624r_state doc comment.
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad5624r.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/dac/ad5624r.h b/drivers/iio/dac/ad5624r.h
index 14a439b06eb6..8c2ab6ae855b 100644
--- a/drivers/iio/dac/ad5624r.h
+++ b/drivers/iio/dac/ad5624r.h
@@ -41,7 +41,7 @@ struct ad5624r_chip_info {
};
/**
- * struct ad5446_state - driver instance specific data
+ * struct ad5624r_state - driver instance specific data
* @indio_dev: the industrial I/O device
* @us: spi_device
* @chip_info: chip model specific constants, available modes etc
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 02/11] iio: dac: ad5686: fix struct name in doc comment
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
2024-11-20 21:33 ` [PATCH 01/11] iio: dac: ad5624r: fix struct name in doc comment David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-20 21:33 ` [PATCH 03/11] iio: dac: ad5686: use devm_regulator_get_enable_read_voltage() David Lechner
` (8 subsequent siblings)
10 siblings, 0 replies; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Fix a copy/paste mistake in the struct ad5686_state doc comment.
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad5686.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/dac/ad5686.h b/drivers/iio/dac/ad5686.h
index 760f852911df..5b150f344fda 100644
--- a/drivers/iio/dac/ad5686.h
+++ b/drivers/iio/dac/ad5686.h
@@ -115,7 +115,7 @@ struct ad5686_chip_info {
};
/**
- * struct ad5446_state - driver instance specific data
+ * struct ad5686_state - driver instance specific data
* @spi: spi_device
* @chip_info: chip model specific constants, available modes etc
* @reg: supply regulator
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 03/11] iio: dac: ad5686: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
2024-11-20 21:33 ` [PATCH 01/11] iio: dac: ad5624r: fix struct name in doc comment David Lechner
2024-11-20 21:33 ` [PATCH 02/11] iio: dac: ad5686: " David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-20 21:33 ` [PATCH 04/11] iio: dac: ad5686: drop driver remove function David Lechner
` (7 subsequent siblings)
10 siblings, 0 replies; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Simplify the code by using devm_regulator_get_enable_read_voltage().
There is a small change in behavior. Before, all errors from
devm_regulator_get_optional() were ignored and assumed to mean that
the external reference supply was absent. Now, only -ENODEV is checked
and other errors will cause a failure to probe. So now, this will
catch errors, like using the wrong data type for the devicetree
property.
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad5686.c | 53 ++++++++++++++----------------------------------
drivers/iio/dac/ad5686.h | 2 --
2 files changed, 15 insertions(+), 40 deletions(-)
diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
index 57cc0f0eedc6..a8a38879fc40 100644
--- a/drivers/iio/dac/ad5686.c
+++ b/drivers/iio/dac/ad5686.c
@@ -455,8 +455,9 @@ int ad5686_probe(struct device *dev,
struct ad5686_state *st;
struct iio_dev *indio_dev;
unsigned int val, ref_bit_msk;
+ bool has_external_vref;
u8 cmd;
- int ret, i, voltage_uv = 0;
+ int ret, i;
indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
if (indio_dev == NULL)
@@ -469,25 +470,14 @@ int ad5686_probe(struct device *dev,
st->write = write;
st->read = read;
- st->reg = devm_regulator_get_optional(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;
- }
-
st->chip_info = &ad5686_chip_info_tbl[chip_type];
- if (voltage_uv)
- st->vref_mv = voltage_uv / 1000;
- else
- st->vref_mv = st->chip_info->int_vref_mv;
+ ret = devm_regulator_get_enable_read_voltage(dev, "vcc");
+ if (ret < 0 && ret != -ENODEV)
+ return ret;
+
+ has_external_vref = ret != -ENODEV;
+ st->vref_mv = has_external_vref ? ret / 1000 : st->chip_info->int_vref_mv;
/* Set all the power down mode for all channels to 1K pulldown */
for (i = 0; i < st->chip_info->num_channels; i++)
@@ -505,12 +495,12 @@ int ad5686_probe(struct device *dev,
case AD5310_REGMAP:
cmd = AD5686_CMD_CONTROL_REG;
ref_bit_msk = AD5310_REF_BIT_MSK;
- st->use_internal_vref = !voltage_uv;
+ st->use_internal_vref = !has_external_vref;
break;
case AD5683_REGMAP:
cmd = AD5686_CMD_CONTROL_REG;
ref_bit_msk = AD5683_REF_BIT_MSK;
- st->use_internal_vref = !voltage_uv;
+ st->use_internal_vref = !has_external_vref;
break;
case AD5686_REGMAP:
cmd = AD5686_CMD_INTERNAL_REFER_SETUP;
@@ -519,40 +509,27 @@ int ad5686_probe(struct device *dev,
case AD5693_REGMAP:
cmd = AD5686_CMD_CONTROL_REG;
ref_bit_msk = AD5693_REF_BIT_MSK;
- st->use_internal_vref = !voltage_uv;
+ st->use_internal_vref = !has_external_vref;
break;
default:
- ret = -EINVAL;
- goto error_disable_reg;
+ return -EINVAL;
}
- val = (voltage_uv | ref_bit_msk);
+ val = (has_external_vref | ref_bit_msk);
ret = st->write(st, cmd, 0, !!val);
if (ret)
- goto error_disable_reg;
-
- ret = iio_device_register(indio_dev);
- if (ret)
- goto error_disable_reg;
-
- return 0;
+ return ret;
-error_disable_reg:
- if (!IS_ERR(st->reg))
- regulator_disable(st->reg);
- return ret;
+ return iio_device_register(indio_dev);
}
EXPORT_SYMBOL_NS_GPL(ad5686_probe, IIO_AD5686);
void ad5686_remove(struct device *dev)
{
struct iio_dev *indio_dev = dev_get_drvdata(dev);
- struct ad5686_state *st = iio_priv(indio_dev);
iio_device_unregister(indio_dev);
- if (!IS_ERR(st->reg))
- regulator_disable(st->reg);
}
EXPORT_SYMBOL_NS_GPL(ad5686_remove, IIO_AD5686);
diff --git a/drivers/iio/dac/ad5686.h b/drivers/iio/dac/ad5686.h
index 5b150f344fda..62eb309711af 100644
--- a/drivers/iio/dac/ad5686.h
+++ b/drivers/iio/dac/ad5686.h
@@ -118,7 +118,6 @@ struct ad5686_chip_info {
* struct ad5686_state - driver instance specific data
* @spi: spi_device
* @chip_info: chip model specific constants, available modes etc
- * @reg: supply regulator
* @vref_mv: actual reference voltage used
* @pwr_down_mask: power down mask
* @pwr_down_mode: current power down mode
@@ -130,7 +129,6 @@ struct ad5686_chip_info {
struct ad5686_state {
struct device *dev;
const struct ad5686_chip_info *chip_info;
- struct regulator *reg;
unsigned short vref_mv;
unsigned int pwr_down_mask;
unsigned int pwr_down_mode;
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 04/11] iio: dac: ad5686: drop driver remove function
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (2 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 03/11] iio: dac: ad5686: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:45 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage() David Lechner
` (6 subsequent siblings)
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Remove driver remove callback for ad5686 SPI and I2C drivers.
By making use of devm_iio_device_register(), we no longer need a driver
remove callback. Also since this was the last user of dev_get_drvdata(),
we can drop the call to dev_set_drvdata().
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad5686-spi.c | 6 ------
drivers/iio/dac/ad5686.c | 11 +----------
drivers/iio/dac/ad5686.h | 2 --
drivers/iio/dac/ad5696-i2c.c | 6 ------
4 files changed, 1 insertion(+), 24 deletions(-)
diff --git a/drivers/iio/dac/ad5686-spi.c b/drivers/iio/dac/ad5686-spi.c
index 8ba2ea70451a..79cfae7a1048 100644
--- a/drivers/iio/dac/ad5686-spi.c
+++ b/drivers/iio/dac/ad5686-spi.c
@@ -95,11 +95,6 @@ static int ad5686_spi_probe(struct spi_device *spi)
ad5686_spi_write, ad5686_spi_read);
}
-static void ad5686_spi_remove(struct spi_device *spi)
-{
- ad5686_remove(&spi->dev);
-}
-
static const struct spi_device_id ad5686_spi_id[] = {
{"ad5310r", ID_AD5310R},
{"ad5672r", ID_AD5672R},
@@ -126,7 +121,6 @@ static struct spi_driver ad5686_spi_driver = {
.name = "ad5686",
},
.probe = ad5686_spi_probe,
- .remove = ad5686_spi_remove,
.id_table = ad5686_spi_id,
};
diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
index a8a38879fc40..b848b076851c 100644
--- a/drivers/iio/dac/ad5686.c
+++ b/drivers/iio/dac/ad5686.c
@@ -464,7 +464,6 @@ int ad5686_probe(struct device *dev,
return -ENOMEM;
st = iio_priv(indio_dev);
- dev_set_drvdata(dev, indio_dev);
st->dev = dev;
st->write = write;
@@ -521,18 +520,10 @@ int ad5686_probe(struct device *dev,
if (ret)
return ret;
- return iio_device_register(indio_dev);
+ return devm_iio_device_register(dev, indio_dev);
}
EXPORT_SYMBOL_NS_GPL(ad5686_probe, IIO_AD5686);
-void ad5686_remove(struct device *dev)
-{
- struct iio_dev *indio_dev = dev_get_drvdata(dev);
-
- iio_device_unregister(indio_dev);
-}
-EXPORT_SYMBOL_NS_GPL(ad5686_remove, IIO_AD5686);
-
MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/dac/ad5686.h b/drivers/iio/dac/ad5686.h
index 62eb309711af..e7d36bae3e59 100644
--- a/drivers/iio/dac/ad5686.h
+++ b/drivers/iio/dac/ad5686.h
@@ -155,7 +155,5 @@ int ad5686_probe(struct device *dev,
const char *name, ad5686_write_func write,
ad5686_read_func read);
-void ad5686_remove(struct device *dev);
-
#endif /* __DRIVERS_IIO_DAC_AD5686_H__ */
diff --git a/drivers/iio/dac/ad5696-i2c.c b/drivers/iio/dac/ad5696-i2c.c
index 81541f755a3e..a56a7a410111 100644
--- a/drivers/iio/dac/ad5696-i2c.c
+++ b/drivers/iio/dac/ad5696-i2c.c
@@ -65,11 +65,6 @@ static int ad5686_i2c_probe(struct i2c_client *i2c)
ad5686_i2c_write, ad5686_i2c_read);
}
-static void ad5686_i2c_remove(struct i2c_client *i2c)
-{
- ad5686_remove(&i2c->dev);
-}
-
static const struct i2c_device_id ad5686_i2c_id[] = {
{"ad5311r", ID_AD5311R},
{"ad5337r", ID_AD5337R},
@@ -116,7 +111,6 @@ static struct i2c_driver ad5686_i2c_driver = {
.of_match_table = ad5686_of_match,
},
.probe = ad5686_i2c_probe,
- .remove = ad5686_i2c_remove,
.id_table = ad5686_i2c_id,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (3 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 04/11] iio: dac: ad5686: drop driver remove function David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:50 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 06/11] iio: dac: ad8801: " David Lechner
` (5 subsequent siblings)
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Simplify the code by using devm_regulator_get_enable_read_voltage().
A small change in behavior here due to moving the enable to the same
place as the get: supplies now are enabled before the reset GPIO is
toggled (which is arguably the correct order).
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad7293.c | 66 ++++++++----------------------------------------
1 file changed, 11 insertions(+), 55 deletions(-)
diff --git a/drivers/iio/dac/ad7293.c b/drivers/iio/dac/ad7293.c
index 1d4032670482..58f7926ec3f3 100644
--- a/drivers/iio/dac/ad7293.c
+++ b/drivers/iio/dac/ad7293.c
@@ -141,8 +141,6 @@ struct ad7293_state {
/* Protect against concurrent accesses to the device, page selection and data content */
struct mutex lock;
struct gpio_desc *gpio_reset;
- struct regulator *reg_avdd;
- struct regulator *reg_vdrive;
u8 page_select;
u8 data[3] __aligned(IIO_DMA_MINALIGN);
};
@@ -777,6 +775,7 @@ static int ad7293_reset(struct ad7293_state *st)
static int ad7293_properties_parse(struct ad7293_state *st)
{
struct spi_device *spi = st->spi;
+ int ret;
st->gpio_reset = devm_gpiod_get_optional(&st->spi->dev, "reset",
GPIOD_OUT_HIGH);
@@ -784,24 +783,23 @@ static int ad7293_properties_parse(struct ad7293_state *st)
return dev_err_probe(&spi->dev, PTR_ERR(st->gpio_reset),
"failed to get the reset GPIO\n");
- st->reg_avdd = devm_regulator_get(&spi->dev, "avdd");
- if (IS_ERR(st->reg_avdd))
- return dev_err_probe(&spi->dev, PTR_ERR(st->reg_avdd),
+ ret = devm_regulator_get_enable_read_voltage(&spi->dev, "avdd");
+ if (ret < 0)
+ return dev_err_probe(&spi->dev, ret,
"failed to get the AVDD voltage\n");
+ if (ret > 5500000 || ret < 4500000)
+ return -EINVAL;
- st->reg_vdrive = devm_regulator_get(&spi->dev, "vdrive");
- if (IS_ERR(st->reg_vdrive))
- return dev_err_probe(&spi->dev, PTR_ERR(st->reg_vdrive),
+ ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vdrive");
+ if (ret < 0)
+ return dev_err_probe(&spi->dev, ret,
"failed to get the VDRIVE voltage\n");
+ if (ret > 5500000 || ret < 1700000)
+ return -EINVAL;
return 0;
}
-static void ad7293_reg_disable(void *data)
-{
- regulator_disable(data);
-}
-
static int ad7293_init(struct ad7293_state *st)
{
int ret;
@@ -816,48 +814,6 @@ static int ad7293_init(struct ad7293_state *st)
if (ret)
return ret;
- ret = regulator_enable(st->reg_avdd);
- if (ret) {
- dev_err(&spi->dev,
- "Failed to enable specified AVDD Voltage!\n");
- return ret;
- }
-
- ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable,
- st->reg_avdd);
- if (ret)
- return ret;
-
- ret = regulator_enable(st->reg_vdrive);
- if (ret) {
- dev_err(&spi->dev,
- "Failed to enable specified VDRIVE Voltage!\n");
- return ret;
- }
-
- ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable,
- st->reg_vdrive);
- if (ret)
- return ret;
-
- ret = regulator_get_voltage(st->reg_avdd);
- if (ret < 0) {
- dev_err(&spi->dev, "Failed to read avdd regulator: %d\n", ret);
- return ret;
- }
-
- if (ret > 5500000 || ret < 4500000)
- return -EINVAL;
-
- ret = regulator_get_voltage(st->reg_vdrive);
- if (ret < 0) {
- dev_err(&spi->dev,
- "Failed to read vdrive regulator: %d\n", ret);
- return ret;
- }
- if (ret > 5500000 || ret < 1700000)
- return -EINVAL;
-
/* Check Chip ID */
ret = __ad7293_spi_read(st, AD7293_REG_DEVICE_ID, &chip_id);
if (ret)
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 06/11] iio: dac: ad8801: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (4 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:51 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 07/11] iio: dac ad8801: drop driver remove function David Lechner
` (4 subsequent siblings)
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, 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/ad8801.c | 70 +++++++++---------------------------------------
1 file changed, 12 insertions(+), 58 deletions(-)
diff --git a/drivers/iio/dac/ad8801.c b/drivers/iio/dac/ad8801.c
index 919e8c880697..bd857754fc11 100644
--- a/drivers/iio/dac/ad8801.c
+++ b/drivers/iio/dac/ad8801.c
@@ -23,8 +23,6 @@ struct ad8801_state {
unsigned char dac_cache[8]; /* Value write on each channel */
unsigned int vrefh_mv;
unsigned int vrefl_mv;
- struct regulator *vrefh_reg;
- struct regulator *vrefl_reg;
__be16 data __aligned(IIO_DMA_MINALIGN);
};
@@ -122,51 +120,20 @@ static int ad8801_probe(struct spi_device *spi)
state->spi = spi;
id = spi_get_device_id(spi);
- state->vrefh_reg = devm_regulator_get(&spi->dev, "vrefh");
- if (IS_ERR(state->vrefh_reg))
- return dev_err_probe(&spi->dev, PTR_ERR(state->vrefh_reg),
- "Vrefh regulator not specified\n");
+ ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vrefh");
+ if (ret < 0)
+ return dev_err_probe(&spi->dev, ret,
+ "failed to get Vrefh voltage\n");
- ret = regulator_enable(state->vrefh_reg);
- if (ret) {
- dev_err(&spi->dev, "Failed to enable vrefh regulator: %d\n",
- ret);
- return ret;
- }
-
- ret = regulator_get_voltage(state->vrefh_reg);
- if (ret < 0) {
- dev_err(&spi->dev, "Failed to read vrefh regulator: %d\n",
- ret);
- goto error_disable_vrefh_reg;
- }
state->vrefh_mv = ret / 1000;
if (id->driver_data == ID_AD8803) {
- state->vrefl_reg = devm_regulator_get(&spi->dev, "vrefl");
- if (IS_ERR(state->vrefl_reg)) {
- ret = dev_err_probe(&spi->dev, PTR_ERR(state->vrefl_reg),
- "Vrefl regulator not specified\n");
- goto error_disable_vrefh_reg;
- }
-
- ret = regulator_enable(state->vrefl_reg);
- if (ret) {
- dev_err(&spi->dev, "Failed to enable vrefl regulator: %d\n",
- ret);
- goto error_disable_vrefh_reg;
- }
-
- ret = regulator_get_voltage(state->vrefl_reg);
- if (ret < 0) {
- dev_err(&spi->dev, "Failed to read vrefl regulator: %d\n",
- ret);
- goto error_disable_vrefl_reg;
- }
+ ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vrefl");
+ if (ret < 0)
+ return dev_err_probe(&spi->dev, ret,
+ "failed to get Vrefl voltage\n");
+
state->vrefl_mv = ret / 1000;
- } else {
- state->vrefl_mv = 0;
- state->vrefl_reg = NULL;
}
spi_set_drvdata(spi, indio_dev);
@@ -177,31 +144,18 @@ static int ad8801_probe(struct spi_device *spi)
indio_dev->name = id->name;
ret = iio_device_register(indio_dev);
- if (ret) {
- dev_err(&spi->dev, "Failed to register iio device: %d\n",
- ret);
- goto error_disable_vrefl_reg;
- }
+ if (ret)
+ return dev_err_probe(&spi->dev, ret,
+ "Failed to register iio device\n");
return 0;
-
-error_disable_vrefl_reg:
- if (state->vrefl_reg)
- regulator_disable(state->vrefl_reg);
-error_disable_vrefh_reg:
- regulator_disable(state->vrefh_reg);
- return ret;
}
static void ad8801_remove(struct spi_device *spi)
{
struct iio_dev *indio_dev = spi_get_drvdata(spi);
- struct ad8801_state *state = iio_priv(indio_dev);
iio_device_unregister(indio_dev);
- if (state->vrefl_reg)
- regulator_disable(state->vrefl_reg);
- regulator_disable(state->vrefh_reg);
}
static const struct spi_device_id ad8801_ids[] = {
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 07/11] iio: dac ad8801: drop driver remove function
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (5 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 06/11] iio: dac: ad8801: " David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:52 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage() David Lechner
` (3 subsequent siblings)
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Remove driver remove callback in the ad8801 driver.
By making use of devm_iio_device_register(), we no longer need a driver
remove callback. Also since this was the last user of spi_get_drvdata(),
we can drop the call to spi_set_drvdata().
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ad8801.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/iio/dac/ad8801.c b/drivers/iio/dac/ad8801.c
index bd857754fc11..8a362fae2eca 100644
--- a/drivers/iio/dac/ad8801.c
+++ b/drivers/iio/dac/ad8801.c
@@ -136,14 +136,13 @@ static int ad8801_probe(struct spi_device *spi)
state->vrefl_mv = ret / 1000;
}
- spi_set_drvdata(spi, indio_dev);
indio_dev->info = &ad8801_info;
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->channels = ad8801_channels;
indio_dev->num_channels = ARRAY_SIZE(ad8801_channels);
indio_dev->name = id->name;
- ret = iio_device_register(indio_dev);
+ ret = devm_iio_device_register(&spi->dev, indio_dev);
if (ret)
return dev_err_probe(&spi->dev, ret,
"Failed to register iio device\n");
@@ -151,13 +150,6 @@ static int ad8801_probe(struct spi_device *spi)
return 0;
}
-static void ad8801_remove(struct spi_device *spi)
-{
- struct iio_dev *indio_dev = spi_get_drvdata(spi);
-
- iio_device_unregister(indio_dev);
-}
-
static const struct spi_device_id ad8801_ids[] = {
{"ad8801", ID_AD8801},
{"ad8803", ID_AD8803},
@@ -170,7 +162,6 @@ static struct spi_driver ad8801_driver = {
.name = "ad8801",
},
.probe = ad8801_probe,
- .remove = ad8801_remove,
.id_table = ad8801_ids,
};
module_spi_driver(ad8801_driver);
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (6 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 07/11] iio: dac ad8801: drop driver remove function David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:53 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 09/11] iio: dac ltc2632: drop driver remove function David Lechner
` (2 subsequent siblings)
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Simplify the code by using devm_regulator_get_enable_read_voltage().
Some use of dev_err() is replaced with dev_err_probe() to simplify
things even more since we are refactoring these lines anyway.
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ltc2632.c | 58 +++++++++++++++--------------------------------
1 file changed, 18 insertions(+), 40 deletions(-)
diff --git a/drivers/iio/dac/ltc2632.c b/drivers/iio/dac/ltc2632.c
index a4fb2509c950..28f8347eb687 100644
--- a/drivers/iio/dac/ltc2632.c
+++ b/drivers/iio/dac/ltc2632.c
@@ -41,13 +41,11 @@ struct ltc2632_chip_info {
* @spi_dev: pointer to the spi_device struct
* @powerdown_cache_mask: used to show current channel powerdown state
* @vref_mv: used reference voltage (internal or external)
- * @vref_reg: regulator for the reference voltage
*/
struct ltc2632_state {
struct spi_device *spi_dev;
unsigned int powerdown_cache_mask;
int vref_mv;
- struct regulator *vref_reg;
};
enum ltc2632_supported_device_ids {
@@ -310,6 +308,7 @@ static int ltc2632_probe(struct spi_device *spi)
struct ltc2632_state *st;
struct iio_dev *indio_dev;
struct ltc2632_chip_info *chip_info;
+ bool has_external_vref;
int ret;
indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
@@ -324,43 +323,26 @@ static int ltc2632_probe(struct spi_device *spi)
chip_info = (struct ltc2632_chip_info *)
spi_get_device_id(spi)->driver_data;
- st->vref_reg = devm_regulator_get_optional(&spi->dev, "vref");
- if (PTR_ERR(st->vref_reg) == -ENODEV) {
- /* use internal reference voltage */
- st->vref_reg = NULL;
- st->vref_mv = chip_info->vref_mv;
+ 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 regulator voltage\n");
- ret = ltc2632_spi_write(spi, LTC2632_CMD_INTERNAL_REFER,
- 0, 0, 0);
- if (ret) {
- dev_err(&spi->dev,
- "Set internal reference command failed, %d\n",
- ret);
- return ret;
- }
- } else if (IS_ERR(st->vref_reg)) {
- dev_err(&spi->dev,
- "Error getting voltage reference regulator\n");
- return PTR_ERR(st->vref_reg);
- } else {
- /* use external reference voltage */
- ret = regulator_enable(st->vref_reg);
- if (ret) {
- dev_err(&spi->dev,
- "enable reference regulator failed, %d\n",
- ret);
- return ret;
- }
- st->vref_mv = regulator_get_voltage(st->vref_reg) / 1000;
+ has_external_vref = ret != -ENODEV;
+ st->vref_mv = has_external_vref ? ret / 1000 : chip_info->vref_mv;
+ if (has_external_vref) {
ret = ltc2632_spi_write(spi, LTC2632_CMD_EXTERNAL_REFER,
- 0, 0, 0);
- if (ret) {
- dev_err(&spi->dev,
- "Set external reference command failed, %d\n",
- ret);
- return ret;
- }
+ 0, 0, 0);
+ if (ret)
+ return dev_err_probe(&spi->dev, ret,
+ "Set external reference command failed\n");
+ } else {
+ ret = ltc2632_spi_write(spi, LTC2632_CMD_INTERNAL_REFER,
+ 0, 0, 0);
+ if (ret)
+ return dev_err_probe(&spi->dev, ret,
+ "Set internal reference command failed\n");
}
indio_dev->name = fwnode_get_name(dev_fwnode(&spi->dev)) ?: spi_get_device_id(spi)->name;
@@ -375,12 +357,8 @@ static int ltc2632_probe(struct spi_device *spi)
static void ltc2632_remove(struct spi_device *spi)
{
struct iio_dev *indio_dev = spi_get_drvdata(spi);
- struct ltc2632_state *st = iio_priv(indio_dev);
iio_device_unregister(indio_dev);
-
- if (st->vref_reg)
- regulator_disable(st->vref_reg);
}
static const struct spi_device_id ltc2632_id[] = {
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 09/11] iio: dac ltc2632: drop driver remove function
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (7 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:54 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage() David Lechner
2024-11-20 21:33 ` [PATCH 11/11] iio: dac: max5821: " David Lechner
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel, David Lechner
Remove driver remove callback for the ltc2632 driver.
By making use of devm_iio_device_register(), we no longer need a driver
remove callback. Also since this was the last user of spi_get_drvdata(),
we can drop the call to spi_set_drvdata().
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
drivers/iio/dac/ltc2632.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/iio/dac/ltc2632.c b/drivers/iio/dac/ltc2632.c
index 28f8347eb687..999348836d87 100644
--- a/drivers/iio/dac/ltc2632.c
+++ b/drivers/iio/dac/ltc2632.c
@@ -317,7 +317,6 @@ static int ltc2632_probe(struct spi_device *spi)
st = iio_priv(indio_dev);
- spi_set_drvdata(spi, indio_dev);
st->spi_dev = spi;
chip_info = (struct ltc2632_chip_info *)
@@ -351,14 +350,7 @@ static int ltc2632_probe(struct spi_device *spi)
indio_dev->channels = chip_info->channels;
indio_dev->num_channels = chip_info->num_channels;
- return iio_device_register(indio_dev);
-}
-
-static void ltc2632_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 ltc2632_id[] = {
@@ -450,7 +442,6 @@ static struct spi_driver ltc2632_driver = {
.of_match_table = ltc2632_of_match,
},
.probe = ltc2632_probe,
- .remove = ltc2632_remove,
.id_table = ltc2632_id,
};
module_spi_driver(ltc2632_driver);
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (8 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 09/11] iio: dac ltc2632: drop driver remove function David Lechner
@ 2024-11-20 21:33 ` David Lechner
2024-11-23 15:55 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 11/11] iio: dac: max5821: " David Lechner
10 siblings, 1 reply; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, 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/ltc2688.c | 44 ++++++++++----------------------------------
1 file changed, 10 insertions(+), 34 deletions(-)
diff --git a/drivers/iio/dac/ltc2688.c b/drivers/iio/dac/ltc2688.c
index 376dca163c91..bdc857c7fa6d 100644
--- a/drivers/iio/dac/ltc2688.c
+++ b/drivers/iio/dac/ltc2688.c
@@ -842,7 +842,7 @@ static int ltc2688_channel_config(struct ltc2688_state *st)
return 0;
}
-static int ltc2688_setup(struct ltc2688_state *st, struct regulator *vref)
+static int ltc2688_setup(struct ltc2688_state *st, bool has_external_vref)
{
struct device *dev = &st->spi->dev;
struct gpio_desc *gpio;
@@ -881,18 +881,13 @@ static int ltc2688_setup(struct ltc2688_state *st, struct regulator *vref)
if (ret)
return ret;
- if (!vref)
+ if (!has_external_vref)
return 0;
return regmap_set_bits(st->regmap, LTC2688_CMD_CONFIG,
LTC2688_CONFIG_EXT_REF);
}
-static void ltc2688_disable_regulator(void *regulator)
-{
- regulator_disable(regulator);
-}
-
static bool ltc2688_reg_readable(struct device *dev, unsigned int reg)
{
switch (reg) {
@@ -947,8 +942,8 @@ static int ltc2688_probe(struct spi_device *spi)
static const char * const regulators[] = { "vcc", "iovcc" };
struct ltc2688_state *st;
struct iio_dev *indio_dev;
- struct regulator *vref_reg;
struct device *dev = &spi->dev;
+ bool has_external_vref;
int ret;
indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
@@ -973,34 +968,15 @@ static int ltc2688_probe(struct spi_device *spi)
if (ret)
return dev_err_probe(dev, ret, "Failed to enable regulators\n");
- vref_reg = devm_regulator_get_optional(dev, "vref");
- if (IS_ERR(vref_reg)) {
- if (PTR_ERR(vref_reg) != -ENODEV)
- return dev_err_probe(dev, PTR_ERR(vref_reg),
- "Failed to get vref regulator");
-
- vref_reg = NULL;
- /* internal reference */
- st->vref = 4096;
- } else {
- ret = regulator_enable(vref_reg);
- if (ret)
- return dev_err_probe(dev, ret,
- "Failed to enable vref regulators\n");
-
- ret = devm_add_action_or_reset(dev, ltc2688_disable_regulator,
- vref_reg);
- if (ret)
- return ret;
-
- ret = regulator_get_voltage(vref_reg);
- if (ret < 0)
- return dev_err_probe(dev, ret, "Failed to get vref\n");
+ ret = devm_regulator_get_enable_read_voltage(dev, "vref");
+ if (ret < 0 && ret != -ENODEV)
+ return dev_err_probe(dev, ret,
+ "Failed to get vref regulator voltage\n");
- st->vref = ret / 1000;
- }
+ has_external_vref = ret != -ENODEV;
+ st->vref = has_external_vref ? ret / 1000 : 0;
- ret = ltc2688_setup(st, vref_reg);
+ ret = ltc2688_setup(st, has_external_vref);
if (ret)
return ret;
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 11/11] iio: dac: max5821: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
` (9 preceding siblings ...)
2024-11-20 21:33 ` [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-20 21:33 ` David Lechner
10 siblings, 0 replies; 19+ messages in thread
From: David Lechner @ 2024-11-20 21:33 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, 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/max5821.c | 36 ++++--------------------------------
1 file changed, 4 insertions(+), 32 deletions(-)
diff --git a/drivers/iio/dac/max5821.c b/drivers/iio/dac/max5821.c
index 18ba3eaaad75..b062a18be5e7 100644
--- a/drivers/iio/dac/max5821.c
+++ b/drivers/iio/dac/max5821.c
@@ -32,7 +32,6 @@ enum max5821_device_ids {
struct max5821_data {
struct i2c_client *client;
- struct regulator *vref_reg;
unsigned short vref_mv;
bool powerdown[MAX5821_MAX_DAC_CHANNELS];
u8 powerdown_mode[MAX5821_MAX_DAC_CHANNELS];
@@ -295,11 +294,6 @@ static const struct iio_info max5821_info = {
.write_raw = max5821_write_raw,
};
-static void max5821_regulator_disable(void *reg)
-{
- regulator_disable(reg);
-}
-
static int max5821_probe(struct i2c_client *client)
{
const struct i2c_device_id *id = i2c_client_get_device_id(client);
@@ -321,32 +315,10 @@ static int max5821_probe(struct i2c_client *client)
data->powerdown_mode[tmp] = MAX5821_100KOHM_TO_GND;
}
- data->vref_reg = devm_regulator_get(&client->dev, "vref");
- if (IS_ERR(data->vref_reg))
- return dev_err_probe(&client->dev, PTR_ERR(data->vref_reg),
- "Failed to get vref regulator\n");
-
- ret = regulator_enable(data->vref_reg);
- if (ret) {
- dev_err(&client->dev,
- "Failed to enable vref regulator: %d\n", ret);
- return ret;
- }
-
- ret = devm_add_action_or_reset(&client->dev, max5821_regulator_disable,
- data->vref_reg);
- if (ret) {
- dev_err(&client->dev,
- "Failed to add action to managed regulator: %d\n", ret);
- return ret;
- }
-
- ret = regulator_get_voltage(data->vref_reg);
- if (ret < 0) {
- dev_err(&client->dev,
- "Failed to get voltage on regulator: %d\n", ret);
- return ret;
- }
+ ret = devm_regulator_get_enable_read_voltage(&client->dev, "vref");
+ if (ret)
+ return dev_err_probe(&client->dev, ret,
+ "Failed to get vref regulator voltage\n");
data->vref_mv = ret / 1000;
--
2.43.0
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 04/11] iio: dac: ad5686: drop driver remove function
2024-11-20 21:33 ` [PATCH 04/11] iio: dac: ad5686: drop driver remove function David Lechner
@ 2024-11-23 15:45 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:45 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:27 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Remove driver remove callback for ad5686 SPI and I2C drivers.
>
> By making use of devm_iio_device_register(), we no longer need a driver
> remove callback. Also since this was the last user of dev_get_drvdata(),
> we can drop the call to dev_set_drvdata().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied 1-4
> ---
> drivers/iio/dac/ad5686-spi.c | 6 ------
> drivers/iio/dac/ad5686.c | 11 +----------
> drivers/iio/dac/ad5686.h | 2 --
> drivers/iio/dac/ad5696-i2c.c | 6 ------
> 4 files changed, 1 insertion(+), 24 deletions(-)
>
> diff --git a/drivers/iio/dac/ad5686-spi.c b/drivers/iio/dac/ad5686-spi.c
> index 8ba2ea70451a..79cfae7a1048 100644
> --- a/drivers/iio/dac/ad5686-spi.c
> +++ b/drivers/iio/dac/ad5686-spi.c
> @@ -95,11 +95,6 @@ static int ad5686_spi_probe(struct spi_device *spi)
> ad5686_spi_write, ad5686_spi_read);
> }
>
> -static void ad5686_spi_remove(struct spi_device *spi)
> -{
> - ad5686_remove(&spi->dev);
> -}
> -
> static const struct spi_device_id ad5686_spi_id[] = {
> {"ad5310r", ID_AD5310R},
> {"ad5672r", ID_AD5672R},
> @@ -126,7 +121,6 @@ static struct spi_driver ad5686_spi_driver = {
> .name = "ad5686",
> },
> .probe = ad5686_spi_probe,
> - .remove = ad5686_spi_remove,
> .id_table = ad5686_spi_id,
> };
>
> diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
> index a8a38879fc40..b848b076851c 100644
> --- a/drivers/iio/dac/ad5686.c
> +++ b/drivers/iio/dac/ad5686.c
> @@ -464,7 +464,6 @@ int ad5686_probe(struct device *dev,
> return -ENOMEM;
>
> st = iio_priv(indio_dev);
> - dev_set_drvdata(dev, indio_dev);
>
> st->dev = dev;
> st->write = write;
> @@ -521,18 +520,10 @@ int ad5686_probe(struct device *dev,
> if (ret)
> return ret;
>
> - return iio_device_register(indio_dev);
> + return devm_iio_device_register(dev, indio_dev);
> }
> EXPORT_SYMBOL_NS_GPL(ad5686_probe, IIO_AD5686);
>
> -void ad5686_remove(struct device *dev)
> -{
> - struct iio_dev *indio_dev = dev_get_drvdata(dev);
> -
> - iio_device_unregister(indio_dev);
> -}
> -EXPORT_SYMBOL_NS_GPL(ad5686_remove, IIO_AD5686);
> -
> MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
> MODULE_DESCRIPTION("Analog Devices AD5686/85/84 DAC");
> MODULE_LICENSE("GPL v2");
> diff --git a/drivers/iio/dac/ad5686.h b/drivers/iio/dac/ad5686.h
> index 62eb309711af..e7d36bae3e59 100644
> --- a/drivers/iio/dac/ad5686.h
> +++ b/drivers/iio/dac/ad5686.h
> @@ -155,7 +155,5 @@ int ad5686_probe(struct device *dev,
> const char *name, ad5686_write_func write,
> ad5686_read_func read);
>
> -void ad5686_remove(struct device *dev);
> -
>
> #endif /* __DRIVERS_IIO_DAC_AD5686_H__ */
> diff --git a/drivers/iio/dac/ad5696-i2c.c b/drivers/iio/dac/ad5696-i2c.c
> index 81541f755a3e..a56a7a410111 100644
> --- a/drivers/iio/dac/ad5696-i2c.c
> +++ b/drivers/iio/dac/ad5696-i2c.c
> @@ -65,11 +65,6 @@ static int ad5686_i2c_probe(struct i2c_client *i2c)
> ad5686_i2c_write, ad5686_i2c_read);
> }
>
> -static void ad5686_i2c_remove(struct i2c_client *i2c)
> -{
> - ad5686_remove(&i2c->dev);
> -}
> -
> static const struct i2c_device_id ad5686_i2c_id[] = {
> {"ad5311r", ID_AD5311R},
> {"ad5337r", ID_AD5337R},
> @@ -116,7 +111,6 @@ static struct i2c_driver ad5686_i2c_driver = {
> .of_match_table = ad5686_of_match,
> },
> .probe = ad5686_i2c_probe,
> - .remove = ad5686_i2c_remove,
> .id_table = ad5686_i2c_id,
> };
>
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 ` [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-23 15:50 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:50 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:28 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Simplify the code by using devm_regulator_get_enable_read_voltage().
>
> A small change in behavior here due to moving the enable to the same
> place as the get: supplies now are enabled before the reset GPIO is
> toggled (which is arguably the correct order).
Agreed ordering is weird before this change so that should be fine.
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
This raises some questions for me (about the original code)
My gut feeling is drop the reading of the regulator voltage but
maybe I'm missing something.
> ---
> drivers/iio/dac/ad7293.c | 66 ++++++++----------------------------------------
> 1 file changed, 11 insertions(+), 55 deletions(-)
>
> diff --git a/drivers/iio/dac/ad7293.c b/drivers/iio/dac/ad7293.c
> index 1d4032670482..58f7926ec3f3 100644
> --- a/drivers/iio/dac/ad7293.c
> +++ b/drivers/iio/dac/ad7293.c
> @@ -141,8 +141,6 @@ struct ad7293_state {
> /* Protect against concurrent accesses to the device, page selection and data content */
> struct mutex lock;
> struct gpio_desc *gpio_reset;
> - struct regulator *reg_avdd;
> - struct regulator *reg_vdrive;
> u8 page_select;
> u8 data[3] __aligned(IIO_DMA_MINALIGN);
> };
> @@ -777,6 +775,7 @@ static int ad7293_reset(struct ad7293_state *st)
> static int ad7293_properties_parse(struct ad7293_state *st)
> {
> struct spi_device *spi = st->spi;
> + int ret;
>
> st->gpio_reset = devm_gpiod_get_optional(&st->spi->dev, "reset",
> GPIOD_OUT_HIGH);
> @@ -784,24 +783,23 @@ static int ad7293_properties_parse(struct ad7293_state *st)
> return dev_err_probe(&spi->dev, PTR_ERR(st->gpio_reset),
> "failed to get the reset GPIO\n");
>
> - st->reg_avdd = devm_regulator_get(&spi->dev, "avdd");
> - if (IS_ERR(st->reg_avdd))
> - return dev_err_probe(&spi->dev, PTR_ERR(st->reg_avdd),
> + ret = devm_regulator_get_enable_read_voltage(&spi->dev, "avdd");
> + if (ret < 0)
> + return dev_err_probe(&spi->dev, ret,
> "failed to get the AVDD voltage\n");
> + if (ret > 5500000 || ret < 4500000)
> + return -EINVAL;
Why is this a driver problem?
>
> - st->reg_vdrive = devm_regulator_get(&spi->dev, "vdrive");
> - if (IS_ERR(st->reg_vdrive))
> - return dev_err_probe(&spi->dev, PTR_ERR(st->reg_vdrive),
> + ret = devm_regulator_get_enable_read_voltage(&spi->dev, "vdrive");
> + if (ret < 0)
> + return dev_err_probe(&spi->dev, ret,
> "failed to get the VDRIVE voltage\n");
> + if (ret > 5500000 || ret < 1700000)
> + return -EINVAL;
Likewise.
Regulators might be fine and we can't read the voltages. If they are out
of spec, that's a design or board configuration problem.
To keep these in place rather than just dropping them, I'd like more
info on why! May well be in the history but I'm busy / lazy (take
your pick) so won't look today.
> return 0;
> }
>
> -static void ad7293_reg_disable(void *data)
> -{
> - regulator_disable(data);
> -}
> -
> static int ad7293_init(struct ad7293_state *st)
> {
> int ret;
> @@ -816,48 +814,6 @@ static int ad7293_init(struct ad7293_state *st)
> if (ret)
> return ret;
>
> - ret = regulator_enable(st->reg_avdd);
> - if (ret) {
> - dev_err(&spi->dev,
> - "Failed to enable specified AVDD Voltage!\n");
> - return ret;
> - }
> -
> - ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable,
> - st->reg_avdd);
> - if (ret)
> - return ret;
> -
> - ret = regulator_enable(st->reg_vdrive);
> - if (ret) {
> - dev_err(&spi->dev,
> - "Failed to enable specified VDRIVE Voltage!\n");
> - return ret;
> - }
> -
> - ret = devm_add_action_or_reset(&spi->dev, ad7293_reg_disable,
> - st->reg_vdrive);
> - if (ret)
> - return ret;
> -
> - ret = regulator_get_voltage(st->reg_avdd);
> - if (ret < 0) {
> - dev_err(&spi->dev, "Failed to read avdd regulator: %d\n", ret);
> - return ret;
> - }
> -
> - if (ret > 5500000 || ret < 4500000)
> - return -EINVAL;
> -
> - ret = regulator_get_voltage(st->reg_vdrive);
> - if (ret < 0) {
> - dev_err(&spi->dev,
> - "Failed to read vdrive regulator: %d\n", ret);
> - return ret;
> - }
> - if (ret > 5500000 || ret < 1700000)
> - return -EINVAL;
> -
> /* Check Chip ID */
> ret = __ad7293_spi_read(st, AD7293_REG_DEVICE_ID, &chip_id);
> if (ret)
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 06/11] iio: dac: ad8801: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 ` [PATCH 06/11] iio: dac: ad8801: " David Lechner
@ 2024-11-23 15:51 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:51 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:29 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Simplify the code by using devm_regulator_get_enable_read_voltage().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Particularly nice saving in this one ;)
Applied.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 07/11] iio: dac ad8801: drop driver remove function
2024-11-20 21:33 ` [PATCH 07/11] iio: dac ad8801: drop driver remove function David Lechner
@ 2024-11-23 15:52 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:52 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:30 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Remove driver remove callback in the ad8801 driver.
>
> By making use of devm_iio_device_register(), we no longer need a driver
> remove callback. Also since this was the last user of spi_get_drvdata(),
> we can drop the call to spi_set_drvdata().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 ` [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-23 15:53 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:53 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:31 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Simplify the code by using devm_regulator_get_enable_read_voltage().
>
> Some use of dev_err() is replaced with dev_err_probe() to simplify
> things even more since we are refactoring these lines anyway.
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 09/11] iio: dac ltc2632: drop driver remove function
2024-11-20 21:33 ` [PATCH 09/11] iio: dac ltc2632: drop driver remove function David Lechner
@ 2024-11-23 15:54 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:54 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:32 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Remove driver remove callback for the ltc2632 driver.
>
> By making use of devm_iio_device_register(), we no longer need a driver
> remove callback. Also since this was the last user of spi_get_drvdata(),
> we can drop the call to spi_set_drvdata().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage()
2024-11-20 21:33 ` [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage() David Lechner
@ 2024-11-23 15:55 ` Jonathan Cameron
0 siblings, 0 replies; 19+ messages in thread
From: Jonathan Cameron @ 2024-11-23 15:55 UTC (permalink / raw)
To: David Lechner
Cc: Michael Hennerich, Liam Girdwood, Mark Brown, Antoniu Miclaus,
Nuno Sá, linux-iio, linux-kernel
On Wed, 20 Nov 2024 15:33:33 -0600
David Lechner <dlechner@baylibre.com> wrote:
> Simplify the code by using devm_regulator_get_enable_read_voltage().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2024-11-23 15:55 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-20 21:33 [PATCH 00/11] iio: use devm_regulator_get_enable_read_voltage round 6 David Lechner
2024-11-20 21:33 ` [PATCH 01/11] iio: dac: ad5624r: fix struct name in doc comment David Lechner
2024-11-20 21:33 ` [PATCH 02/11] iio: dac: ad5686: " David Lechner
2024-11-20 21:33 ` [PATCH 03/11] iio: dac: ad5686: use devm_regulator_get_enable_read_voltage() David Lechner
2024-11-20 21:33 ` [PATCH 04/11] iio: dac: ad5686: drop driver remove function David Lechner
2024-11-23 15:45 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 05/11] iio: dac: ad7293: use devm_regulator_get_enable_read_voltage() David Lechner
2024-11-23 15:50 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 06/11] iio: dac: ad8801: " David Lechner
2024-11-23 15:51 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 07/11] iio: dac ad8801: drop driver remove function David Lechner
2024-11-23 15:52 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 08/11] iio: dac: ltc2632: use devm_regulator_get_enable_read_voltage() David Lechner
2024-11-23 15:53 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 09/11] iio: dac ltc2632: drop driver remove function David Lechner
2024-11-23 15:54 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 10/11] iio: dac: ltc2688: use devm_regulator_get_enable_read_voltage() David Lechner
2024-11-23 15:55 ` Jonathan Cameron
2024-11-20 21:33 ` [PATCH 11/11] iio: dac: max5821: " David Lechner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox