Linux IIO development
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Piyush Patle <piyushpatle228@gmail.com>
Cc: ak@it-klinger.de, andriy.shevchenko@linux.intel.com,
	dlechner@baylibre.com, nuno.sa@analog.com, robh@kernel.org,
	krzk+dt@kernel.org, conor+dt@kernel.org,
	linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v8 v8 05/11] iio: adc: hx711: move scale computation to per-device storage
Date: Tue, 12 May 2026 13:14:13 +0100	[thread overview]
Message-ID: <20260512131413.3ce37a2b@jic23-huawei> (raw)
In-Reply-To: <20260511174342.123820-6-piyushpatle228@gmail.com>

On Mon, 11 May 2026 23:13:30 +0530
Piyush Patle <piyushpatle228@gmail.com> wrote:

> The gain-to-scale table is global today, so probe-time scale updates for
> one device overwrite the values used by any earlier device instance.
> 
> Fix this by making the gain table const and storing the computed scale
> values per device in hx711_data.
> 
> No functional change for single-sensor configurations.
> 
> Signed-off-by: Piyush Patle <piyushpatle228@gmail.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>

This is a patch that stands fine on it's own (and Sashiko was fine with
v7) so I'll apply it now.

Applied to the testing branch of iio.git.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/hx711.c | 31 ++++++++++++++++---------------
>  1 file changed, 16 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c
> index 1db8b68a8f64..86d2a70dd3de 100644
> --- a/drivers/iio/adc/hx711.c
> +++ b/drivers/iio/adc/hx711.c
> @@ -28,22 +28,20 @@
>  struct hx711_gain_to_scale {
>  	int			gain;
>  	int			gain_pulse;
> -	int			scale;
>  	int			channel;
>  };
>  
>  /*
>   * .scale depends on AVDD which in turn is known as soon as the regulator
> - * is available
> - * therefore we set .scale in hx711_probe()
> + * is available; it is stored per device in hx711_data.gain_scale[]
>   *
>   * channel A in documentation is channel 0 in source code
>   * channel B in documentation is channel 1 in source code
>   */
> -static struct hx711_gain_to_scale hx711_gain_to_scale[HX711_GAIN_MAX] = {
> -	{ 128, 1, 0, 0 },
> -	{  32, 2, 0, 1 },
> -	{  64, 3, 0, 0 }
> +static const struct hx711_gain_to_scale hx711_gain_to_scale[HX711_GAIN_MAX] = {
> +	{ 128, 1, 0 },
> +	{  32, 2, 1 },
> +	{  64, 3, 0 },
>  };
>  
>  static int hx711_get_gain_to_pulse(int gain)
> @@ -56,22 +54,22 @@ static int hx711_get_gain_to_pulse(int gain)
>  	return 1;
>  }
>  
> -static int hx711_get_gain_to_scale(int gain)
> +static int hx711_get_gain_to_scale(const int *gain_scale, int gain)
>  {
>  	int i;
>  
>  	for (i = 0; i < HX711_GAIN_MAX; i++)
>  		if (hx711_gain_to_scale[i].gain == gain)
> -			return hx711_gain_to_scale[i].scale;
> +			return gain_scale[i];
>  	return 0;
>  }
>  
> -static int hx711_get_scale_to_gain(int scale)
> +static int hx711_get_scale_to_gain(const int *gain_scale, int scale)
>  {
>  	int i;
>  
>  	for (i = 0; i < HX711_GAIN_MAX; i++)
> -		if (hx711_gain_to_scale[i].scale == scale)
> +		if (gain_scale[i] == scale)
>  			return hx711_gain_to_scale[i].gain;
>  	return -EINVAL;
>  }
> @@ -82,6 +80,7 @@ struct hx711_data {
>  	struct gpio_desc	*gpiod_dout;
>  	int			gain_set;	/* gain set on device */
>  	int			gain_chan_a;	/* gain for channel A */
> +	int			gain_scale[HX711_GAIN_MAX];
>  	struct mutex		lock;
>  	/*
>  	 * triggered buffer
> @@ -290,7 +289,8 @@ static int hx711_read_raw(struct iio_dev *indio_dev,
>  		*val = 0;
>  		mutex_lock(&hx711_data->lock);
>  
> -		*val2 = hx711_get_gain_to_scale(hx711_data->gain_set);
> +		*val2 = hx711_get_gain_to_scale(hx711_data->gain_scale,
> +						hx711_data->gain_set);
>  
>  		mutex_unlock(&hx711_data->lock);
>  
> @@ -321,7 +321,7 @@ static int hx711_write_raw(struct iio_dev *indio_dev,
>  
>  		mutex_lock(&hx711_data->lock);
>  
> -		gain = hx711_get_scale_to_gain(val2);
> +		gain = hx711_get_scale_to_gain(hx711_data->gain_scale, val2);
>  		if (gain < 0) {
>  			mutex_unlock(&hx711_data->lock);
>  			return gain;
> @@ -386,6 +386,7 @@ static ssize_t hx711_scale_available_show(struct device *dev,
>  				struct device_attribute *attr,
>  				char *buf)
>  {
> +	struct hx711_data *hx711_data = iio_priv(dev_to_iio_dev(dev));
>  	struct iio_dev_attr *iio_attr = to_iio_dev_attr(attr);
>  	int channel = iio_attr->address;
>  	int i, len = 0;
> @@ -393,7 +394,7 @@ static ssize_t hx711_scale_available_show(struct device *dev,
>  	for (i = 0; i < HX711_GAIN_MAX; i++)
>  		if (hx711_gain_to_scale[i].channel == channel)
>  			len += sprintf(buf + len, "0.%09d ",
> -					hx711_gain_to_scale[i].scale);
> +				       hx711_data->gain_scale[i]);
>  
>  	len += sprintf(buf + len, "\n");
>  
> @@ -511,7 +512,7 @@ static int hx711_probe(struct platform_device *pdev)
>  	ret *= 100;
>  
>  	for (i = 0; i < HX711_GAIN_MAX; i++)
> -		hx711_gain_to_scale[i].scale =
> +		hx711_data->gain_scale[i] =
>  			ret / hx711_gain_to_scale[i].gain / 1678;
>  
>  	hx711_data->gain_set = 128;


  reply	other threads:[~2026-05-12 12:14 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-11 17:43 [PATCH v8 00/11] iio: adc: hx711: add HX710B support Piyush Patle
2026-05-11 17:43 ` [PATCH v8 v8 01/11] dt-bindings: iio: adc: hx711: clean up existing binding text Piyush Patle
2026-05-12 12:05   ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 02/11] dt-bindings: iio: adc: hx711: add VSUP supply property Piyush Patle
2026-05-12 12:06   ` Jonathan Cameron
2026-05-12 12:08     ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 03/11] dt-bindings: iio: adc: hx711: add RATE GPIO property Piyush Patle
2026-05-12 12:08   ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 04/11] dt-bindings: iio: adc: hx711: add HX710B support Piyush Patle
2026-05-12 12:13   ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 05/11] iio: adc: hx711: move scale computation to per-device storage Piyush Patle
2026-05-12 12:14   ` Jonathan Cameron [this message]
2026-05-11 17:43 ` [PATCH v8 v8 06/11] iio: adc: hx711: introduce hx711_chip_info structure Piyush Patle
2026-05-12 12:19   ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 07/11] iio: adc: hx711: pass trailing pulse count into hx711_read Piyush Patle
2026-05-11 17:43 ` [PATCH v8 v8 08/11] iio: adc: hx711: split variable assignments in hx711_read and hx711_reset Piyush Patle
2026-05-11 17:43 ` [PATCH v8 v8 09/11] iio: adc: hx711: localize loop iterators in hx711_read Piyush Patle
2026-05-11 17:43 ` [PATCH v8 v8 10/11] iio: adc: hx711: pass iio_chan_spec to hx711_reset_read Piyush Patle
2026-05-12 12:21   ` Jonathan Cameron
2026-05-11 17:43 ` [PATCH v8 v8 11/11] iio: adc: hx711: add support for HX710B Piyush Patle
2026-05-12 12:38   ` Jonathan Cameron

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=20260512131413.3ce37a2b@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=ak@it-klinger.de \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=piyushpatle228@gmail.com \
    --cc=robh@kernel.org \
    /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