* [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct
@ 2025-08-13 22:58 Andrew Davis
2025-08-13 22:58 ` [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper Andrew Davis
` (6 more replies)
0 siblings, 7 replies; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
The device *dev is only used in probe(), so no need to store it
in the device local data struct. In all the places in probe()
we did use that, just use a new local variable for the same.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4403.c | 46 +++++++++++++++++-------------------
1 file changed, 22 insertions(+), 24 deletions(-)
diff --git a/drivers/iio/health/afe4403.c b/drivers/iio/health/afe4403.c
index 30d3f984b0323..99bf1bcbea40d 100644
--- a/drivers/iio/health/afe4403.c
+++ b/drivers/iio/health/afe4403.c
@@ -58,7 +58,6 @@ static const struct reg_field afe4403_reg_fields[] = {
/**
* struct afe4403_data - AFE4403 device instance data
- * @dev: Device structure
* @spi: SPI device handle
* @regmap: Register map of the device
* @fields: Register fields of the device
@@ -68,7 +67,6 @@ static const struct reg_field afe4403_reg_fields[] = {
* @buffer: Used to construct data layout to push into IIO buffer.
*/
struct afe4403_data {
- struct device *dev;
struct spi_device *spi;
struct regmap *regmap;
struct regmap_field *fields[F_MAX_FIELDS];
@@ -460,63 +458,63 @@ static DEFINE_SIMPLE_DEV_PM_OPS(afe4403_pm_ops, afe4403_suspend,
static int afe4403_probe(struct spi_device *spi)
{
+ struct device *dev = &spi->dev;
struct iio_dev *indio_dev;
struct afe4403_data *afe;
int i, ret;
- indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*afe));
+ indio_dev = devm_iio_device_alloc(dev, sizeof(*afe));
if (!indio_dev)
return -ENOMEM;
afe = iio_priv(indio_dev);
spi_set_drvdata(spi, indio_dev);
- afe->dev = &spi->dev;
afe->spi = spi;
afe->irq = spi->irq;
afe->regmap = devm_regmap_init_spi(spi, &afe4403_regmap_config);
if (IS_ERR(afe->regmap)) {
- dev_err(afe->dev, "Unable to allocate register map\n");
+ dev_err(dev, "Unable to allocate register map\n");
return PTR_ERR(afe->regmap);
}
for (i = 0; i < F_MAX_FIELDS; i++) {
- afe->fields[i] = devm_regmap_field_alloc(afe->dev, afe->regmap,
+ afe->fields[i] = devm_regmap_field_alloc(dev, afe->regmap,
afe4403_reg_fields[i]);
if (IS_ERR(afe->fields[i])) {
- dev_err(afe->dev, "Unable to allocate regmap fields\n");
+ dev_err(dev, "Unable to allocate regmap fields\n");
return PTR_ERR(afe->fields[i]);
}
}
- afe->regulator = devm_regulator_get(afe->dev, "tx_sup");
+ afe->regulator = devm_regulator_get(dev, "tx_sup");
if (IS_ERR(afe->regulator))
- return dev_err_probe(afe->dev, PTR_ERR(afe->regulator),
+ return dev_err_probe(dev, PTR_ERR(afe->regulator),
"Unable to get regulator\n");
ret = regulator_enable(afe->regulator);
if (ret) {
- dev_err(afe->dev, "Unable to enable regulator\n");
+ dev_err(dev, "Unable to enable regulator\n");
return ret;
}
- ret = devm_add_action_or_reset(afe->dev, afe4403_regulator_disable, afe->regulator);
+ ret = devm_add_action_or_reset(dev, afe4403_regulator_disable, afe->regulator);
if (ret) {
- dev_err(afe->dev, "Unable to add regulator disable action\n");
+ dev_err(dev, "Unable to add regulator disable action\n");
return ret;
}
ret = regmap_write(afe->regmap, AFE440X_CONTROL0,
AFE440X_CONTROL0_SW_RESET);
if (ret) {
- dev_err(afe->dev, "Unable to reset device\n");
+ dev_err(dev, "Unable to reset device\n");
return ret;
}
ret = regmap_multi_reg_write(afe->regmap, afe4403_reg_sequences,
ARRAY_SIZE(afe4403_reg_sequences));
if (ret) {
- dev_err(afe->dev, "Unable to set register defaults\n");
+ dev_err(dev, "Unable to set register defaults\n");
return ret;
}
@@ -527,45 +525,45 @@ static int afe4403_probe(struct spi_device *spi)
indio_dev->info = &afe4403_iio_info;
if (afe->irq > 0) {
- afe->trig = devm_iio_trigger_alloc(afe->dev,
+ afe->trig = devm_iio_trigger_alloc(dev,
"%s-dev%d",
indio_dev->name,
iio_device_id(indio_dev));
if (!afe->trig) {
- dev_err(afe->dev, "Unable to allocate IIO trigger\n");
+ dev_err(dev, "Unable to allocate IIO trigger\n");
return -ENOMEM;
}
iio_trigger_set_drvdata(afe->trig, indio_dev);
- ret = devm_iio_trigger_register(afe->dev, afe->trig);
+ ret = devm_iio_trigger_register(dev, afe->trig);
if (ret) {
- dev_err(afe->dev, "Unable to register IIO trigger\n");
+ dev_err(dev, "Unable to register IIO trigger\n");
return ret;
}
- ret = devm_request_threaded_irq(afe->dev, afe->irq,
+ ret = devm_request_threaded_irq(dev, afe->irq,
iio_trigger_generic_data_rdy_poll,
NULL, IRQF_ONESHOT,
AFE4403_DRIVER_NAME,
afe->trig);
if (ret) {
- dev_err(afe->dev, "Unable to request IRQ\n");
+ dev_err(dev, "Unable to request IRQ\n");
return ret;
}
}
- ret = devm_iio_triggered_buffer_setup(afe->dev, indio_dev,
+ ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
&iio_pollfunc_store_time,
afe4403_trigger_handler, NULL);
if (ret) {
- dev_err(afe->dev, "Unable to setup buffer\n");
+ dev_err(dev, "Unable to setup buffer\n");
return ret;
}
- ret = devm_iio_device_register(afe->dev, indio_dev);
+ ret = devm_iio_device_register(dev, indio_dev);
if (ret) {
- dev_err(afe->dev, "Unable to register IIO device\n");
+ dev_err(dev, "Unable to register IIO device\n");
return ret;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
@ 2025-08-13 22:58 ` Andrew Davis
2025-08-13 23:12 ` David Lechner
2025-08-13 22:58 ` [PATCH 3/6] iio: health: afe4403: Use dev_err_probe() helper Andrew Davis
` (5 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
This takes care of both getting and enabling the regulator in one
function, it also handles the devm action, so remove that. Also
do not disable the regulator on suspend, this will be handled for
us. We now do not need to track the regulator at all, so drop it
from the device struct.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4403.c | 33 +--------------------------------
1 file changed, 1 insertion(+), 32 deletions(-)
diff --git a/drivers/iio/health/afe4403.c b/drivers/iio/health/afe4403.c
index 99bf1bcbea40d..f9759f855c534 100644
--- a/drivers/iio/health/afe4403.c
+++ b/drivers/iio/health/afe4403.c
@@ -61,7 +61,6 @@ static const struct reg_field afe4403_reg_fields[] = {
* @spi: SPI device handle
* @regmap: Register map of the device
* @fields: Register fields of the device
- * @regulator: Pointer to the regulator for the IC
* @trig: IIO trigger for this device
* @irq: ADC_RDY line interrupt number
* @buffer: Used to construct data layout to push into IIO buffer.
@@ -70,7 +69,6 @@ struct afe4403_data {
struct spi_device *spi;
struct regmap *regmap;
struct regmap_field *fields[F_MAX_FIELDS];
- struct regulator *regulator;
struct iio_trigger *trig;
int irq;
/* Ensure suitable alignment for timestamp */
@@ -343,13 +341,6 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)
return IRQ_HANDLED;
}
-static void afe4403_regulator_disable(void *data)
-{
- struct regulator *regulator = data;
-
- regulator_disable(regulator);
-}
-
#define AFE4403_TIMING_PAIRS \
{ AFE440X_LED2STC, 0x000050 }, \
{ AFE440X_LED2ENDC, 0x0003e7 }, \
@@ -424,12 +415,6 @@ static int afe4403_suspend(struct device *dev)
if (ret)
return ret;
- ret = regulator_disable(afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to disable regulator\n");
- return ret;
- }
-
return 0;
}
@@ -439,12 +424,6 @@ static int afe4403_resume(struct device *dev)
struct afe4403_data *afe = iio_priv(indio_dev);
int ret;
- ret = regulator_enable(afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to enable regulator\n");
- return ret;
- }
-
ret = regmap_clear_bits(afe->regmap, AFE440X_CONTROL2,
AFE440X_CONTROL2_PDN_AFE);
if (ret)
@@ -488,21 +467,11 @@ static int afe4403_probe(struct spi_device *spi)
}
}
- afe->regulator = devm_regulator_get(dev, "tx_sup");
- if (IS_ERR(afe->regulator))
- return dev_err_probe(dev, PTR_ERR(afe->regulator),
- "Unable to get regulator\n");
-
- ret = regulator_enable(afe->regulator);
+ ret = devm_regulator_get_enable(dev, "tx_sup");
if (ret) {
dev_err(dev, "Unable to enable regulator\n");
return ret;
}
- ret = devm_add_action_or_reset(dev, afe4403_regulator_disable, afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to add regulator disable action\n");
- return ret;
- }
ret = regmap_write(afe->regmap, AFE440X_CONTROL0,
AFE440X_CONTROL0_SW_RESET);
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/6] iio: health: afe4403: Use dev_err_probe() helper
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
2025-08-13 22:58 ` [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper Andrew Davis
@ 2025-08-13 22:58 ` Andrew Davis
2025-08-13 22:58 ` [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct Andrew Davis
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
This checks for EPROBE_DEFER and allows us to print out the error code
while return it directly saving some lines of code.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4403.c | 62 +++++++++++++-----------------------
1 file changed, 22 insertions(+), 40 deletions(-)
diff --git a/drivers/iio/health/afe4403.c b/drivers/iio/health/afe4403.c
index f9759f855c534..56953730c2bed 100644
--- a/drivers/iio/health/afe4403.c
+++ b/drivers/iio/health/afe4403.c
@@ -453,39 +453,31 @@ static int afe4403_probe(struct spi_device *spi)
afe->irq = spi->irq;
afe->regmap = devm_regmap_init_spi(spi, &afe4403_regmap_config);
- if (IS_ERR(afe->regmap)) {
- dev_err(dev, "Unable to allocate register map\n");
- return PTR_ERR(afe->regmap);
- }
+ if (IS_ERR(afe->regmap))
+ return dev_err_probe(dev, PTR_ERR(afe->regmap),
+ "Unable to allocate register map\n");
for (i = 0; i < F_MAX_FIELDS; i++) {
afe->fields[i] = devm_regmap_field_alloc(dev, afe->regmap,
afe4403_reg_fields[i]);
- if (IS_ERR(afe->fields[i])) {
- dev_err(dev, "Unable to allocate regmap fields\n");
- return PTR_ERR(afe->fields[i]);
- }
+ if (IS_ERR(afe->fields[i]))
+ return dev_err_probe(dev, PTR_ERR(afe->fields[i]),
+ "Unable to allocate regmap fields\n");
}
ret = devm_regulator_get_enable(dev, "tx_sup");
- if (ret) {
- dev_err(dev, "Unable to enable regulator\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to enable regulator\n");
ret = regmap_write(afe->regmap, AFE440X_CONTROL0,
AFE440X_CONTROL0_SW_RESET);
- if (ret) {
- dev_err(dev, "Unable to reset device\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to reset device\n");
ret = regmap_multi_reg_write(afe->regmap, afe4403_reg_sequences,
ARRAY_SIZE(afe4403_reg_sequences));
- if (ret) {
- dev_err(dev, "Unable to set register defaults\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to set register defaults\n");
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->channels = afe4403_channels;
@@ -498,43 +490,33 @@ static int afe4403_probe(struct spi_device *spi)
"%s-dev%d",
indio_dev->name,
iio_device_id(indio_dev));
- if (!afe->trig) {
- dev_err(dev, "Unable to allocate IIO trigger\n");
- return -ENOMEM;
- }
+ if (!afe->trig)
+ return dev_err_probe(dev, -ENOMEM, "Unable to allocate IIO trigger\n");
iio_trigger_set_drvdata(afe->trig, indio_dev);
ret = devm_iio_trigger_register(dev, afe->trig);
- if (ret) {
- dev_err(dev, "Unable to register IIO trigger\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to register IIO trigger\n");
ret = devm_request_threaded_irq(dev, afe->irq,
iio_trigger_generic_data_rdy_poll,
NULL, IRQF_ONESHOT,
AFE4403_DRIVER_NAME,
afe->trig);
- if (ret) {
- dev_err(dev, "Unable to request IRQ\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to request IRQ\n");
}
ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
&iio_pollfunc_store_time,
afe4403_trigger_handler, NULL);
- if (ret) {
- dev_err(dev, "Unable to setup buffer\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to setup buffer\n");
ret = devm_iio_device_register(dev, indio_dev);
- if (ret) {
- dev_err(dev, "Unable to register IIO device\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to register IIO device\n");
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
2025-08-13 22:58 ` [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper Andrew Davis
2025-08-13 22:58 ` [PATCH 3/6] iio: health: afe4403: Use dev_err_probe() helper Andrew Davis
@ 2025-08-13 22:58 ` Andrew Davis
2025-08-16 12:55 ` Jonathan Cameron
2025-08-13 22:58 ` [PATCH 5/6] iio: health: afe4404: Use devm_regulator_get_enable() helper Andrew Davis
` (3 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
The device *dev is only used in probe(), so no need to store it
in the device local data struct. In all the places in probe()
we did use that, just use a new local variable for the same.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4404.c | 46 +++++++++++++++++-------------------
1 file changed, 22 insertions(+), 24 deletions(-)
diff --git a/drivers/iio/health/afe4404.c b/drivers/iio/health/afe4404.c
index b2727effecaae..29e030943f599 100644
--- a/drivers/iio/health/afe4404.c
+++ b/drivers/iio/health/afe4404.c
@@ -77,7 +77,6 @@ static const struct reg_field afe4404_reg_fields[] = {
/**
* struct afe4404_data - AFE4404 device instance data
- * @dev: Device structure
* @regmap: Register map of the device
* @fields: Register fields of the device
* @regulator: Pointer to the regulator for the IC
@@ -86,7 +85,6 @@ static const struct reg_field afe4404_reg_fields[] = {
* @buffer: Used to construct a scan to push to the iio buffer.
*/
struct afe4404_data {
- struct device *dev;
struct regmap *regmap;
struct regmap_field *fields[F_MAX_FIELDS];
struct regulator *regulator;
@@ -468,62 +466,62 @@ static DEFINE_SIMPLE_DEV_PM_OPS(afe4404_pm_ops, afe4404_suspend,
static int afe4404_probe(struct i2c_client *client)
{
+ struct device *dev = &client->dev;
struct iio_dev *indio_dev;
struct afe4404_data *afe;
int i, ret;
- indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*afe));
+ indio_dev = devm_iio_device_alloc(dev, sizeof(*afe));
if (!indio_dev)
return -ENOMEM;
afe = iio_priv(indio_dev);
i2c_set_clientdata(client, indio_dev);
- afe->dev = &client->dev;
afe->irq = client->irq;
afe->regmap = devm_regmap_init_i2c(client, &afe4404_regmap_config);
if (IS_ERR(afe->regmap)) {
- dev_err(afe->dev, "Unable to allocate register map\n");
+ dev_err(dev, "Unable to allocate register map\n");
return PTR_ERR(afe->regmap);
}
for (i = 0; i < F_MAX_FIELDS; i++) {
- afe->fields[i] = devm_regmap_field_alloc(afe->dev, afe->regmap,
+ afe->fields[i] = devm_regmap_field_alloc(dev, afe->regmap,
afe4404_reg_fields[i]);
if (IS_ERR(afe->fields[i])) {
- dev_err(afe->dev, "Unable to allocate regmap fields\n");
+ dev_err(dev, "Unable to allocate regmap fields\n");
return PTR_ERR(afe->fields[i]);
}
}
- afe->regulator = devm_regulator_get(afe->dev, "tx_sup");
+ afe->regulator = devm_regulator_get(dev, "tx_sup");
if (IS_ERR(afe->regulator))
- return dev_err_probe(afe->dev, PTR_ERR(afe->regulator),
+ return dev_err_probe(dev, PTR_ERR(afe->regulator),
"Unable to get regulator\n");
ret = regulator_enable(afe->regulator);
if (ret) {
- dev_err(afe->dev, "Unable to enable regulator\n");
+ dev_err(dev, "Unable to enable regulator\n");
return ret;
}
- ret = devm_add_action_or_reset(afe->dev, afe4404_regulator_disable, afe->regulator);
+ ret = devm_add_action_or_reset(dev, afe4404_regulator_disable, afe->regulator);
if (ret) {
- dev_err(afe->dev, "Unable to enable regulator\n");
+ dev_err(dev, "Unable to enable regulator\n");
return ret;
}
ret = regmap_write(afe->regmap, AFE440X_CONTROL0,
AFE440X_CONTROL0_SW_RESET);
if (ret) {
- dev_err(afe->dev, "Unable to reset device\n");
+ dev_err(dev, "Unable to reset device\n");
return ret;
}
ret = regmap_multi_reg_write(afe->regmap, afe4404_reg_sequences,
ARRAY_SIZE(afe4404_reg_sequences));
if (ret) {
- dev_err(afe->dev, "Unable to set register defaults\n");
+ dev_err(dev, "Unable to set register defaults\n");
return ret;
}
@@ -534,45 +532,45 @@ static int afe4404_probe(struct i2c_client *client)
indio_dev->info = &afe4404_iio_info;
if (afe->irq > 0) {
- afe->trig = devm_iio_trigger_alloc(afe->dev,
+ afe->trig = devm_iio_trigger_alloc(dev,
"%s-dev%d",
indio_dev->name,
iio_device_id(indio_dev));
if (!afe->trig) {
- dev_err(afe->dev, "Unable to allocate IIO trigger\n");
+ dev_err(dev, "Unable to allocate IIO trigger\n");
return -ENOMEM;
}
iio_trigger_set_drvdata(afe->trig, indio_dev);
- ret = devm_iio_trigger_register(afe->dev, afe->trig);
+ ret = devm_iio_trigger_register(dev, afe->trig);
if (ret) {
- dev_err(afe->dev, "Unable to register IIO trigger\n");
+ dev_err(dev, "Unable to register IIO trigger\n");
return ret;
}
- ret = devm_request_threaded_irq(afe->dev, afe->irq,
+ ret = devm_request_threaded_irq(dev, afe->irq,
iio_trigger_generic_data_rdy_poll,
NULL, IRQF_ONESHOT,
AFE4404_DRIVER_NAME,
afe->trig);
if (ret) {
- dev_err(afe->dev, "Unable to request IRQ\n");
+ dev_err(dev, "Unable to request IRQ\n");
return ret;
}
}
- ret = devm_iio_triggered_buffer_setup(afe->dev, indio_dev,
+ ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
&iio_pollfunc_store_time,
afe4404_trigger_handler, NULL);
if (ret) {
- dev_err(afe->dev, "Unable to setup buffer\n");
+ dev_err(dev, "Unable to setup buffer\n");
return ret;
}
- ret = devm_iio_device_register(afe->dev, indio_dev);
+ ret = devm_iio_device_register(dev, indio_dev);
if (ret) {
- dev_err(afe->dev, "Unable to register IIO device\n");
+ dev_err(dev, "Unable to register IIO device\n");
return ret;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 5/6] iio: health: afe4404: Use devm_regulator_get_enable() helper
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
` (2 preceding siblings ...)
2025-08-13 22:58 ` [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct Andrew Davis
@ 2025-08-13 22:58 ` Andrew Davis
2025-08-13 22:58 ` [PATCH 6/6] iio: health: afe4404: Use dev_err_probe() helper Andrew Davis
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
This takes care of both getting and enabling the regulator in one
function, it also handles the devm action, so remove that. Also
do not disable the regulator on suspend, this will be handled for
us. We now do not need to track the regulator at all, so drop it
from the device struct.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4404.c | 33 +--------------------------------
1 file changed, 1 insertion(+), 32 deletions(-)
diff --git a/drivers/iio/health/afe4404.c b/drivers/iio/health/afe4404.c
index 29e030943f599..19dd821155dd4 100644
--- a/drivers/iio/health/afe4404.c
+++ b/drivers/iio/health/afe4404.c
@@ -79,7 +79,6 @@ static const struct reg_field afe4404_reg_fields[] = {
* struct afe4404_data - AFE4404 device instance data
* @regmap: Register map of the device
* @fields: Register fields of the device
- * @regulator: Pointer to the regulator for the IC
* @trig: IIO trigger for this device
* @irq: ADC_RDY line interrupt number
* @buffer: Used to construct a scan to push to the iio buffer.
@@ -87,7 +86,6 @@ static const struct reg_field afe4404_reg_fields[] = {
struct afe4404_data {
struct regmap *regmap;
struct regmap_field *fields[F_MAX_FIELDS];
- struct regulator *regulator;
struct iio_trigger *trig;
int irq;
s32 buffer[10] __aligned(8);
@@ -346,13 +344,6 @@ static irqreturn_t afe4404_trigger_handler(int irq, void *private)
return IRQ_HANDLED;
}
-static void afe4404_regulator_disable(void *data)
-{
- struct regulator *regulator = data;
-
- regulator_disable(regulator);
-}
-
/* Default timings from data-sheet */
#define AFE4404_TIMING_PAIRS \
{ AFE440X_PRPCOUNT, 39999 }, \
@@ -432,12 +423,6 @@ static int afe4404_suspend(struct device *dev)
if (ret)
return ret;
- ret = regulator_disable(afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to disable regulator\n");
- return ret;
- }
-
return 0;
}
@@ -447,12 +432,6 @@ static int afe4404_resume(struct device *dev)
struct afe4404_data *afe = iio_priv(indio_dev);
int ret;
- ret = regulator_enable(afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to enable regulator\n");
- return ret;
- }
-
ret = regmap_clear_bits(afe->regmap, AFE440X_CONTROL2,
AFE440X_CONTROL2_PDN_AFE);
if (ret)
@@ -495,17 +474,7 @@ static int afe4404_probe(struct i2c_client *client)
}
}
- afe->regulator = devm_regulator_get(dev, "tx_sup");
- if (IS_ERR(afe->regulator))
- return dev_err_probe(dev, PTR_ERR(afe->regulator),
- "Unable to get regulator\n");
-
- ret = regulator_enable(afe->regulator);
- if (ret) {
- dev_err(dev, "Unable to enable regulator\n");
- return ret;
- }
- ret = devm_add_action_or_reset(dev, afe4404_regulator_disable, afe->regulator);
+ ret = devm_regulator_get_enable(dev, "tx_sup");
if (ret) {
dev_err(dev, "Unable to enable regulator\n");
return ret;
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 6/6] iio: health: afe4404: Use dev_err_probe() helper
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
` (3 preceding siblings ...)
2025-08-13 22:58 ` [PATCH 5/6] iio: health: afe4404: Use devm_regulator_get_enable() helper Andrew Davis
@ 2025-08-13 22:58 ` Andrew Davis
2025-08-16 12:53 ` [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Jonathan Cameron
2025-08-20 14:45 ` Andy Shevchenko
6 siblings, 0 replies; 10+ messages in thread
From: Andrew Davis @ 2025-08-13 22:58 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Andrew Davis
This checks for EPROBE_DEFER and allows us to print out the error code
while return it directly saving some lines of code.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/iio/health/afe4404.c | 62 +++++++++++++-----------------------
1 file changed, 22 insertions(+), 40 deletions(-)
diff --git a/drivers/iio/health/afe4404.c b/drivers/iio/health/afe4404.c
index 19dd821155dd4..18f3cf94e8f71 100644
--- a/drivers/iio/health/afe4404.c
+++ b/drivers/iio/health/afe4404.c
@@ -460,39 +460,31 @@ static int afe4404_probe(struct i2c_client *client)
afe->irq = client->irq;
afe->regmap = devm_regmap_init_i2c(client, &afe4404_regmap_config);
- if (IS_ERR(afe->regmap)) {
- dev_err(dev, "Unable to allocate register map\n");
- return PTR_ERR(afe->regmap);
- }
+ if (IS_ERR(afe->regmap))
+ return dev_err_probe(dev, PTR_ERR(afe->regmap),
+ "Unable to allocate register map\n");
for (i = 0; i < F_MAX_FIELDS; i++) {
afe->fields[i] = devm_regmap_field_alloc(dev, afe->regmap,
afe4404_reg_fields[i]);
- if (IS_ERR(afe->fields[i])) {
- dev_err(dev, "Unable to allocate regmap fields\n");
- return PTR_ERR(afe->fields[i]);
- }
+ if (IS_ERR(afe->fields[i]))
+ return dev_err_probe(dev, PTR_ERR(afe->fields[i]),
+ "Unable to allocate regmap fields\n");
}
ret = devm_regulator_get_enable(dev, "tx_sup");
- if (ret) {
- dev_err(dev, "Unable to enable regulator\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to enable regulator\n");
ret = regmap_write(afe->regmap, AFE440X_CONTROL0,
AFE440X_CONTROL0_SW_RESET);
- if (ret) {
- dev_err(dev, "Unable to reset device\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to reset device\n");
ret = regmap_multi_reg_write(afe->regmap, afe4404_reg_sequences,
ARRAY_SIZE(afe4404_reg_sequences));
- if (ret) {
- dev_err(dev, "Unable to set register defaults\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to set register defaults\n");
indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->channels = afe4404_channels;
@@ -505,43 +497,33 @@ static int afe4404_probe(struct i2c_client *client)
"%s-dev%d",
indio_dev->name,
iio_device_id(indio_dev));
- if (!afe->trig) {
- dev_err(dev, "Unable to allocate IIO trigger\n");
- return -ENOMEM;
- }
+ if (!afe->trig)
+ return dev_err_probe(dev, -ENOMEM, "Unable to allocate IIO trigger\n");
iio_trigger_set_drvdata(afe->trig, indio_dev);
ret = devm_iio_trigger_register(dev, afe->trig);
- if (ret) {
- dev_err(dev, "Unable to register IIO trigger\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to register IIO trigger\n");
ret = devm_request_threaded_irq(dev, afe->irq,
iio_trigger_generic_data_rdy_poll,
NULL, IRQF_ONESHOT,
AFE4404_DRIVER_NAME,
afe->trig);
- if (ret) {
- dev_err(dev, "Unable to request IRQ\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to request IRQ\n");
}
ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
&iio_pollfunc_store_time,
afe4404_trigger_handler, NULL);
- if (ret) {
- dev_err(dev, "Unable to setup buffer\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to setup buffer\n");
ret = devm_iio_device_register(dev, indio_dev);
- if (ret) {
- dev_err(dev, "Unable to register IIO device\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "Unable to register IIO device\n");
return 0;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper
2025-08-13 22:58 ` [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper Andrew Davis
@ 2025-08-13 23:12 ` David Lechner
0 siblings, 0 replies; 10+ messages in thread
From: David Lechner @ 2025-08-13 23:12 UTC (permalink / raw)
To: Andrew Davis, Jonathan Cameron, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel
On 8/13/25 5:58 PM, Andrew Davis wrote:
> This takes care of both getting and enabling the regulator in one
> function, it also handles the devm action, so remove that. Also
> do not disable the regulator on suspend, this will be handled for
I didn't know that this worked automatically. What is the mechanism
that makes it work? I've seen lots of drivers doing the disable/
enable in suspend/resume, so I just always assumed that was how one
is supposed to do it.
> us. We now do not need to track the regulator at all, so drop it
> from the device struct.
>
> Signed-off-by: Andrew Davis <afd@ti.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
` (4 preceding siblings ...)
2025-08-13 22:58 ` [PATCH 6/6] iio: health: afe4404: Use dev_err_probe() helper Andrew Davis
@ 2025-08-16 12:53 ` Jonathan Cameron
2025-08-20 14:45 ` Andy Shevchenko
6 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2025-08-16 12:53 UTC (permalink / raw)
To: Andrew Davis
Cc: David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
linux-kernel
On Wed, 13 Aug 2025 17:58:35 -0500
Andrew Davis <afd@ti.com> wrote:
> The device *dev is only used in probe(), so no need to store it
> in the device local data struct. In all the places in probe()
> we did use that, just use a new local variable for the same.
>
> Signed-off-by: Andrew Davis <afd@ti.com>
Applied
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct
2025-08-13 22:58 ` [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct Andrew Davis
@ 2025-08-16 12:55 ` Jonathan Cameron
0 siblings, 0 replies; 10+ messages in thread
From: Jonathan Cameron @ 2025-08-16 12:55 UTC (permalink / raw)
To: Andrew Davis
Cc: David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
linux-kernel
On Wed, 13 Aug 2025 17:58:38 -0500
Andrew Davis <afd@ti.com> wrote:
> The device *dev is only used in probe(), so no need to store it
> in the device local data struct. In all the places in probe()
> we did use that, just use a new local variable for the same.
>
> Signed-off-by: Andrew Davis <afd@ti.com>
Applied. I'll hold off on 2,3,5 and 6 until discussion on the question David raised
is concluded.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
` (5 preceding siblings ...)
2025-08-16 12:53 ` [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Jonathan Cameron
@ 2025-08-20 14:45 ` Andy Shevchenko
6 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2025-08-20 14:45 UTC (permalink / raw)
To: Andrew Davis
Cc: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
linux-iio, linux-kernel
On Wed, Aug 13, 2025 at 05:58:35PM -0500, Andrew Davis wrote:
> The device *dev is only used in probe(), so no need to store it
> in the device local data struct. In all the places in probe()
> we did use that, just use a new local variable for the same.
...
> - afe->trig = devm_iio_trigger_alloc(afe->dev,
> + afe->trig = devm_iio_trigger_alloc(dev,
> "%s-dev%d",
It can be made one line less, but it's already applied...
> indio_dev->name,
> iio_device_id(indio_dev));
> if (!afe->trig) {
> - dev_err(afe->dev, "Unable to allocate IIO trigger\n");
> + dev_err(dev, "Unable to allocate IIO trigger\n");
> return -ENOMEM;
> }
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-08-20 14:45 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-13 22:58 [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Andrew Davis
2025-08-13 22:58 ` [PATCH 2/6] iio: health: afe4403: Use devm_regulator_get_enable() helper Andrew Davis
2025-08-13 23:12 ` David Lechner
2025-08-13 22:58 ` [PATCH 3/6] iio: health: afe4403: Use dev_err_probe() helper Andrew Davis
2025-08-13 22:58 ` [PATCH 4/6] iio: health: afe4404: Do not store dev pointer in device struct Andrew Davis
2025-08-16 12:55 ` Jonathan Cameron
2025-08-13 22:58 ` [PATCH 5/6] iio: health: afe4404: Use devm_regulator_get_enable() helper Andrew Davis
2025-08-13 22:58 ` [PATCH 6/6] iio: health: afe4404: Use dev_err_probe() helper Andrew Davis
2025-08-16 12:53 ` [PATCH 1/6] iio: health: afe4403: Do not store dev pointer in device struct Jonathan Cameron
2025-08-20 14:45 ` Andy Shevchenko
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).