On Fri, 8 May 2020 14:14:00 -0700 Jonathan Bakker <xc-racer2@xxxxxxx> wrote: > Currently the driver only exposes the raw counts. As we > have the regulator voltage and the maximum value (stored in > the data mask), we can trivially produce a scaling fraction > of voltage / max value. > > This assumes that the regulator voltage is in fact the max > voltage, which appears to be the case for all mainline dts > and cross referenced with the public Exynos4412 and S5PV210 > datasheets. > > Signed-off-by: Jonathan Bakker <xc-racer2@xxxxxxx> Seems reasonable to me. I'd like an exynos Ack though before applying. thanks, Jonathan > --- > drivers/iio/adc/exynos_adc.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/adc/exynos_adc.c b/drivers/iio/adc/exynos_adc.c > index 22131a677445..9d29b56805cd 100644 > --- a/drivers/iio/adc/exynos_adc.c > +++ b/drivers/iio/adc/exynos_adc.c > @@ -531,8 +531,19 @@ static int exynos_read_raw(struct iio_dev *indio_dev, > unsigned long timeout; > int ret; > > - if (mask != IIO_CHAN_INFO_RAW) > + if (mask == IIO_CHAN_INFO_SCALE) { > + ret = regulator_get_voltage(info->vdd); > + if (ret < 0) > + return ret; > + > + /* Regulator voltage is in uV, but need mV */ > + *val = ret / 1000; > + *val2 = info->data->mask; > + > + return IIO_VAL_FRACTIONAL; > + } else if (mask != IIO_CHAN_INFO_RAW) { > return -EINVAL; > + } > > mutex_lock(&indio_dev->mlock); > reinit_completion(&info->completion); > @@ -683,6 +694,7 @@ static const struct iio_info exynos_adc_iio_info = { > .channel = _index, \ > .address = _index, \ > .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ > + .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE), \ > .datasheet_name = _id, \ > } >