mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 04:21:09 -04:00
iio: adc: ti-adc161s626: use DMA-safe memory for spi_read()
Add a DMA-safe buffer and use it for spi_read() instead of a stack
memory. All SPI buffers must be DMA-safe.
Since we only need up to 3 bytes, we just use a u8[] instead of __be16
and __be32 and change the conversion functions appropriately.
Fixes: 4d671b71be ("iio: adc: ti-adc161s626: add support for TI 1-channel differential ADCs")
Signed-off-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
committed by
Jonathan Cameron
parent
24869650df
commit
768461517a
@@ -15,6 +15,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/unaligned.h>
|
||||
#include <linux/iio/iio.h>
|
||||
#include <linux/iio/trigger.h>
|
||||
#include <linux/iio/buffer.h>
|
||||
@@ -70,6 +71,7 @@ struct ti_adc_data {
|
||||
|
||||
u8 read_size;
|
||||
u8 shift;
|
||||
u8 buf[3] __aligned(IIO_DMA_MINALIGN);
|
||||
};
|
||||
|
||||
static int ti_adc_read_measurement(struct ti_adc_data *data,
|
||||
@@ -78,26 +80,20 @@ static int ti_adc_read_measurement(struct ti_adc_data *data,
|
||||
int ret;
|
||||
|
||||
switch (data->read_size) {
|
||||
case 2: {
|
||||
__be16 buf;
|
||||
|
||||
ret = spi_read(data->spi, (void *) &buf, 2);
|
||||
case 2:
|
||||
ret = spi_read(data->spi, data->buf, 2);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
*val = be16_to_cpu(buf);
|
||||
*val = get_unaligned_be16(data->buf);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
__be32 buf;
|
||||
|
||||
ret = spi_read(data->spi, (void *) &buf, 3);
|
||||
case 3:
|
||||
ret = spi_read(data->spi, data->buf, 3);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
*val = be32_to_cpu(buf) >> 8;
|
||||
*val = get_unaligned_be24(data->buf);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user