On Wed, 25 Aug 2021 17:25:14 +0200 Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > Without the scale, the values returned to the user are just a picture of > the input voltage against the full scale range of the ADC. We need to > provide the actual conversion factor to get milli-Volts values. > > Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> Odd no one did this before, but such is life ;) Acked-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > --- > drivers/iio/adc/ti_am335x_adc.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c > index d4619fd6fd54..f644898b47dd 100644 > --- a/drivers/iio/adc/ti_am335x_adc.c > +++ b/drivers/iio/adc/ti_am335x_adc.c > @@ -417,6 +417,7 @@ static int tiadc_channel_init(struct device *dev, struct iio_dev *indio_dev, > chan->indexed = 1; > chan->channel = adc_dev->channel_line[i]; > chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW); > + chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE); > chan->datasheet_name = chan_name_ain[chan->channel]; > chan->scan_index = i; > chan->scan_type.sign = 'u'; > @@ -441,6 +442,23 @@ static int tiadc_read_raw(struct iio_dev *indio_dev, > unsigned long timeout; > int ret; > > + switch (mask) { > + case IIO_CHAN_INFO_RAW: > + break; > + case IIO_CHAN_INFO_SCALE: > + switch (chan->type) { > + case IIO_VOLTAGE: > + *val = 1800; > + *val2 = chan->scan_type.realbits; > + return IIO_VAL_FRACTIONAL_LOG2; > + default: > + return -EINVAL; > + } > + break; > + default: > + return -EINVAL; > + } > + > if (iio_buffer_enabled(indio_dev)) > return -EBUSY; >