iio: mtk-auxadc: fix case IIO_CHAN_INFO_PROCESSED
authorHui Liu <hui.liu@mediatek.com>
Sun, 26 Sep 2021 07:30:28 +0000 (15:30 +0800)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 26 Sep 2021 11:30:09 +0000 (12:30 +0100)
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>
drivers/iio/adc/mt6577_auxadc.c

index 79c1dd6..d4fccd5 100644 (file)
@@ -82,6 +82,10 @@ static const struct iio_chan_spec mt6577_auxadc_iio_channels[] = {
        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 iio_dev *indio_dev,
                }
                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: