iio: sca3000: Use scan_type when processing raw data
Use channel definition as root of trust and replace constant when reading elements directly using the raw sysfs attributes. Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Link: https://lore.kernel.org/r/20211104082413.3681212-5-gwendal@chromium.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
1aa2f96abb
commit
5405c9b407
@ -534,6 +534,13 @@ static const struct iio_chan_spec sca3000_channels_with_temp[] = {
|
||||
BIT(IIO_CHAN_INFO_OFFSET),
|
||||
/* No buffer support */
|
||||
.scan_index = -1,
|
||||
.scan_type = {
|
||||
.sign = 'u',
|
||||
.realbits = 9,
|
||||
.storagebits = 16,
|
||||
.shift = 5,
|
||||
.endianness = IIO_BE,
|
||||
},
|
||||
},
|
||||
{
|
||||
.type = IIO_ACCEL,
|
||||
@ -730,8 +737,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev,
|
||||
mutex_unlock(&st->lock);
|
||||
return ret;
|
||||
}
|
||||
*val = (be16_to_cpup((__be16 *)st->rx) >> 3) & 0x1FFF;
|
||||
*val = sign_extend32(*val, 12);
|
||||
*val = sign_extend32(be16_to_cpup((__be16 *)st->rx) >>
|
||||
chan->scan_type.shift,
|
||||
chan->scan_type.realbits - 1);
|
||||
} else {
|
||||
/* get the temperature when available */
|
||||
ret = sca3000_read_data_short(st,
|
||||
@ -741,8 +749,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev,
|
||||
mutex_unlock(&st->lock);
|
||||
return ret;
|
||||
}
|
||||
*val = ((st->rx[0] & 0x3F) << 3) |
|
||||
((st->rx[1] & 0xE0) >> 5);
|
||||
*val = (be16_to_cpup((__be16 *)st->rx) >>
|
||||
chan->scan_type.shift) &
|
||||
GENMASK(chan->scan_type.realbits - 1, 0);
|
||||
}
|
||||
mutex_unlock(&st->lock);
|
||||
return IIO_VAL_INT;
|
||||
|
Loading…
Reference in New Issue
Block a user