iio: imu: adis16475: Add buffer padding after temp channel
authorRamona Gradinariu <ramona.gradinariu@analog.com>
Tue, 26 Sep 2023 08:57:21 +0000 (11:57 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Thu, 5 Oct 2023 13:44:05 +0000 (14:44 +0100)
The temperature channel has 16-bit storage size. We need to perform
the padding to have the buffer elements naturally aligned in case
the temperature channel is enabled and there are any 32-bit storage
size channels enabled which have a scan index higher than the
temperature channel scan index.

Fixes: 8f6bc87d67c0 ("iio: imu: adis16475.c: Add delta angle and delta velocity channels")
Signed-off-by: Ramona Gradinariu <ramona.gradinariu@analog.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20230926085721.645687-2-ramona.gradinariu@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/adis16475.c

index 00e4e09cdafbfd0569c20b1c76e932a66c434ffb..9af07fec0d89985e28d1a721ef9e6062b972ff0a 100644 (file)
@@ -1197,6 +1197,16 @@ static irqreturn_t adis16475_trigger_handler(int irq, void *p)
                switch (bit) {
                case ADIS16475_SCAN_TEMP:
                        st->data[i++] = buffer[offset];
+                       /*
+                        * The temperature channel has 16-bit storage size.
+                        * We need to perform the padding to have the buffer
+                        * elements naturally aligned in case there are any
+                        * 32-bit storage size channels enabled which have a
+                        * scan index higher than the temperature channel scan
+                        * index.
+                        */
+                       if (*indio_dev->active_scan_mask & GENMASK(ADIS16475_SCAN_DELTVEL_Z, ADIS16475_SCAN_DELTANG_X))
+                               st->data[i++] = 0;
                        break;
                case ADIS16475_SCAN_DELTANG_X ... ADIS16475_SCAN_DELTVEL_Z:
                        buff_offset = ADIS16475_SCAN_DELTANG_X;