aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iio/adc/ti-ads124s08.c')
-rw-r--r--drivers/iio/adc/ti-ads124s08.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/iio/adc/ti-ads124s08.c b/drivers/iio/adc/ti-ads124s08.c
index 4b4fbe33930c..b4a128b19188 100644
--- a/drivers/iio/adc/ti-ads124s08.c
+++ b/drivers/iio/adc/ti-ads124s08.c
@@ -99,6 +99,14 @@ struct ads124s_private {
99 struct gpio_desc *reset_gpio; 99 struct gpio_desc *reset_gpio;
100 struct spi_device *spi; 100 struct spi_device *spi;
101 struct mutex lock; 101 struct mutex lock;
102 /*
103 * Used to correctly align data.
104 * Ensure timestamp is naturally aligned.
105 * Note that the full buffer length may not be needed if not
106 * all channels are enabled, as long as the alignment of the
107 * timestamp is maintained.
108 */
109 u32 buffer[ADS124S08_MAX_CHANNELS + sizeof(s64)/sizeof(u32)] __aligned(8);
102 u8 data[5] ____cacheline_aligned; 110 u8 data[5] ____cacheline_aligned;
103}; 111};
104 112
@@ -269,7 +277,6 @@ static irqreturn_t ads124s_trigger_handler(int irq, void *p)
269 struct iio_poll_func *pf = p; 277 struct iio_poll_func *pf = p;
270 struct iio_dev *indio_dev = pf->indio_dev; 278 struct iio_dev *indio_dev = pf->indio_dev;
271 struct ads124s_private *priv = iio_priv(indio_dev); 279 struct ads124s_private *priv = iio_priv(indio_dev);
272 u32 buffer[ADS124S08_MAX_CHANNELS + sizeof(s64)/sizeof(u16)];
273 int scan_index, j = 0; 280 int scan_index, j = 0;
274 int ret; 281 int ret;
275 282
@@ -284,7 +291,7 @@ static irqreturn_t ads124s_trigger_handler(int irq, void *p)
284 if (ret) 291 if (ret)
285 dev_err(&priv->spi->dev, "Start ADC conversions failed\n"); 292 dev_err(&priv->spi->dev, "Start ADC conversions failed\n");
286 293
287 buffer[j] = ads124s_read(indio_dev, scan_index); 294 priv->buffer[j] = ads124s_read(indio_dev, scan_index);
288 ret = ads124s_write_cmd(indio_dev, ADS124S08_STOP_CONV); 295 ret = ads124s_write_cmd(indio_dev, ADS124S08_STOP_CONV);
289 if (ret) 296 if (ret)
290 dev_err(&priv->spi->dev, "Stop ADC conversions failed\n"); 297 dev_err(&priv->spi->dev, "Stop ADC conversions failed\n");
@@ -292,7 +299,7 @@ static irqreturn_t ads124s_trigger_handler(int irq, void *p)
292 j++; 299 j++;
293 } 300 }
294 301
295 iio_push_to_buffers_with_timestamp(indio_dev, buffer, 302 iio_push_to_buffers_with_timestamp(indio_dev, priv->buffer,
296 pf->timestamp); 303 pf->timestamp);
297 304
298 iio_trigger_notify_done(indio_dev->trig); 305 iio_trigger_notify_done(indio_dev->trig);