| .. | .. | 
|---|
|  | 1 | +// SPDX-License-Identifier: GPL-2.0-or-later | 
|---|
| 1 | 2 | /* | 
|---|
| 2 | 3 | * ADIS16130 Digital Output, High Precision Angular Rate Sensor driver | 
|---|
| 3 | 4 | * | 
|---|
| 4 | 5 | * Copyright 2010 Analog Devices Inc. | 
|---|
| 5 |  | - * | 
|---|
| 6 |  | - * Licensed under the GPL-2 or later. | 
|---|
| 7 | 6 | */ | 
|---|
| 8 | 7 |  | 
|---|
| 9 | 8 | #include <linux/mutex.h> | 
|---|
| .. | .. | 
|---|
| 12 | 11 | #include <linux/module.h> | 
|---|
| 13 | 12 |  | 
|---|
| 14 | 13 | #include <linux/iio/iio.h> | 
|---|
|  | 14 | + | 
|---|
|  | 15 | +#include <asm/unaligned.h> | 
|---|
| 15 | 16 |  | 
|---|
| 16 | 17 | #define ADIS16130_CON         0x0 | 
|---|
| 17 | 18 | #define ADIS16130_CON_RD      (1 << 6) | 
|---|
| .. | .. | 
|---|
| 60 | 61 |  | 
|---|
| 61 | 62 | ret = spi_sync_transfer(st->us, &xfer, 1); | 
|---|
| 62 | 63 | if (ret == 0) | 
|---|
| 63 |  | -		*val = (st->buf[1] << 16) | (st->buf[2] << 8) | st->buf[3]; | 
|---|
|  | 64 | +		*val = get_unaligned_be24(&st->buf[1]); | 
|---|
| 64 | 65 | mutex_unlock(&st->buf_lock); | 
|---|
| 65 | 66 |  | 
|---|
| 66 | 67 | return ret; | 
|---|
| .. | .. | 
|---|
| 77 | 78 | switch (mask) { | 
|---|
| 78 | 79 | case IIO_CHAN_INFO_RAW: | 
|---|
| 79 | 80 | /* Take the iio_dev status lock */ | 
|---|
| 80 |  | -		mutex_lock(&indio_dev->mlock); | 
|---|
| 81 | 81 | ret = adis16130_spi_read(indio_dev, chan->address, &temp); | 
|---|
| 82 |  | -		mutex_unlock(&indio_dev->mlock); | 
|---|
| 83 | 82 | if (ret) | 
|---|
| 84 | 83 | return ret; | 
|---|
| 85 | 84 | *val = temp; | 
|---|
| .. | .. | 
|---|
| 156 | 155 | indio_dev->name = spi->dev.driver->name; | 
|---|
| 157 | 156 | indio_dev->channels = adis16130_channels; | 
|---|
| 158 | 157 | indio_dev->num_channels = ARRAY_SIZE(adis16130_channels); | 
|---|
| 159 |  | -	indio_dev->dev.parent = &spi->dev; | 
|---|
| 160 | 158 | indio_dev->info = &adis16130_info; | 
|---|
| 161 | 159 | indio_dev->modes = INDIO_DIRECT_MODE; | 
|---|
| 162 | 160 |  | 
|---|