Commit f4f43f01 authored by Nuno Sá's avatar Nuno Sá Committed by Jonathan Cameron

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

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: f2f7a449 ("iio:adc:ad7923: Add support for the ad7904/ad7914/ad7924")
Fixes: 851644a6 ("iio: adc: ad7923: Add support for the ad7908/ad7918/ad7928")
Signed-off-by: default avatarNuno 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: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 54861624
...@@ -93,6 +93,7 @@ enum ad7923_id { ...@@ -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, \
}, \ }, \
} }
...@@ -268,7 +269,8 @@ static int ad7923_read_raw(struct iio_dev *indio_dev, ...@@ -268,7 +269,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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment