iio: humidity: am2315: Fix buffer alignment in iio_push_to_buffers_with_timestamp()
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 1 May 2021 17:01:13 +0000 (18:01 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 May 2021 12:54:29 +0000 (13:54 +0100)
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: 0d96d5ead3f7 ("iio: humidity: Add triggered buffer support for AM2315")
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20210501170121.512209-12-jic23@kernel.org
drivers/iio/humidity/am2315.c

index 8d7ec2f..4a39f10 100644 (file)
 struct am2315_data {
        struct i2c_client *client;
        struct mutex lock;
-       s16 buffer[8]; /* 2x16-bit channels + 2x16 padding + 4x16 timestamp */
+       /* Ensure timestamp is naturally aligned */
+       struct {
+               s16 chans[2];
+               s64 timestamp __aligned(8);
+       } scan;
 };
 
 struct am2315_sensor_data {
@@ -166,20 +170,20 @@ static irqreturn_t am2315_trigger_handler(int irq, void *p)
 
        mutex_lock(&data->lock);
        if (*(indio_dev->active_scan_mask) == AM2315_ALL_CHANNEL_MASK) {
-               data->buffer[0] = sensor_data.hum_data;
-               data->buffer[1] = sensor_data.temp_data;
+               data->scan.chans[0] = sensor_data.hum_data;
+               data->scan.chans[1] = sensor_data.temp_data;
        } else {
                i = 0;
                for_each_set_bit(bit, indio_dev->active_scan_mask,
                                 indio_dev->masklength) {
-                       data->buffer[i] = (bit ? sensor_data.temp_data :
-                                                sensor_data.hum_data);
+                       data->scan.chans[i] = (bit ? sensor_data.temp_data :
+                                              sensor_data.hum_data);
                        i++;
                }
        }
        mutex_unlock(&data->lock);
 
-       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);