From: Michael Hennerich Date: Mon, 21 Mar 2011 15:44:38 +0000 (+0100) Subject: staging: IIO: IMU: ADIS16400: Make sure only enabled scan_elements are pushed into... X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0fea4d6192cb82789e28905240d3c1dac6529c7c;p=mv-sheeva.git staging: IIO: IMU: ADIS16400: Make sure only enabled scan_elements are pushed into the ring Signed-off-by: Michael Hennerich Acked-by: Jonathan Cameron CC: stable Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c index ac381ca126f..da28cb4288a 100644 --- a/drivers/staging/iio/imu/adis16400_ring.c +++ b/drivers/staging/iio/imu/adis16400_ring.c @@ -160,9 +160,10 @@ static void adis16400_trigger_bh_to_ring(struct work_struct *work_s) work_trigger_to_ring); struct iio_ring_buffer *ring = st->indio_dev->ring; - int i = 0; + int i = 0, j; s16 *data; size_t datasize = ring->access.get_bytes_per_datum(ring); + unsigned long mask = ring->scan_mask; data = kmalloc(datasize , GFP_KERNEL); if (data == NULL) { @@ -172,9 +173,12 @@ static void adis16400_trigger_bh_to_ring(struct work_struct *work_s) if (ring->scan_count) if (adis16400_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0) - for (; i < ring->scan_count; i++) + for (; i < ring->scan_count; i++) { + j = __ffs(mask); + mask &= ~(1 << j); data[i] = be16_to_cpup( - (__be16 *)&(st->rx[i*2])); + (__be16 *)&(st->rx[j*2])); + } /* Guaranteed to be aligned with 8 byte boundary */ if (ring->scan_timestamp)