iio: adc: ad7923: fix channel readings for some variants
authorNuno Sá <nuno.sa@analog.com>
Mon, 12 Sep 2022 08:12:21 +0000 (10:12 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 21 Sep 2022 17:42:55 +0000 (18:42 +0100)
Some of the supported devices have 4 or 2 LSB trailing bits that should
not be taken into account. Hence we need to shift these bits out which
fits perfectly on the scan type shift property. This change fixes both
raw and buffered reads.

Fixes: f2f7a449707e ("iio:adc:ad7923: Add support for the ad7904/ad7914/ad7924")
Fixes: 851644a60d20 ("iio: adc: ad7923: Add support for the ad7908/ad7918/ad7928")
Signed-off-by: Nuno Sá <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20220912081223.173584-2-nuno.sa@analog.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/ad7923.c

index edad1f3..502253f 100644 (file)
@@ -93,6 +93,7 @@ enum ad7923_id {
                        .sign = 'u',                                    \
                        .realbits = (bits),                             \
                        .storagebits = 16,                              \
+                       .shift = 12 - (bits),                           \
                        .endianness = IIO_BE,                           \
                },                                                      \
        }
@@ -268,7 +269,8 @@ static int ad7923_read_raw(struct iio_dev *indio_dev,
                        return ret;
 
                if (chan->address == EXTRACT(ret, 12, 4))
-                       *val = EXTRACT(ret, 0, 12);
+                       *val = EXTRACT(ret, chan->scan_type.shift,
+                                      chan->scan_type.realbits);
                else
                        return -EIO;