From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Stefano Manni <stefano.manni@gmail.com>
Cc: <lars@metafoo.de>, <Michael.Hennerich@analog.com>,
<jic23@kernel.org>, <dlechner@baylibre.com>, <nuno.sa@analog.com>,
<andy@kernel.org>, <linux-iio@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info
Date: Wed, 6 Aug 2025 15:58:53 +0100 [thread overview]
Message-ID: <20250806155853.00003f0b@huawei.com> (raw)
In-Reply-To: <20250806090158.117628-2-stefano.manni@gmail.com>
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;
>
next prev parent reply other threads:[~2025-08-06 14:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250806155853.00003f0b@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=Michael.Hennerich@analog.com \
--cc=andy@kernel.org \
--cc=dlechner@baylibre.com \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=stefano.manni@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.