History

Merge tag 'staging-4.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

Pull staging driver fixes from Greg KH: "Here are some staging driver fixes, well, really all just IIO driver fixes, for 4.0-rc6. They fix issues that have been reported with these drivers. All of these patches have been in linux-next for a while" * tag 'staging-4.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: iio: imu: Use iio_trigger_get for indio_dev->trig assignment iio: adc: vf610: use ADC clock within specification iio/adc/cc10001_adc.c: Fix !HAS_IOMEM build iio: core: Fix double free. iio:inv-mpu6050: Fix inconsistency for the scale channel staging: iio: dummy: Fix undefined symbol build error iio: inv_mpu6050: Clear timestamps fifo while resetting hardware fifo staging: iio: hmc5843: Set iio name property in sysfs iio: bmc150: change sampling frequency iio: fix drivers that check buffer->scan_mask

Linus Torvalds committed 11 years ago

Commit 8eb6dcf2 parents eca8258 dce5bdf17 files · +132 −91Browse files

Unified · Split

17 files
  1. drivers/iio/accel/bma180.c +1 −1
  2. drivers/iio/accel/bmc150-accel.c +10 −10
  3. drivers/iio/accel/kxcjk-1013.c +1 −1
  4. drivers/iio/adc/Kconfig +2 −1
  5. drivers/iio/adc/at91_adc.c +2 −3
  6. drivers/iio/adc/ti_am335x_adc.c +1 −2
  7. drivers/iio/adc/vf610_adc.c +61 −30
  8. drivers/iio/gyro/bmg160.c +1 −1
  9. drivers/iio/imu/adis_trigger.c +1 −1
  10. drivers/iio/imu/inv_mpu6050/inv_mpu_core.c +30 −26
  11. drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c +14 −11
  12. drivers/iio/imu/kmx61.c +1 −1
  13. drivers/iio/industrialio-core.c +3 −2
  14. drivers/iio/industrialio-event.c +1 −0
  15. drivers/iio/proximity/sx9500.c +1 −1
  16. drivers/staging/iio/Kconfig +1 −0
  17. drivers/staging/iio/magnetometer/hmc5843_core.c +1 −0
drivers/iio/accel/bma180.c+1−1
@@ -659,7 +659,7 @@ static irqreturn_t bma180_trigger_handler(int irq, void *p) · 658 unmodified lines
659 659
660 mutex_lock(&data->mutex);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 indio_dev->masklength) {663 indio_dev->masklength) {
664 ret = bma180_get_data_reg(data, bit);664 ret = bma180_get_data_reg(data, bit);
665 if (ret < 0) {665 if (ret < 0) {
drivers/iio/accel/bmc150-accel.c+10−10
@@ -168,14 +168,14 @@ static const struct { · 167 unmodified lines
168 int val;168 int val;
169 int val2;169 int val2;
170 u8 bw_bits;170 u8 bw_bits;
171} bmc150_accel_samp_freq_table[] = { {7, 810000, 0x08},171} bmc150_accel_samp_freq_table[] = { {15, 620000, 0x08},
172 {15, 630000, 0x09},172 {31, 260000, 0x09},
173 {31, 250000, 0x0A},173 {62, 500000, 0x0A},
174 {62, 500000, 0x0B},174 {125, 0, 0x0B},
175 {125, 0, 0x0C},175 {250, 0, 0x0C},
176 {250, 0, 0x0D},176 {500, 0, 0x0D},
177 {500, 0, 0x0E},177 {1000, 0, 0x0E},
178 {1000, 0, 0x0F} };178 {2000, 0, 0x0F} };
179 179
180static const struct {180static const struct {
181 int bw_bits;181 int bw_bits;
@@ -840,7 +840,7 @@ static int bmc150_accel_validate_trigger(struct iio_dev *indio_dev, · 658 unmodified lines
840}840}
841 841
842static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(842static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
843 "7.810000 15.630000 31.250000 62.500000 125 250 500 1000");843 "15.620000 31.260000 62.50000 125 250 500 1000 2000");
844 844
845static struct attribute *bmc150_accel_attributes[] = {845static struct attribute *bmc150_accel_attributes[] = {
846 &iio_const_attr_sampling_frequency_available.dev_attr.attr,846 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
@@ -986,7 +986,7 @@ static irqreturn_t bmc150_accel_trigger_handler(int irq, void *p) · 139 unmodified lines
986 int bit, ret, i = 0;986 int bit, ret, i = 0;
987 987
988 mutex_lock(&data->mutex);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 indio_dev->masklength) {990 indio_dev->masklength) {
991 ret = i2c_smbus_read_word_data(data->client,991 ret = i2c_smbus_read_word_data(data->client,
992 BMC150_ACCEL_AXIS_TO_REG(bit));992 BMC150_ACCEL_AXIS_TO_REG(bit));
drivers/iio/accel/kxcjk-1013.c+1−1
@@ -956,7 +956,7 @@ static irqreturn_t kxcjk1013_trigger_handler(int irq, void *p) · 955 unmodified lines
956 956
957 mutex_lock(&data->mutex);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 indio_dev->masklength) {960 indio_dev->masklength) {
961 ret = kxcjk1013_get_acc_reg(data, bit);961 ret = kxcjk1013_get_acc_reg(data, bit);
962 if (ret < 0) {962 if (ret < 0) {
drivers/iio/adc/Kconfig+2−1
@@ -137,7 +137,8 @@ config AXP288_ADC · 136 unmodified lines
137 137
138config CC10001_ADC138config CC10001_ADC
139 tristate "Cosmic Circuits 10001 ADC driver"139 tristate "Cosmic Circuits 10001 ADC driver"
140 depends on HAS_IOMEM || HAVE_CLK || REGULATOR140 depends on HAVE_CLK || REGULATOR
141 depends on HAS_IOMEM
141 select IIO_BUFFER142 select IIO_BUFFER
142 select IIO_TRIGGERED_BUFFER143 select IIO_TRIGGERED_BUFFER
143 help144 help
drivers/iio/adc/at91_adc.c+2−3
@@ -544,7 +544,6 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 543 unmodified lines
544{544{
545 struct iio_dev *idev = iio_trigger_get_drvdata(trig);545 struct iio_dev *idev = iio_trigger_get_drvdata(trig);
546 struct at91_adc_state *st = iio_priv(idev);546 struct at91_adc_state *st = iio_priv(idev);
547 struct iio_buffer *buffer = idev->buffer;
548 struct at91_adc_reg_desc *reg = st->registers;547 struct at91_adc_reg_desc *reg = st->registers;
549 u32 status = at91_adc_readl(st, reg->trigger_register);548 u32 status = at91_adc_readl(st, reg->trigger_register);
550 int value;549 int value;
@@ -564,7 +563,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 13 unmodified lines
564 at91_adc_writel(st, reg->trigger_register,563 at91_adc_writel(st, reg->trigger_register,
565 status | value);564 status | value);
566 565
567 for_each_set_bit(bit, buffer->scan_mask,566 for_each_set_bit(bit, idev->active_scan_mask,
568 st->num_channels) {567 st->num_channels) {
569 struct iio_chan_spec const *chan = idev->channels + bit;568 struct iio_chan_spec const *chan = idev->channels + bit;
570 at91_adc_writel(st, AT91_ADC_CHER,569 at91_adc_writel(st, AT91_ADC_CHER,
@@ -579,7 +578,7 @@ static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state) · 8 unmodified lines
579 at91_adc_writel(st, reg->trigger_register,578 at91_adc_writel(st, reg->trigger_register,
580 status & ~value);579 status & ~value);
581 580
582 for_each_set_bit(bit, buffer->scan_mask,581 for_each_set_bit(bit, idev->active_scan_mask,
583 st->num_channels) {582 st->num_channels) {
584 struct iio_chan_spec const *chan = idev->channels + bit;583 struct iio_chan_spec const *chan = idev->channels + bit;
585 at91_adc_writel(st, AT91_ADC_CHDR,584 at91_adc_writel(st, AT91_ADC_CHDR,
drivers/iio/adc/ti_am335x_adc.c+1−2
@@ -188,12 +188,11 @@ static int tiadc_buffer_preenable(struct iio_dev *indio_dev) · 187 unmodified lines
188static int tiadc_buffer_postenable(struct iio_dev *indio_dev)188static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
189{189{
190 struct tiadc_device *adc_dev = iio_priv(indio_dev);190 struct tiadc_device *adc_dev = iio_priv(indio_dev);
191 struct iio_buffer *buffer = indio_dev->buffer;
192 unsigned int enb = 0;191 unsigned int enb = 0;
193 u8 bit;192 u8 bit;
194 193
195 tiadc_step_config(indio_dev);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 enb |= (get_adc_step_bit(adc_dev, bit) << 1);196 enb |= (get_adc_step_bit(adc_dev, bit) << 1);
198 adc_dev->buffer_en_ch_steps = enb;197 adc_dev->buffer_en_ch_steps = enb;
199 198
drivers/iio/adc/vf610_adc.c+61−30
@@ -141,9 +141,13 @@ struct vf610_adc { · 140 unmodified lines
141 struct regulator *vref;141 struct regulator *vref;
142 struct vf610_adc_feature adc_feature;142 struct vf610_adc_feature adc_feature;
143 143
144 u32 sample_freq_avail[5];
145
144 struct completion completion;146 struct completion completion;
145};147};
146 148
149static const u32 vf610_hw_avgs[] = { 1, 4, 8, 16, 32 };
150
147#define VF610_ADC_CHAN(_idx, _chan_type) { \151#define VF610_ADC_CHAN(_idx, _chan_type) { \
148 .type = (_chan_type), \152 .type = (_chan_type), \
149 .indexed = 1, \153 .indexed = 1, \
@@ -180,35 +184,47 @@ static const struct iio_chan_spec vf610_adc_iio_channels[] = { · 30 unmodified lines
180 /* sentinel */184 /* sentinel */
181};185};
182 186
183/*187static inline void vf610_adc_calculate_rates(struct vf610_adc *info)
184 * ADC sample frequency, unit is ADCK cycles.188{
185 * ADC clk source is ipg clock, which is the same as bus clock.189 unsigned long adck_rate, ipg_rate = clk_get_rate(info->clk);
186 *190 int i;
187 * ADC conversion time = SFCAdder + AverageNum x (BCT + LSTAdder)191
188 * SFCAdder: fixed to 6 ADCK cycles192 /*
189 * AverageNum: 1, 4, 8, 16, 32 samples for hardware average.193 * Calculate ADC sample frequencies
190 * BCT (Base Conversion Time): fixed to 25 ADCK cycles for 12 bit mode194 * Sample time unit is ADCK cycles. ADCK clk source is ipg clock,
191 * LSTAdder(Long Sample Time): fixed to 3 ADCK cycles195 * which is the same as bus clock.
192 *196 *
193 * By default, enable 12 bit resolution mode, clock source197 * ADC conversion time = SFCAdder + AverageNum x (BCT + LSTAdder)
194 * set to ipg clock, So get below frequency group:198 * SFCAdder: fixed to 6 ADCK cycles
195 */199 * AverageNum: 1, 4, 8, 16, 32 samples for hardware average.
196static const u32 vf610_sample_freq_avail[5] =200 * BCT (Base Conversion Time): fixed to 25 ADCK cycles for 12 bit mode
197{1941176, 559332, 286957, 145374, 73171};201 * LSTAdder(Long Sample Time): fixed to 3 ADCK cycles
202 */
203 adck_rate = ipg_rate / info->adc_feature.clk_div;
204 for (i = 0; i < ARRAY_SIZE(vf610_hw_avgs); i++)
205 info->sample_freq_avail[i] =
206 adck_rate / (6 + vf610_hw_avgs[i] * (25 + 3));
207}
198 208
199static inline void vf610_adc_cfg_init(struct vf610_adc *info)209static inline void vf610_adc_cfg_init(struct vf610_adc *info)
200{210{
211 struct vf610_adc_feature *adc_feature = &info->adc_feature;
212
201 /* set default Configuration for ADC controller */213 /* set default Configuration for ADC controller */
202 info->adc_feature.clk_sel = VF610_ADCIOC_BUSCLK_SET;214 adc_feature->clk_sel = VF610_ADCIOC_BUSCLK_SET;
203 info->adc_feature.vol_ref = VF610_ADCIOC_VR_VREF_SET;215 adc_feature->vol_ref = VF610_ADCIOC_VR_VREF_SET;
216
217 adc_feature->calibration = true;
218 adc_feature->ovwren = true;
219
220 adc_feature->res_mode = 12;
221 adc_feature->sample_rate = 1;
222 adc_feature->lpm = true;
204 223
205 info->adc_feature.calibration = true;224 /* Use a save ADCK which is below 20MHz on all devices */
206 info->adc_feature.ovwren = true;225 adc_feature->clk_div = 8;
207 226
208 info->adc_feature.clk_div = 1;227 vf610_adc_calculate_rates(info);
209 info->adc_feature.res_mode = 12;
210 info->adc_feature.sample_rate = 1;
211 info->adc_feature.lpm = true;
212}228}
213 229
214static void vf610_adc_cfg_post_set(struct vf610_adc *info)230static void vf610_adc_cfg_post_set(struct vf610_adc *info)
@@ -290,12 +306,10 @@ static void vf610_adc_cfg_set(struct vf610_adc *info) · 75 unmodified lines
290 306
291 cfg_data = readl(info->regs + VF610_REG_ADC_CFG);307 cfg_data = readl(info->regs + VF610_REG_ADC_CFG);
292 308
293 /* low power configuration */
294 cfg_data &= ~VF610_ADC_ADLPC_EN;309 cfg_data &= ~VF610_ADC_ADLPC_EN;
295 if (adc_feature->lpm)310 if (adc_feature->lpm)
296 cfg_data |= VF610_ADC_ADLPC_EN;311 cfg_data |= VF610_ADC_ADLPC_EN;
297 312
298 /* disable high speed */
299 cfg_data &= ~VF610_ADC_ADHSC_EN;313 cfg_data &= ~VF610_ADC_ADHSC_EN;
300 314
301 writel(cfg_data, info->regs + VF610_REG_ADC_CFG);315 writel(cfg_data, info->regs + VF610_REG_ADC_CFG);
@@ -435,10 +449,27 @@ static irqreturn_t vf610_adc_isr(int irq, void *dev_id) · 133 unmodified lines
435 return IRQ_HANDLED;449 return IRQ_HANDLED;
436}450}
437 451
438static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("1941176, 559332, 286957, 145374, 73171");452static ssize_t vf610_show_samp_freq_avail(struct device *dev,
453 struct device_attribute *attr, char *buf)
454{
455 struct vf610_adc *info = iio_priv(dev_to_iio_dev(dev));
456 size_t len = 0;
457 int i;
458
459 for (i = 0; i < ARRAY_SIZE(info->sample_freq_avail); i++)
460 len += scnprintf(buf + len, PAGE_SIZE - len,
461 "%u ", info->sample_freq_avail[i]);
462
463 /* replace trailing space by newline */
464 buf[len - 1] = '\n';
465
466 return len;
467}
468
469static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(vf610_show_samp_freq_avail);
439 470
440static struct attribute *vf610_attributes[] = {471static struct attribute *vf610_attributes[] = {
441 &iio_const_attr_sampling_frequency_available.dev_attr.attr,472 &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
442 NULL473 NULL
443};474};
444 475
@@ -502,7 +533,7 @@ static int vf610_read_raw(struct iio_dev *indio_dev, · 57 unmodified lines
502 return IIO_VAL_FRACTIONAL_LOG2;533 return IIO_VAL_FRACTIONAL_LOG2;
503 534
504 case IIO_CHAN_INFO_SAMP_FREQ:535 case IIO_CHAN_INFO_SAMP_FREQ:
505 *val = vf610_sample_freq_avail[info->adc_feature.sample_rate];536 *val = info->sample_freq_avail[info->adc_feature.sample_rate];
506 *val2 = 0;537 *val2 = 0;
507 return IIO_VAL_INT;538 return IIO_VAL_INT;
508 539
@@ -525,9 +556,9 @@ static int vf610_write_raw(struct iio_dev *indio_dev, · 16 unmodified lines
525 switch (mask) {556 switch (mask) {
526 case IIO_CHAN_INFO_SAMP_FREQ:557 case IIO_CHAN_INFO_SAMP_FREQ:
527 for (i = 0;558 for (i = 0;
528 i < ARRAY_SIZE(vf610_sample_freq_avail);559 i < ARRAY_SIZE(info->sample_freq_avail);
529 i++)560 i++)
530 if (val == vf610_sample_freq_avail[i]) {561 if (val == info->sample_freq_avail[i]) {
531 info->adc_feature.sample_rate = i;562 info->adc_feature.sample_rate = i;
532 vf610_adc_sample_set(info);563 vf610_adc_sample_set(info);
533 return 0;564 return 0;
drivers/iio/gyro/bmg160.c+1−1
@@ -822,7 +822,7 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p) · 821 unmodified lines
822 int bit, ret, i = 0;822 int bit, ret, i = 0;
823 823
824 mutex_lock(&data->mutex);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 indio_dev->masklength) {826 indio_dev->masklength) {
827 ret = i2c_smbus_read_word_data(data->client,827 ret = i2c_smbus_read_word_data(data->client,
828 BMG160_AXIS_TO_REG(bit));828 BMG160_AXIS_TO_REG(bit));
drivers/iio/imu/adis_trigger.c+1−1
@@ -60,7 +60,7 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev) · 59 unmodified lines
60 iio_trigger_set_drvdata(adis->trig, adis);60 iio_trigger_set_drvdata(adis->trig, adis);
61 ret = iio_trigger_register(adis->trig);61 ret = iio_trigger_register(adis->trig);
62 62
63 indio_dev->trig = adis->trig;63 indio_dev->trig = iio_trigger_get(adis->trig);
64 if (ret)64 if (ret)
65 goto error_free_irq;65 goto error_free_irq;
66 66
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c+30−26
@@ -410,42 +410,46 @@ error_read_raw: · 409 unmodified lines
410 }410 }
411}411}
412 412
413static int inv_mpu6050_write_fsr(struct inv_mpu6050_state *st, int fsr)413static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val)
414{414{
415 int result;415 int result, i;
416 u8 d;416 u8 d;
417 417
418 if (fsr < 0 || fsr > INV_MPU6050_MAX_GYRO_FS_PARAM)418 for (i = 0; i < ARRAY_SIZE(gyro_scale_6050); ++i) {
419 return -EINVAL;419 if (gyro_scale_6050[i] == val) {
420 if (fsr == st->chip_config.fsr)420 d = (i << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);
421 return 0;421 result = inv_mpu6050_write_reg(st,
422 st->reg->gyro_config, d);
423 if (result)
424 return result;
422 425
423 d = (fsr << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT);426 st->chip_config.fsr = i;
424 result = inv_mpu6050_write_reg(st, st->reg->gyro_config, d);427 return 0;
425 if (result)428 }
426 return result;429 }
427 st->chip_config.fsr = fsr;
428 430
429 return 0;431 return -EINVAL;
430}432}
431 433
432static int inv_mpu6050_write_accel_fs(struct inv_mpu6050_state *st, int fs)434static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val)
433{435{
434 int result;436 int result, i;
435 u8 d;437 u8 d;
436 438
437 if (fs < 0 || fs > INV_MPU6050_MAX_ACCL_FS_PARAM)439 for (i = 0; i < ARRAY_SIZE(accel_scale); ++i) {
438 return -EINVAL;440 if (accel_scale[i] == val) {
439 if (fs == st->chip_config.accl_fs)441 d = (i << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);
440 return 0;442 result = inv_mpu6050_write_reg(st,
443 st->reg->accl_config, d);
444 if (result)
445 return result;
441 446
442 d = (fs << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT);447 st->chip_config.accl_fs = i;
443 result = inv_mpu6050_write_reg(st, st->reg->accl_config, d);448 return 0;
444 if (result)449 }
445 return result;450 }
446 st->chip_config.accl_fs = fs;
447 451
448 return 0;452 return -EINVAL;
449}453}
450 454
451static int inv_mpu6050_write_raw(struct iio_dev *indio_dev,455static int inv_mpu6050_write_raw(struct iio_dev *indio_dev,
@@ -471,10 +475,10 @@ static int inv_mpu6050_write_raw(struct iio_dev *indio_dev, · 19 unmodified lines
471 case IIO_CHAN_INFO_SCALE:475 case IIO_CHAN_INFO_SCALE:
472 switch (chan->type) {476 switch (chan->type) {
473 case IIO_ANGL_VEL:477 case IIO_ANGL_VEL:
474 result = inv_mpu6050_write_fsr(st, val);478 result = inv_mpu6050_write_gyro_scale(st, val2);
475 break;479 break;
476 case IIO_ACCEL:480 case IIO_ACCEL:
477 result = inv_mpu6050_write_accel_fs(st, val);481 result = inv_mpu6050_write_accel_scale(st, val2);
478 break;482 break;
479 default:483 default:
480 result = -EINVAL;484 result = -EINVAL;
drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c+14−11
@@ -24,6 +24,16 @@ · 23 unmodified lines
24#include <linux/poll.h>24#include <linux/poll.h>
25#include "inv_mpu_iio.h"25#include "inv_mpu_iio.h"
26 26
27static void inv_clear_kfifo(struct inv_mpu6050_state *st)
28{
29 unsigned long flags;
30
31 /* take the spin lock sem to avoid interrupt kick in */
32 spin_lock_irqsave(&st->time_stamp_lock, flags);
33 kfifo_reset(&st->timestamps);
34 spin_unlock_irqrestore(&st->time_stamp_lock, flags);
35}
36
27int inv_reset_fifo(struct iio_dev *indio_dev)37int inv_reset_fifo(struct iio_dev *indio_dev)
28{38{
29 int result;39 int result;
@@ -50,6 +60,10 @@ int inv_reset_fifo(struct iio_dev *indio_dev) · 20 unmodified lines
50 INV_MPU6050_BIT_FIFO_RST);60 INV_MPU6050_BIT_FIFO_RST);
51 if (result)61 if (result)
52 goto reset_fifo_fail;62 goto reset_fifo_fail;
63
64 /* clear timestamps fifo */
65 inv_clear_kfifo(st);
66
53 /* enable interrupt */67 /* enable interrupt */
54 if (st->chip_config.accl_fifo_enable ||68 if (st->chip_config.accl_fifo_enable ||
55 st->chip_config.gyro_fifo_enable) {69 st->chip_config.gyro_fifo_enable) {
@@ -83,16 +97,6 @@ reset_fifo_fail: · 27 unmodified lines
83 return result;97 return result;
84}98}
85 99
86static void inv_clear_kfifo(struct inv_mpu6050_state *st)
87{
88 unsigned long flags;
89
90 /* take the spin lock sem to avoid interrupt kick in */
91 spin_lock_irqsave(&st->time_stamp_lock, flags);
92 kfifo_reset(&st->timestamps);
93 spin_unlock_irqrestore(&st->time_stamp_lock, flags);
94}
95
96/**100/**
97 * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt.101 * inv_mpu6050_irq_handler() - Cache a timestamp at each data ready interrupt.
98 */102 */
@@ -184,7 +188,6 @@ end_session: · 85 unmodified lines
184flush_fifo:188flush_fifo:
185 /* Flush HW and SW FIFOs. */189 /* Flush HW and SW FIFOs. */
186 inv_reset_fifo(indio_dev);190 inv_reset_fifo(indio_dev);
187 inv_clear_kfifo(st);
188 mutex_unlock(&indio_dev->mlock);191 mutex_unlock(&indio_dev->mlock);
189 iio_trigger_notify_done(indio_dev->trig);192 iio_trigger_notify_done(indio_dev->trig);
190 193
drivers/iio/imu/kmx61.c+1−1
@@ -1227,7 +1227,7 @@ static irqreturn_t kmx61_trigger_handler(int irq, void *p) · 1226 unmodified lines
1227 base = KMX61_MAG_XOUT_L;1227 base = KMX61_MAG_XOUT_L;
1228 1228
1229 mutex_lock(&data->lock);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 indio_dev->masklength) {1231 indio_dev->masklength) {
1232 ret = kmx61_read_measurement(data, base, bit);1232 ret = kmx61_read_measurement(data, base, bit);
1233 if (ret < 0) {1233 if (ret < 0) {
drivers/iio/industrialio-core.c+3−2
@@ -847,8 +847,7 @@ static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev, · 846 unmodified lines
847 * @attr_list: List of IIO device attributes847 * @attr_list: List of IIO device attributes
848 *848 *
849 * This function frees the memory allocated for each of the IIO device849 * This function frees the memory allocated for each of the IIO device
850 * attributes in the list. Note: if you want to reuse the list after calling850 * attributes in the list.
851 * this function you have to reinitialize it using INIT_LIST_HEAD().
852 */851 */
853void iio_free_chan_devattr_list(struct list_head *attr_list)852void iio_free_chan_devattr_list(struct list_head *attr_list)
854{853{
@@ -856,6 +855,7 @@ void iio_free_chan_devattr_list(struct list_head *attr_list) · 1 unmodified line
856 855
857 list_for_each_entry_safe(p, n, attr_list, l) {856 list_for_each_entry_safe(p, n, attr_list, l) {
858 kfree(p->dev_attr.attr.name);857 kfree(p->dev_attr.attr.name);
858 list_del(&p->l);
859 kfree(p);859 kfree(p);
860 }860 }
861}861}
@@ -936,6 +936,7 @@ static void iio_device_unregister_sysfs(struct iio_dev *indio_dev) · 74 unmodified lines
936 936
937 iio_free_chan_devattr_list(&indio_dev->channel_attr_list);937 iio_free_chan_devattr_list(&indio_dev->channel_attr_list);
938 kfree(indio_dev->chan_attr_group.attrs);938 kfree(indio_dev->chan_attr_group.attrs);
939 indio_dev->chan_attr_group.attrs = NULL;
939}940}
940 941
941static void iio_dev_release(struct device *device)942static void iio_dev_release(struct device *device)
drivers/iio/industrialio-event.c+1−0
@@ -500,6 +500,7 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) · 499 unmodified lines
500error_free_setup_event_lines:500error_free_setup_event_lines:
501 iio_free_chan_devattr_list(&indio_dev->event_interface->dev_attr_list);501 iio_free_chan_devattr_list(&indio_dev->event_interface->dev_attr_list);
502 kfree(indio_dev->event_interface);502 kfree(indio_dev->event_interface);
503 indio_dev->event_interface = NULL;
503 return ret;504 return ret;
504}505}
505 506
drivers/iio/proximity/sx9500.c+1−1
@@ -494,7 +494,7 @@ static irqreturn_t sx9500_trigger_handler(int irq, void *private) · 493 unmodified lines
494 494
495 mutex_lock(&data->mutex);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 indio_dev->masklength) {498 indio_dev->masklength) {
499 ret = sx9500_read_proximity(data, &indio_dev->channels[bit],499 ret = sx9500_read_proximity(data, &indio_dev->channels[bit],
500 &val);500 &val);
drivers/staging/iio/Kconfig+1−0
@@ -38,6 +38,7 @@ config IIO_SIMPLE_DUMMY_EVENTS · 37 unmodified lines
38config IIO_SIMPLE_DUMMY_BUFFER38config IIO_SIMPLE_DUMMY_BUFFER
39 bool "Buffered capture support"39 bool "Buffered capture support"
40 select IIO_BUFFER40 select IIO_BUFFER
41 select IIO_TRIGGER
41 select IIO_KFIFO_BUF42 select IIO_KFIFO_BUF
42 help43 help
43 Add buffered data capture to the simple dummy driver.44 Add buffered data capture to the simple dummy driver.
drivers/staging/iio/magnetometer/hmc5843_core.c+1−0
@@ -592,6 +592,7 @@ int hmc5843_common_probe(struct device *dev, struct regmap *regmap, · 591 unmodified lines
592 mutex_init(&data->lock);592 mutex_init(&data->lock);
593 593
594 indio_dev->dev.parent = dev;594 indio_dev->dev.parent = dev;
595 indio_dev->name = dev->driver->name;
595 indio_dev->info = &hmc5843_info;596 indio_dev->info = &hmc5843_info;
596 indio_dev->modes = INDIO_DIRECT_MODE;597 indio_dev->modes = INDIO_DIRECT_MODE;
597 indio_dev->channels = data->variant->channels;598 indio_dev->channels = data->variant->channels;