From: Stefano Manni <stefano.manni@gmail.com>
To: lars@metafoo.de, Michael.Hennerich@analog.com, jic23@kernel.org,
dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Stefano Manni <stefano.manni@gmail.com>
Subject: [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info
Date: Wed, 6 Aug 2025 11:01:57 +0200 [thread overview]
Message-ID: <20250806090158.117628-2-stefano.manni@gmail.com> (raw)
In-Reply-To: <20250806090158.117628-1-stefano.manni@gmail.com>
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
next prev parent reply other threads:[~2025-08-06 9:02 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 ` Stefano Manni [this message]
2025-08-06 14:58 ` [PATCH 1/2] iio: adc: ad799x: add reference voltage capability to chip_info 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
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=20250806090158.117628-2-stefano.manni@gmail.com \
--to=stefano.manni@gmail.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 \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®