ak8963, ak8975, ak09911 and ak09912 all store measurements in 2's complement and little endian. This enforces le16 to CPU endianness conversion of raw measurements fetched from I2C bus. Signed-off-by: Gregor Boirie <gregor.boirie@xxxxxxxxxx> --- drivers/iio/magnetometer/ak8975.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c index 896b13e3..46c6bd7 100644 --- a/drivers/iio/magnetometer/ak8975.c +++ b/drivers/iio/magnetometer/ak8975.c @@ -655,7 +655,8 @@ static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val) mutex_unlock(&data->lock); /* Clamp to valid range. */ - *val = clamp_t(s16, ret, -data->def->range, data->def->range); + *val = clamp_t(s16, le16_to_cpu((s16)ret), -data->def->range, + data->def->range); return IIO_VAL_INT; exit: -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html