Commit 5405c9b4 authored by Gwendal Grignou's avatar Gwendal Grignou Committed by Jonathan Cameron

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: default avatarGwendal Grignou <gwendal@chromium.org>
Link: https://lore.kernel.org/r/20211104082413.3681212-5-gwendal@chromium.orgSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 1aa2f96a
...@@ -534,6 +534,13 @@ static const struct iio_chan_spec sca3000_channels_with_temp[] = { ...@@ -534,6 +534,13 @@ static const struct iio_chan_spec sca3000_channels_with_temp[] = {
BIT(IIO_CHAN_INFO_OFFSET), BIT(IIO_CHAN_INFO_OFFSET),
/* No buffer support */ /* No buffer support */
.scan_index = -1, .scan_index = -1,
.scan_type = {
.sign = 'u',
.realbits = 9,
.storagebits = 16,
.shift = 5,
.endianness = IIO_BE,
},
}, },
{ {
.type = IIO_ACCEL, .type = IIO_ACCEL,
...@@ -730,8 +737,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev, ...@@ -730,8 +737,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&st->lock); mutex_unlock(&st->lock);
return ret; return ret;
} }
*val = (be16_to_cpup((__be16 *)st->rx) >> 3) & 0x1FFF; *val = sign_extend32(be16_to_cpup((__be16 *)st->rx) >>
*val = sign_extend32(*val, 12); chan->scan_type.shift,
chan->scan_type.realbits - 1);
} else { } else {
/* get the temperature when available */ /* get the temperature when available */
ret = sca3000_read_data_short(st, ret = sca3000_read_data_short(st,
...@@ -741,8 +749,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev, ...@@ -741,8 +749,9 @@ static int sca3000_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&st->lock); mutex_unlock(&st->lock);
return ret; return ret;
} }
*val = ((st->rx[0] & 0x3F) << 3) | *val = (be16_to_cpup((__be16 *)st->rx) >>
((st->rx[1] & 0xE0) >> 5); chan->scan_type.shift) &
GENMASK(chan->scan_type.realbits - 1, 0);
} }
mutex_unlock(&st->lock); mutex_unlock(&st->lock);
return IIO_VAL_INT; return IIO_VAL_INT;
......
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