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: Peter Meerwald <pmeerw@pmeerw.net> Reported-by: Robert Deliën <robert@delien.nl> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
Родитель
c0a36f08f4
Коммит
d29f592929
|
@ -98,7 +98,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev,
|
|||
mutex_unlock(&data->lock);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
*val = sign_extend32(be32_to_cpu(tmp) >> 12, 23);
|
||||
*val = be32_to_cpu(tmp) >> 12;
|
||||
return IIO_VAL_INT;
|
||||
case IIO_TEMP: /* in 0.0625 celsius / LSB */
|
||||
mutex_lock(&data->lock);
|
||||
|
@ -112,7 +112,7 @@ static int mpl3115_read_raw(struct iio_dev *indio_dev,
|
|||
mutex_unlock(&data->lock);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
*val = sign_extend32(be32_to_cpu(tmp) >> 20, 15);
|
||||
*val = sign_extend32(be32_to_cpu(tmp) >> 20, 11);
|
||||
return IIO_VAL_INT;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -185,7 +185,7 @@ static const struct iio_chan_spec mpl3115_channels[] = {
|
|||
BIT(IIO_CHAN_INFO_SCALE),
|
||||
.scan_index = 0,
|
||||
.scan_type = {
|
||||
.sign = 's',
|
||||
.sign = 'u',
|
||||
.realbits = 20,
|
||||
.storagebits = 32,
|
||||
.shift = 12,
|
||||
|
|
Загрузка…
Ссылка в новой задаче