Commit d29f5929 authored by Peter Meerwald's avatar Peter Meerwald Committed by Jonathan Cameron

iio: Fix two mpl3115 issues in measurement conversion

(i) pressure is 20-bit unsigned, not signed; the buffer description
is incorrect; for raw reads, this is just cosmetic

(ii) temperature is 12-bit signed, not 16-bit; this affects
readout of temperatures below zero as the sign bit is incorrectly
processed

reported via private mail

Cc: stable@vger.kernel.org
Signed-off-by: default avatarPeter Meerwald <pmeerw@pmeerw.net>
Reported-by: default avatarRobert Deliën <robert@delien.nl>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent c0a36f08
...@@ -98,7 +98,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev, ...@@ -98,7 +98,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&data->lock); mutex_unlock(&data->lock);
if (ret < 0) if (ret < 0)
return ret; return ret;
*val = sign_extend32(be32_to_cpu(tmp) >> 12, 23); *val = be32_to_cpu(tmp) >> 12;
return IIO_VAL_INT; return IIO_VAL_INT;
case IIO_TEMP: /* in 0.0625 celsius / LSB */ case IIO_TEMP: /* in 0.0625 celsius / LSB */
mutex_lock(&data->lock); mutex_lock(&data->lock);
...@@ -112,7 +112,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev, ...@@ -112,7 +112,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev,
mutex_unlock(&data->lock); mutex_unlock(&data->lock);
if (ret < 0) if (ret < 0)
return ret; return ret;
*val = sign_extend32(be32_to_cpu(tmp) >> 20, 15); *val = sign_extend32(be32_to_cpu(tmp) >> 20, 11);
return IIO_VAL_INT; return IIO_VAL_INT;
default: default:
return -EINVAL; return -EINVAL;
...@@ -185,7 +185,7 @@ static const struct iio_chan_spec mpl3115_channels[] = { ...@@ -185,7 +185,7 @@ static const struct iio_chan_spec mpl3115_channels[] = {
BIT(IIO_CHAN_INFO_SCALE), BIT(IIO_CHAN_INFO_SCALE),
.scan_index = 0, .scan_index = 0,
.scan_type = { .scan_type = {
.sign = 's', .sign = 'u',
.realbits = 20, .realbits = 20,
.storagebits = 32, .storagebits = 32,
.shift = 12, .shift = 12,
......
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