Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: fix drivers that check buffer->scan_mask

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>
Cc: <stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Octavian Purdila and committed by
Jonathan Cameron
70dddeee abe46b89

+9 -11
+1 -1
drivers/iio/accel/bma180.c
··· 659 659 660 660 mutex_lock(&data->mutex); 661 661 662 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 662 + for_each_set_bit(bit, indio_dev->active_scan_mask, 663 663 indio_dev->masklength) { 664 664 ret = bma180_get_data_reg(data, bit); 665 665 if (ret < 0) {
+1 -1
drivers/iio/accel/bmc150-accel.c
··· 986 986 int bit, ret, i = 0; 987 987 988 988 mutex_lock(&data->mutex); 989 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 989 + for_each_set_bit(bit, indio_dev->active_scan_mask, 990 990 indio_dev->masklength) { 991 991 ret = i2c_smbus_read_word_data(data->client, 992 992 BMC150_ACCEL_AXIS_TO_REG(bit));
+1 -1
drivers/iio/accel/kxcjk-1013.c
··· 956 956 957 957 mutex_lock(&data->mutex); 958 958 959 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 959 + for_each_set_bit(bit, indio_dev->active_scan_mask, 960 960 indio_dev->masklength) { 961 961 ret = kxcjk1013_get_acc_reg(data, bit); 962 962 if (ret < 0) {
+2 -3
drivers/iio/adc/at91_adc.c
··· 544 544 { 545 545 struct iio_dev *idev = iio_trigger_get_drvdata(trig); 546 546 struct at91_adc_state *st = iio_priv(idev); 547 - struct iio_buffer *buffer = idev->buffer; 548 547 struct at91_adc_reg_desc *reg = st->registers; 549 548 u32 status = at91_adc_readl(st, reg->trigger_register); 550 549 int value; ··· 563 564 at91_adc_writel(st, reg->trigger_register, 564 565 status | value); 565 566 566 - for_each_set_bit(bit, buffer->scan_mask, 567 + for_each_set_bit(bit, idev->active_scan_mask, 567 568 st->num_channels) { 568 569 struct iio_chan_spec const *chan = idev->channels + bit; 569 570 at91_adc_writel(st, AT91_ADC_CHER, ··· 578 579 at91_adc_writel(st, reg->trigger_register, 579 580 status & ~value); 580 581 581 - for_each_set_bit(bit, buffer->scan_mask, 582 + for_each_set_bit(bit, idev->active_scan_mask, 582 583 st->num_channels) { 583 584 struct iio_chan_spec const *chan = idev->channels + bit; 584 585 at91_adc_writel(st, AT91_ADC_CHDR,
+1 -2
drivers/iio/adc/ti_am335x_adc.c
··· 188 188 static int tiadc_buffer_postenable(struct iio_dev *indio_dev) 189 189 { 190 190 struct tiadc_device *adc_dev = iio_priv(indio_dev); 191 - struct iio_buffer *buffer = indio_dev->buffer; 192 191 unsigned int enb = 0; 193 192 u8 bit; 194 193 195 194 tiadc_step_config(indio_dev); 196 - for_each_set_bit(bit, buffer->scan_mask, adc_dev->channels) 195 + for_each_set_bit(bit, indio_dev->active_scan_mask, adc_dev->channels) 197 196 enb |= (get_adc_step_bit(adc_dev, bit) << 1); 198 197 adc_dev->buffer_en_ch_steps = enb; 199 198
+1 -1
drivers/iio/gyro/bmg160.c
··· 822 822 int bit, ret, i = 0; 823 823 824 824 mutex_lock(&data->mutex); 825 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 825 + for_each_set_bit(bit, indio_dev->active_scan_mask, 826 826 indio_dev->masklength) { 827 827 ret = i2c_smbus_read_word_data(data->client, 828 828 BMG160_AXIS_TO_REG(bit));
+1 -1
drivers/iio/imu/kmx61.c
··· 1227 1227 base = KMX61_MAG_XOUT_L; 1228 1228 1229 1229 mutex_lock(&data->lock); 1230 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 1230 + for_each_set_bit(bit, indio_dev->active_scan_mask, 1231 1231 indio_dev->masklength) { 1232 1232 ret = kmx61_read_measurement(data, base, bit); 1233 1233 if (ret < 0) {
+1 -1
drivers/iio/proximity/sx9500.c
··· 494 494 495 495 mutex_lock(&data->mutex); 496 496 497 - for_each_set_bit(bit, indio_dev->buffer->scan_mask, 497 + for_each_set_bit(bit, indio_dev->active_scan_mask, 498 498 indio_dev->masklength) { 499 499 ret = sx9500_read_proximity(data, &indio_dev->channels[bit], 500 500 &val);