Re: [PATCH v8 v8 06/11] iio: adc: hx711: introduce hx711_chip_info structure

From: Piyush Patle

Date: Mon May 18 2026 - 17:29:02 EST


On Tue, May 12, 2026 at 5:49 PM Jonathan Cameron <jic23@xxxxxxxxxx> wrote:
>
> On Mon, 11 May 2026 23:13:31 +0530
> Piyush Patle <piyushpatle228@xxxxxxxxx> wrote:
>
> > Add a per-variant static configuration structure and populate the IIO
> > device fields from it at probe time.
> >
> > This is a preparatory change for adding support for more HX711-compatible
> > hardware variants without duplicating the probe-time setup.
> >
> > No functional change for existing HX711 users.
> >
> > Signed-off-by: Piyush Patle <piyushpatle228@xxxxxxxxx>
> > Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
>
> Mostly for my reference when v8 sashiko comes in - there was feedback on this
> in v7 but it was something we don't care about - in a driver that supports
> multiple parts - if someone is using the legacy path to force a driver match
> we can't do the right thing - guessing it is an hx711 is not appropriate.
>
> Given it is vanishingly unlikely (famous last words) anyone is using that
> path with a device like this one (who isn't a developer who can easily fix
> that) let us merge this and see if anyone screams before trying to
> deal with that case.

Ack. I will keep the code as-is and add a short note below the --- line for
the Sashiko reports.
For __counted_by_ptr(), this looks like a false positive. The annotation
was added based on your v7 feedback and builds fine on the current
mainline and for the legacy probe concern, I will note that this was discussed
and accepted as very unlikely to affect real users, so I am not adding a
fallback path.
>
> I'm going to hold off for now though as waiting on v8 sashiko review of the
> rest of the series.
>
> Jonathan
>
> > ---
> > drivers/iio/adc/hx711.c | 41 ++++++++++++++++++++++++++++++++++++-----
> > 1 file changed, 36 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c
> > index 86d2a70dd3de..10ccc69f209b 100644
> > --- a/drivers/iio/adc/hx711.c
> > +++ b/drivers/iio/adc/hx711.c
> > @@ -4,6 +4,8 @@
> > *
> > * Copyright (c) 2016 Andreas Klinger <ak@xxxxxxxxxxxxx>
> > */
> > +#include <linux/array_size.h>
> > +#include <linux/dev_printk.h>
> > #include <linux/err.h>
> > #include <linux/kernel.h>
> > #include <linux/module.h>
> > @@ -74,6 +76,20 @@ static int hx711_get_scale_to_gain(const int *gain_scale, int scale)
> > return -EINVAL;
> > }
> >
> > +/**
> > + * struct hx711_chip_info - per-variant static configuration
> > + * @name: IIO device name
> > + * @channels: channel specification array
> > + * @num_channels: number of entries in @channels
> > + * @iio_info: IIO info ops for this variant
> > + */
> > +struct hx711_chip_info {
> > + const char *name;
> > + const struct iio_chan_spec *channels __counted_by_ptr(num_channels);
> > + unsigned int num_channels;
> > + const struct iio_info *iio_info;
> > +};
> > +
> > struct hx711_data {
> > struct device *dev;
> > struct gpio_desc *gpiod_pd_sck;
> > @@ -81,6 +97,7 @@ struct hx711_data {
> > int gain_set; /* gain set on device */
> > int gain_chan_a; /* gain for channel A */
> > int gain_scale[HX711_GAIN_MAX];
> > + const struct hx711_chip_info *chip_info;
> > struct mutex lock;
> > /*
> > * triggered buffer
> > @@ -456,8 +473,16 @@ static const struct iio_chan_spec hx711_chan_spec[] = {
> > IIO_CHAN_SOFT_TIMESTAMP(2),
> > };
> >
> > +static const struct hx711_chip_info hx711_chip = {
> > + .name = "hx711",
> > + .channels = hx711_chan_spec,
> > + .iio_info = &hx711_iio_info,
> > + .num_channels = ARRAY_SIZE(hx711_chan_spec),
> > +};
> > +
> > static int hx711_probe(struct platform_device *pdev)
> > {
> > + const struct hx711_chip_info *chip_info;
> > struct device *dev = &pdev->dev;
> > struct hx711_data *hx711_data;
> > struct iio_dev *indio_dev;
> > @@ -473,6 +498,12 @@ static int hx711_probe(struct platform_device *pdev)
> >
> > mutex_init(&hx711_data->lock);
> >
> > + chip_info = device_get_match_data(dev);
> > + if (!chip_info)
> > + return dev_err_probe(dev, -ENODEV, "missing driver data\n");
> > +
> > + hx711_data->chip_info = chip_info;
> > +
> > /*
> > * PD_SCK stands for power down and serial clock input of HX711
> > * in the driver it is an output
> > @@ -534,11 +565,11 @@ static int hx711_probe(struct platform_device *pdev)
> > hx711_data->data_ready_delay_ns =
> > 1000000000 / hx711_data->clock_frequency;
> >
> > - indio_dev->name = "hx711";
> > - indio_dev->info = &hx711_iio_info;
> > + indio_dev->name = chip_info->name;
> > + indio_dev->info = chip_info->iio_info;
> > indio_dev->modes = INDIO_DIRECT_MODE;
> > - indio_dev->channels = hx711_chan_spec;
> > - indio_dev->num_channels = ARRAY_SIZE(hx711_chan_spec);
> > + indio_dev->channels = chip_info->channels;
> > + indio_dev->num_channels = chip_info->num_channels;
> >
> > ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
> > iio_pollfunc_store_time,
> > @@ -555,7 +586,7 @@ static int hx711_probe(struct platform_device *pdev)
> > }
> >
> > static const struct of_device_id of_hx711_match[] = {
> > - { .compatible = "avia,hx711", },
> > + { .compatible = "avia,hx711", .data = &hx711_chip },
> > { }
> > };
> >
>