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;
next prev parent 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