The sample buffer contains big endian 16bit words. So use the be16 datatype for the buffer and use the proper helper functions for endianness conversion instead of openconding it. Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx> --- drivers/staging/iio/gyro/adis16080_core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c index 6016e4c..6ff9ffc 100644 --- a/drivers/staging/iio/gyro/adis16080_core.c +++ b/drivers/staging/iio/gyro/adis16080_core.c @@ -39,7 +39,7 @@ struct adis16080_state { struct spi_device *us; struct mutex buf_lock; - u8 buf[2] ____cacheline_aligned; + __be16 buf ____cacheline_aligned; }; static int adis16080_read_sample(struct iio_dev *indio_dev, @@ -60,8 +60,7 @@ static int adis16080_read_sample(struct iio_dev *indio_dev, }; mutex_lock(&st->buf_lock); - st->buf[0] = addr >> 8; - st->buf[1] = addr; + st->buf = cpu_to_be16(addr | ADIS16080_DIN_WRITE); spi_message_init(&m); spi_message_add_tail(&t[0], &m); @@ -69,7 +68,7 @@ static int adis16080_read_sample(struct iio_dev *indio_dev, ret = spi_sync(st->us, &m); if (ret == 0) - *val = sign_extend32(12, ((st->buf[0] & 0xF) << 8) | st->buf[1]); + *val = sign_extend32(12, be16_to_cpu(st->buf)); mutex_unlock(&st->buf_lock); return ret; -- 1.8.0 -- 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