All of lore.kernel.org
 help / color / mirror / Atom feed
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;
>  


  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.