Re: [PATCH v8 v8 10/11] iio: adc: hx711: pass iio_chan_spec to hx711_reset_read
From: Jonathan Cameron
Date: Tue May 12 2026 - 08:27:31 EST
On Mon, 11 May 2026 23:13:35 +0530
Piyush Patle <piyushpatle228@xxxxxxxxx> wrote:
> Change hx711_reset_read() to accept the channel descriptor directly and
> update its callers accordingly.
>
> Split the existing HX711 channel-selection work into a small helper so a
> later variant-specific change can add a matching helper without growing
> hx711_reset_read() further.
>
> No functional change.
>
> Signed-off-by: Piyush Patle <piyushpatle228@xxxxxxxxx>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
Again mostly for my reference (maybe put these under the --- in a patch if we've
discussed it before) the sashiko warning on v7 is a false positive because
we never set the active_scan_mask bit for the timestamp channel.
One day I'll tidy up that index so it doesn't mislead analysis tools and to save
a tiny bit off computation checking a bitmap bit that is never set.
Entirely reasonable that sashiko didn't pick up on that oddity!
Jonathan
> ---
> drivers/iio/adc/hx711.c | 27 +++++++++++++++++++++------
> 1 file changed, 21 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c
> index 0db2d2db9242..183568196d52 100644
> --- a/drivers/iio/adc/hx711.c
> +++ b/drivers/iio/adc/hx711.c
> @@ -269,7 +269,23 @@ static int hx711_set_gain_for_channel(struct hx711_data *hx711_data, int chan)
> return 0;
> }
>
> -static int hx711_reset_read(struct hx711_data *hx711_data, int chan)
> +static int hx711_set_hx711_channel(struct hx711_data *hx711_data,
> + const struct iio_chan_spec *chan,
> + int *trailing_pulses)
> +{
> + int ret;
> +
> + ret = hx711_set_gain_for_channel(hx711_data, chan->channel);
> + if (ret < 0)
> + return ret;
> +
> + *trailing_pulses = hx711_get_gain_to_pulse(hx711_data->gain_set);
> +
> + return 0;
> +}
> +
> +static int hx711_reset_read(struct hx711_data *hx711_data,
> + const struct iio_chan_spec *chan)
> {
> int trailing_pulses;
> int ret;
> @@ -283,11 +299,10 @@ static int hx711_reset_read(struct hx711_data *hx711_data, int chan)
> return -EIO;
> }
>
> - ret = hx711_set_gain_for_channel(hx711_data, chan);
> + ret = hx711_set_hx711_channel(hx711_data, chan, &trailing_pulses);
> if (ret < 0)
> return ret;
>
> - trailing_pulses = hx711_get_gain_to_pulse(hx711_data->gain_set);
> return hx711_read(hx711_data, trailing_pulses);
> }
>
> @@ -301,7 +316,7 @@ static int hx711_read_raw(struct iio_dev *indio_dev,
> case IIO_CHAN_INFO_RAW:
> mutex_lock(&hx711_data->lock);
>
> - *val = hx711_reset_read(hx711_data, chan->channel);
> + *val = hx711_reset_read(hx711_data, chan);
>
> mutex_unlock(&hx711_data->lock);
>
> @@ -391,8 +406,8 @@ static irqreturn_t hx711_trigger(int irq, void *p)
> memset(&hx711_data->buffer, 0, sizeof(hx711_data->buffer));
>
> iio_for_each_active_channel(indio_dev, i) {
> - hx711_data->buffer.channel[j] = hx711_reset_read(hx711_data,
> - indio_dev->channels[i].channel);
> + hx711_data->buffer.channel[j] =
> + hx711_reset_read(hx711_data, &indio_dev->channels[i]);
> j++;
> }
>