On Tue, 2023-09-26 at 11:57 +0300, Ramona Gradinariu wrote: > 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@xxxxxxxxxx> > --- Reviewed-by: Nuno Sa <nuno.sa@xxxxxxxxxx> > drivers/iio/imu/adis16475.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/iio/imu/adis16475.c b/drivers/iio/imu/adis16475.c > index 00e4e09cdafb..9af07fec0d89 100644 > --- a/drivers/iio/imu/adis16475.c > +++ b/drivers/iio/imu/adis16475.c > @@ -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; You could use ADIS16500_BURST_DATA_SEL_1_CHN_MASK but I kind of agree like this is more obvious what's going on... > break; > case ADIS16475_SCAN_DELTANG_X ... ADIS16475_SCAN_DELTVEL_Z: > buff_offset = ADIS16475_SCAN_DELTANG_X;