iio: adc: ad7923: fix channel readings for some variants

commit f4f43f01cff2f29779343ade755191afd2581c77 upstream.

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: f2f7a44970 ("iio:adc:ad7923: Add support for the ad7904/ad7914/ad7924")
Fixes: 851644a60d ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Nuno Sá
2022-09-12 10:12:21 +02:00
committed by Greg Kroah-Hartman
parent ea4dcd3d6a
commit ae49d80400

View File

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