* [PATCH 0/2] iio: adc: ad799x: reference voltage capability @ 2025-08-06 9:01 Stefano Manni 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Stefano Manni @ 2025-08-06 9:01 UTC (permalink / raw) To: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy Cc: linux-iio, linux-kernel, Stefano Manni This patch series refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 in order to add the capability of the chip to have an external reference voltage into the chip_info struct. And so avoid ugly conditional checks on the chip id. In addition the AD7994 is marked to have the external reference voltage as well. Stefano Manni (2): iio: adc: ad799x: add reference voltage capability to chip_info iio: adc: ad799x: add reference voltage to ad7994 drivers/iio/adc/ad799x.c | 45 +++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 19 deletions(-) -- 2.48.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info 2025-08-06 9:01 [PATCH 0/2] iio: adc: ad799x: reference voltage capability Stefano Manni @ 2025-08-06 9:01 ` Stefano Manni 2025-08-06 14:58 ` Jonathan Cameron 2025-08-06 20:15 ` Andy Shevchenko 2025-08-06 9:01 ` [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 Stefano Manni ` (2 subsequent siblings) 3 siblings, 2 replies; 9+ messages in thread From: Stefano Manni @ 2025-08-06 9:01 UTC (permalink / raw) To: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy Cc: linux-iio, linux-kernel, Stefano Manni If the chip supports an external reference voltage on REFIN pin then the "vref-supply" regulator may be used. This commit partially refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 to add the capability of the chip to have an external voltage reference and then remove the ugly conditional check on chip id. Signed-off-by: Stefano Manni <stefano.manni@gmail.com> --- drivers/iio/adc/ad799x.c | 45 +++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 9c02f9199139..955d845407b9 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -114,11 +114,13 @@ struct ad799x_chip_config { * @num_channels: number of channels * @noirq_config: device configuration w/o IRQ * @irq_config: device configuration w/IRQ + * @has_vref: device supports external reference voltage */ struct ad799x_chip_info { int num_channels; const struct ad799x_chip_config noirq_config; const struct ad799x_chip_config irq_config; + bool has_vref; }; struct ad799x_state { @@ -604,6 +606,7 @@ static const struct iio_event_spec ad799x_events[] = { static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { [ad7991] = { .num_channels = 5, + .has_vref = true, .noirq_config = { .channel = { AD799X_CHANNEL(0, 12), @@ -617,6 +620,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7995] = { .num_channels = 5, + .has_vref = true, .noirq_config = { .channel = { AD799X_CHANNEL(0, 10), @@ -630,6 +634,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7999] = { .num_channels = 5, + .has_vref = true, .noirq_config = { .channel = { AD799X_CHANNEL(0, 8), @@ -643,6 +648,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7992] = { .num_channels = 3, + .has_vref = false, .noirq_config = { .channel = { AD799X_CHANNEL(0, 12), @@ -663,6 +669,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7993] = { .num_channels = 5, + .has_vref = false, .noirq_config = { .channel = { AD799X_CHANNEL(0, 10), @@ -687,6 +694,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7994] = { .num_channels = 5, + .has_vref = false, .noirq_config = { .channel = { AD799X_CHANNEL(0, 12), @@ -711,6 +719,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7997] = { .num_channels = 9, + .has_vref = false, .noirq_config = { .channel = { AD799X_CHANNEL(0, 10), @@ -743,6 +752,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7998] = { .num_channels = 9, + .has_vref = false, .noirq_config = { .channel = { AD799X_CHANNEL(0, 12), @@ -809,34 +819,31 @@ static int ad799x_probe(struct i2c_client *client) return ret; /* check if an external reference is supplied */ - st->vref = devm_regulator_get_optional(&client->dev, "vref"); - - if (IS_ERR(st->vref)) { - if (PTR_ERR(st->vref) == -ENODEV) { - st->vref = NULL; - dev_info(&client->dev, "Using VCC reference voltage\n"); - } else { - ret = PTR_ERR(st->vref); - goto error_disable_reg; + if (chip_info->has_vref) { + st->vref = devm_regulator_get_optional(&client->dev, "vref"); + + if (IS_ERR(st->vref)) { + if (PTR_ERR(st->vref) == -ENODEV) { + st->vref = NULL; + dev_info(&client->dev, "Using VCC reference voltage\n"); + } else { + ret = PTR_ERR(st->vref); + goto error_disable_reg; + } } - } - if (st->vref) { - /* - * Use external reference voltage if supported by hardware. - * This is optional if voltage / regulator present, use VCC otherwise. - */ - if ((st->id == ad7991) || (st->id == ad7995) || (st->id == ad7999)) { + if (st->vref) { dev_info(&client->dev, "Using external reference voltage\n"); extra_config |= AD7991_REF_SEL; ret = regulator_enable(st->vref); if (ret) goto error_disable_reg; - } else { - st->vref = NULL; - dev_warn(&client->dev, "Supplied reference not supported\n"); } } + else { + st->vref = NULL; + dev_dbg(&client->dev, "Supplied reference not supported\n"); + } st->client = client; -- 2.48.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni @ 2025-08-06 14:58 ` Jonathan Cameron 2025-08-06 15:36 ` David Lechner 2025-08-06 20:15 ` Andy Shevchenko 1 sibling, 1 reply; 9+ messages in thread From: Jonathan Cameron @ 2025-08-06 14:58 UTC (permalink / raw) To: Stefano Manni Cc: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy, linux-iio, linux-kernel On Wed, 6 Aug 2025 11:01:57 +0200 Stefano Manni <stefano.manni@gmail.com> wrote: > If the chip supports an external reference voltage > on REFIN pin then the "vref-supply" regulator may be used. > > This commit partially refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 > to add the capability of the chip to have an external > voltage reference and then remove the ugly conditional check > on chip id. > > Signed-off-by: Stefano Manni <stefano.manni@gmail.com> Hi Stefano, ` A few minor things inline. Mostly looks good to me. Jonathan > --- > drivers/iio/adc/ad799x.c | 45 +++++++++++++++++++++++----------------- > 1 file changed, 26 insertions(+), 19 deletions(-) > > diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c > index 9c02f9199139..955d845407b9 100644 > --- a/drivers/iio/adc/ad799x.c > +++ b/drivers/iio/adc/ad799x.c > @@ -114,11 +114,13 @@ struct ad799x_chip_config { > * @num_channels: number of channels > * @noirq_config: device configuration w/o IRQ > * @irq_config: device configuration w/IRQ > + * @has_vref: device supports external reference voltage > */ > struct ad799x_chip_info { > int num_channels; > const struct ad799x_chip_config noirq_config; > const struct ad799x_chip_config irq_config; > + bool has_vref; > }; > > struct ad799x_state { > @@ -604,6 +606,7 @@ static const struct iio_event_spec ad799x_events[] = { > static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > [ad7991] = { > .num_channels = 5, > + .has_vref = true, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 12), > @@ -617,6 +620,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7995] = { > .num_channels = 5, > + .has_vref = true, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 10), > @@ -630,6 +634,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7999] = { > .num_channels = 5, > + .has_vref = true, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 8), > @@ -643,6 +648,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7992] = { > .num_channels = 3, > + .has_vref = false, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 12), > @@ -663,6 +669,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7993] = { > .num_channels = 5, > + .has_vref = false, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 10), > @@ -687,6 +694,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7994] = { > .num_channels = 5, > + .has_vref = false, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 12), > @@ -711,6 +719,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7997] = { > .num_channels = 9, > + .has_vref = false, Seems like 'not' having a vref is a reasonable default, so you could just not set it at all in those cases and rely on the default being false. > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 10), > @@ -743,6 +752,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { > }, > [ad7998] = { > .num_channels = 9, > + .has_vref = false, > .noirq_config = { > .channel = { > AD799X_CHANNEL(0, 12), > @@ -809,34 +819,31 @@ static int ad799x_probe(struct i2c_client *client) > return ret; > > /* check if an external reference is supplied */ > - st->vref = devm_regulator_get_optional(&client->dev, "vref"); > - > - if (IS_ERR(st->vref)) { > - if (PTR_ERR(st->vref) == -ENODEV) { > - st->vref = NULL; > - dev_info(&client->dev, "Using VCC reference voltage\n"); > - } else { > - ret = PTR_ERR(st->vref); > - goto error_disable_reg; > + if (chip_info->has_vref) { > + st->vref = devm_regulator_get_optional(&client->dev, "vref"); > + > + if (IS_ERR(st->vref)) { > + if (PTR_ERR(st->vref) == -ENODEV) { > + st->vref = NULL; > + dev_info(&client->dev, "Using VCC reference voltage\n"); > + } else { > + ret = PTR_ERR(st->vref); > + goto error_disable_reg; > + } > } > - } > > - if (st->vref) { > - /* > - * Use external reference voltage if supported by hardware. > - * This is optional if voltage / regulator present, use VCC otherwise. > - */ > - if ((st->id == ad7991) || (st->id == ad7995) || (st->id == ad7999)) { > + if (st->vref) { > dev_info(&client->dev, "Using external reference voltage\n"); > extra_config |= AD7991_REF_SEL; > ret = regulator_enable(st->vref); > if (ret) > goto error_disable_reg; > - } else { > - st->vref = NULL; > - dev_warn(&client->dev, "Supplied reference not supported\n"); > } > } > + else { } else { > + st->vref = NULL; > + dev_dbg(&client->dev, "Supplied reference not supported\n"); > + } > > st->client = client; > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info 2025-08-06 14:58 ` Jonathan Cameron @ 2025-08-06 15:36 ` David Lechner 0 siblings, 0 replies; 9+ messages in thread From: David Lechner @ 2025-08-06 15:36 UTC (permalink / raw) To: Jonathan Cameron, Stefano Manni Cc: lars, Michael.Hennerich, jic23, nuno.sa, andy, linux-iio, linux-kernel On 8/6/25 9:58 AM, Jonathan Cameron wrote: > On Wed, 6 Aug 2025 11:01:57 +0200 > Stefano Manni <stefano.manni@gmail.com> wrote: > ... >> + else { > > } else { > >> + st->vref = NULL; >> + dev_dbg(&client->dev, "Supplied reference not supported\n"); >> + } >> >> st->client = client; >> > I would just completely drop the else. st->vref is already NULL since st is zeroed at allocation and the message is no longer useful. Previously, it warned that the devicetree contained a vref-supply when the chip didn't support it. But now no message is printed in that case and this message would be printed on all chips that don't have vref-supply in the devicetree when that case didn't print anything before. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni 2025-08-06 14:58 ` Jonathan Cameron @ 2025-08-06 20:15 ` Andy Shevchenko 1 sibling, 0 replies; 9+ messages in thread From: Andy Shevchenko @ 2025-08-06 20:15 UTC (permalink / raw) To: Stefano Manni Cc: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy, linux-iio, linux-kernel On Wed, Aug 06, 2025 at 11:01:57AM +0200, Stefano Manni wrote: > If the chip supports an external reference voltage > on REFIN pin then the "vref-supply" regulator may be used. > > This commit partially refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 > to add the capability of the chip to have an external > voltage reference and then remove the ugly conditional check > on chip id. Suggested-by? ... > + if (chip_info->has_vref) { > + st->vref = devm_regulator_get_optional(&client->dev, "vref"); > + Redundant blank line. > + if (IS_ERR(st->vref)) { > + if (PTR_ERR(st->vref) == -ENODEV) { > + st->vref = NULL; > + dev_info(&client->dev, "Using VCC reference voltage\n"); > + } else { > + ret = PTR_ERR(st->vref); > + goto error_disable_reg; > + } > } Can be written as ret = PTR_ERR_OR_ZERO(st->vref); if (ret) { if (ret != -ENODEV) goto error_disable_reg; st->vref = NULL; dev_info(&client->dev, "Using VCC reference voltage\n"); } > - } -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 2025-08-06 9:01 [PATCH 0/2] iio: adc: ad799x: reference voltage capability Stefano Manni 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni @ 2025-08-06 9:01 ` Stefano Manni 2025-08-06 20:16 ` Andy Shevchenko 2025-08-06 15:40 ` [PATCH 0/2] iio: adc: ad799x: reference voltage capability David Lechner 2025-08-06 20:06 ` Andy Shevchenko 3 siblings, 1 reply; 9+ messages in thread From: Stefano Manni @ 2025-08-06 9:01 UTC (permalink / raw) To: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy Cc: linux-iio, linux-kernel, Stefano Manni Signed-off-by: Stefano Manni <stefano.manni@gmail.com> --- drivers/iio/adc/ad799x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/adc/ad799x.c b/drivers/iio/adc/ad799x.c index 955d845407b9..21e03f0df889 100644 --- a/drivers/iio/adc/ad799x.c +++ b/drivers/iio/adc/ad799x.c @@ -694,7 +694,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { }, [ad7994] = { .num_channels = 5, - .has_vref = false, + .has_vref = true, .noirq_config = { .channel = { AD799X_CHANNEL(0, 12), -- 2.48.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 2025-08-06 9:01 ` [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 Stefano Manni @ 2025-08-06 20:16 ` Andy Shevchenko 0 siblings, 0 replies; 9+ messages in thread From: Andy Shevchenko @ 2025-08-06 20:16 UTC (permalink / raw) To: Stefano Manni Cc: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy, linux-iio, linux-kernel On Wed, Aug 06, 2025 at 11:01:58AM +0200, Stefano Manni wrote: Missing commit message. > Signed-off-by: Stefano Manni <stefano.manni@gmail.com> ... > [ad7994] = { > .num_channels = 5, > - .has_vref = false, > + .has_vref = true, As Jonathan said and I implied the false is default. This patch should be just a oneliner with +1 line. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] iio: adc: ad799x: reference voltage capability 2025-08-06 9:01 [PATCH 0/2] iio: adc: ad799x: reference voltage capability Stefano Manni 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni 2025-08-06 9:01 ` [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 Stefano Manni @ 2025-08-06 15:40 ` David Lechner 2025-08-06 20:06 ` Andy Shevchenko 3 siblings, 0 replies; 9+ messages in thread From: David Lechner @ 2025-08-06 15:40 UTC (permalink / raw) To: Stefano Manni, lars, Michael.Hennerich, jic23, nuno.sa, andy Cc: linux-iio, linux-kernel On 8/6/25 4:01 AM, Stefano Manni wrote: > This patch series refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 > in order to add the capability of the chip to have an > external reference voltage into the chip_info struct. > And so avoid ugly conditional checks on the chip id. > > In addition the AD7994 is marked to have the external > reference voltage as well. > > Stefano Manni (2): > iio: adc: ad799x: add reference voltage capability to chip_info > iio: adc: ad799x: add reference voltage to ad7994 > > drivers/iio/adc/ad799x.c | 45 +++++++++++++++++++++++----------------- > 1 file changed, 26 insertions(+), 19 deletions(-) > Something to keep in mind if you send more patches: this should have been [PATCH v2] with a link to (implicit) v1 [1]. [1]: https://lore.kernel.org/linux-iio/20250805142423.17710-1-stefano.manni@gmail.com/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] iio: adc: ad799x: reference voltage capability 2025-08-06 9:01 [PATCH 0/2] iio: adc: ad799x: reference voltage capability Stefano Manni ` (2 preceding siblings ...) 2025-08-06 15:40 ` [PATCH 0/2] iio: adc: ad799x: reference voltage capability David Lechner @ 2025-08-06 20:06 ` Andy Shevchenko 3 siblings, 0 replies; 9+ messages in thread From: Andy Shevchenko @ 2025-08-06 20:06 UTC (permalink / raw) To: Stefano Manni Cc: lars, Michael.Hennerich, jic23, dlechner, nuno.sa, andy, linux-iio, linux-kernel On Wed, Aug 06, 2025 at 11:01:56AM +0200, Stefano Manni wrote: > This patch series refactors 6b104e7895ab16b9b7f466c5f2ca282b87f661e8 > in order to add the capability of the chip to have an > external reference voltage into the chip_info struct. > And so avoid ugly conditional checks on the chip id. > > In addition the AD7994 is marked to have the external > reference voltage as well. On top what David said, missed changelog. -- With Best Regards, Andy Shevchenko ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-08-06 20:16 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-08-06 9:01 [PATCH 0/2] iio: adc: ad799x: reference voltage capability Stefano Manni 2025-08-06 9:01 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info Stefano Manni 2025-08-06 14:58 ` Jonathan Cameron 2025-08-06 15:36 ` David Lechner 2025-08-06 20:15 ` Andy Shevchenko 2025-08-06 9:01 ` [PATCH 2/2] iio: adc: ad799x: add reference voltage to ad7994 Stefano Manni 2025-08-06 20:16 ` Andy Shevchenko 2025-08-06 15:40 ` [PATCH 0/2] iio: adc: ad799x: reference voltage capability David Lechner 2025-08-06 20:06 ` 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).