| From c2980c64c7fd4585d684574c92d1624d44961edd Mon Sep 17 00:00:00 2001 |
| From: Hui Liu <hui.liu@mediatek.com> |
| Date: Sun, 26 Sep 2021 15:30:28 +0800 |
| Subject: iio: mtk-auxadc: fix case IIO_CHAN_INFO_PROCESSED |
| |
| From: Hui Liu <hui.liu@mediatek.com> |
| |
| commit c2980c64c7fd4585d684574c92d1624d44961edd upstream. |
| |
| The previous driver does't apply the necessary scaling to take the |
| voltage range into account. |
| We change readback value from raw data to input voltage to fix case |
| IIO_CHAN_INFO_PROCESSED. |
| |
| Fixes: ace4cdfe67be ("iio: adc: mt2701: Add Mediatek auxadc driver for mt2701.") |
| Signed-off-by: Hui Liu <hui.liu@mediatek.com> |
| Link: https://lore.kernel.org/r/20210926073028.11045-2-hui.liu@mediatek.com |
| Cc: <Stable@vger.kernel.org> |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/iio/adc/mt6577_auxadc.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| --- a/drivers/iio/adc/mt6577_auxadc.c |
| +++ b/drivers/iio/adc/mt6577_auxadc.c |
| @@ -82,6 +82,10 @@ static const struct iio_chan_spec mt6577 |
| MT6577_AUXADC_CHANNEL(15), |
| }; |
| |
| +/* For Voltage calculation */ |
| +#define VOLTAGE_FULL_RANGE 1500 /* VA voltage */ |
| +#define AUXADC_PRECISE 4096 /* 12 bits */ |
| + |
| static int mt_auxadc_get_cali_data(int rawdata, bool enable_cali) |
| { |
| return rawdata; |
| @@ -191,6 +195,10 @@ static int mt6577_auxadc_read_raw(struct |
| } |
| if (adc_dev->dev_comp->sample_data_cali) |
| *val = mt_auxadc_get_cali_data(*val, true); |
| + |
| + /* Convert adc raw data to voltage: 0 - 1500 mV */ |
| + *val = *val * VOLTAGE_FULL_RANGE / AUXADC_PRECISE; |
| + |
| return IIO_VAL_INT; |
| |
| default: |