| From 5c29fdc54a9e5d1f2449d6aa3038f9ab885f7a98 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 1 May 2021 18:01:12 +0100 |
| Subject: iio: gyro: bmg160: Fix buffer alignment in |
| iio_push_to_buffers_with_timestamp() |
| |
| From: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| |
| [ Upstream commit 06778d881f3798ce93ffbbbf801234292250b598 ] |
| |
| To make code more readable, use a structure to express the channel |
| layout and ensure the timestamp is 8 byte aligned. |
| |
| Found during an audit of all calls of uses of |
| iio_push_to_buffers_with_timestamp() |
| |
| Fixes: 13426454b649 ("iio: bmg160: Separate i2c and core driver") |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Cc: Stephan Gerhold <stephan@gerhold.net> |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Link: https://lore.kernel.org/r/20210501170121.512209-11-jic23@kernel.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/gyro/bmg160_core.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c |
| index 8ddda96455fc..39fe0b178592 100644 |
| --- a/drivers/iio/gyro/bmg160_core.c |
| +++ b/drivers/iio/gyro/bmg160_core.c |
| @@ -96,7 +96,11 @@ struct bmg160_data { |
| struct iio_trigger *motion_trig; |
| struct iio_mount_matrix orientation; |
| struct mutex mutex; |
| - s16 buffer[8]; |
| + /* Ensure naturally aligned timestamp */ |
| + struct { |
| + s16 chans[3]; |
| + s64 timestamp __aligned(8); |
| + } scan; |
| u32 dps_range; |
| int ev_enable_state; |
| int slope_thres; |
| @@ -880,12 +884,12 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p) |
| |
| mutex_lock(&data->mutex); |
| ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L, |
| - data->buffer, AXIS_MAX * 2); |
| + data->scan.chans, AXIS_MAX * 2); |
| mutex_unlock(&data->mutex); |
| if (ret < 0) |
| goto err; |
| |
| - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, |
| + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, |
| pf->timestamp); |
| err: |
| iio_trigger_notify_done(indio_dev->trig); |
| -- |
| 2.30.2 |
| |