]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: fix drivers that check buffer->scan_mask
authorOctavian Purdila <octavian.purdila@intel.com>
Mon, 2 Mar 2015 19:03:05 +0000 (21:03 +0200)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 13 Apr 2015 15:48:55 +0000 (16:48 +0100)
commit 70dddeee8945a0e62525a278ae7b91778f82f765 upstream.

If the in-kernel push interface is used we may have a different masks
on the device buffer and the kernel buffer and in this case the device
should generate data for the reunion of the buffers, which is
available at indio_dev->active_scan_mask.

Compiled tested only except for bmc150-accel which was tested at
runtime with the hardware.

Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
[ luis: backported to 3.16: dropped changes to:
  - drivers/iio/accel/bmc150-accel.c
  - drivers/iio/accel/kxcjk-1013.c
  - drivers/iio/gyro/bmg160.c
  - drivers/iio/imu/kmx61.c
  - drivers/iio/proximity/sx9500.c ]
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
drivers/iio/accel/bma180.c
drivers/iio/adc/at91_adc.c
drivers/iio/adc/ti_am335x_adc.c

index 19100fddd2edb7e8c11f367ae4061346fcd10089..d075d02b841fc7f1b85f9e6833b79304a419a57d 100644 (file)
@@ -483,7 +483,7 @@ static irqreturn_t bma180_trigger_handler(int irq, void *p)
 
        mutex_lock(&data->mutex);
 
-       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
+       for_each_set_bit(bit, indio_dev->active_scan_mask,
                         indio_dev->masklength) {
                ret = bma180_get_acc_reg(data, bit);
                if (ret < 0) {
index f508bd6b46e3a483b57b4bef4c22c0c700fd8a47..e7ff26a4aef927ce07bb86a1f5dbb6061b763842 100644 (file)
@@ -544,7 +544,6 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
 {
        struct iio_dev *idev = iio_trigger_get_drvdata(trig);
        struct at91_adc_state *st = iio_priv(idev);
-       struct iio_buffer *buffer = idev->buffer;
        struct at91_adc_reg_desc *reg = st->registers;
        u32 status = at91_adc_readl(st, reg->trigger_register);
        int value;
@@ -564,7 +563,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
                at91_adc_writel(st, reg->trigger_register,
                                status | value);
 
-               for_each_set_bit(bit, buffer->scan_mask,
+               for_each_set_bit(bit, idev->active_scan_mask,
                                 st->num_channels) {
                        struct iio_chan_spec const *chan = idev->channels + bit;
                        at91_adc_writel(st, AT91_ADC_CHER,
@@ -579,7 +578,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
                at91_adc_writel(st, reg->trigger_register,
                                status & ~value);
 
-               for_each_set_bit(bit, buffer->scan_mask,
+               for_each_set_bit(bit, idev->active_scan_mask,
                                 st->num_channels) {
                        struct iio_chan_spec const *chan = idev->channels + bit;
                        at91_adc_writel(st, AT91_ADC_CHDR,
index d5dc4c6ce86ca3fcdadbaaa21867a15e9ef25ce3..9d2957696b239e0903673c9f059b2394fb6ab65c 100644 (file)
@@ -189,12 +189,11 @@ static int tiadc_buffer_preenable(struct iio_dev *indio_dev)
 static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
 {
        struct tiadc_device *adc_dev = iio_priv(indio_dev);
-       struct iio_buffer *buffer = indio_dev->buffer;
        unsigned int enb = 0;
        u8 bit;
 
        tiadc_step_config(indio_dev);
-       for_each_set_bit(bit, buffer->scan_mask, adc_dev->channels)
+       for_each_set_bit(bit, indio_dev->active_scan_mask, adc_dev->channels)
                enb |= (get_adc_step_bit(adc_dev, bit) << 1);
        adc_dev->buffer_en_ch_steps = enb;