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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'char-misc-5.19-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull IIO driver fixes from Greg KH:
"Here are a set of IIO driver fixes for 5.19-rc4. Jonathan said it best
in his pull request to me, so I'll just quote it here below, as that's
the only changes we have right now for the char-misc driver tree:

testing:
- Fix a missing MODULE_LICENSE() warning by restricting possible
build configs.

Various drivers:
- Fix ordering of iio_get_trigger() being called before
iio_trigger_register()

adi,admv1014:
- Fix dubious x & !y warning.

adi,axi-adc:
- Fix missing of_node_put() in error and normal paths.

aspeed,adc:
- Add missing of_node_put()

fsl,mma8452:
- Fix broken probing from device tree.
- Drop check on return value of i2c write to device to cause reset
as ACK will be missing (device reset before sending it).

fsl,vf610:
- Fix documentation of in_conversion_mode ABI.

iio-trig-sysfs:
- Ensure irq work has finished before freeing the trigger.

invensense,mpu3050:
- Disable regulators in error path.

invensense,icm42600:
- Fix collision of enum value of 0 with error path where 0 is no
match.

renesas,rzg2l_Adc:
- Add missing fwnode_handle_put() in error path.

rescale:
- Fix a boolean logic bug for detection of raw + scale affecting
an obscure corner case.

semtech,sx9324:
- Check return value of read of pin_defs

st,stm32-adc:
- Fix interaction across ADC instances for some supported devices.
- Drop false spurious IRQ messages.
- Fix calibration value handling. If we can't calibrate don't
expose the vref_int channel.
- Fix maximum clock rate for stm32pm15x

ti,ads131e08:
- Add missing fwnode_handle_put() in error paths.

xilinx,ams:
- Fix variable checked for error from platform_get_irq()

x-powers,axp288:
- Overide TS_PIN bias current for boards where it is not correctly
initialized.

yamaha,yas530:
- Fix inverted check on calibration data being all zeros.

All of these have been in linux-next for a while with no reported
problems"

* tag 'char-misc-5.19-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (26 commits)
iio:proximity:sx9324: Check ret value of device_property_read_u32_array()
iio: accel: mma8452: ignore the return value of reset operation
iio: adc: stm32: fix maximum clock rate for stm32mp15x
iio: adc: stm32: fix vrefint wrong calibration value handling
iio: imu: inv_icm42600: Fix broken icm42600 (chip id 0 value)
iio: adc: vf610: fix conversion mode sysfs node name
iio: adc: adi-axi-adc: Fix refcount leak in adi_axi_adc_attach_client
iio: test: fix missing MODULE_LICENSE for IIO_RESCALE=m
iio:humidity:hts221: rearrange iio trigger get and register
iio:chemical:ccs811: rearrange iio trigger get and register
iio:accel:mxc4005: rearrange iio trigger get and register
iio:accel:kxcjk-1013: rearrange iio trigger get and register
iio:accel:bma180: rearrange iio trigger get and register
iio: afe: rescale: Fix boolean logic bug
iio: adc: aspeed: Fix refcount leak in aspeed_adc_set_trim_data
iio: adc: stm32: Fix IRQs on STM32F4 by removing custom spurious IRQs message
iio: adc: stm32: Fix ADCs iteration in irq handler
iio: adc: ti-ads131e08: add missing fwnode_handle_put() in ads131e08_alloc_channels()
iio: adc: rzg2l_adc: add missing fwnode_handle_put() in rzg2l_adc_parse_properties()
iio: trigger: sysfs: fix use-after-free on remove
...

+92 -52
+1 -1
Documentation/ABI/testing/sysfs-bus-iio-vf610
··· 1 - What: /sys/bus/iio/devices/iio:deviceX/conversion_mode 1 + What: /sys/bus/iio/devices/iio:deviceX/in_conversion_mode 2 2 KernelVersion: 4.2 3 3 Contact: linux-iio@vger.kernel.org 4 4 Description:
+2 -1
drivers/iio/accel/bma180.c
··· 1006 1006 1007 1007 data->trig->ops = &bma180_trigger_ops; 1008 1008 iio_trigger_set_drvdata(data->trig, indio_dev); 1009 - indio_dev->trig = iio_trigger_get(data->trig); 1010 1009 1011 1010 ret = iio_trigger_register(data->trig); 1012 1011 if (ret) 1013 1012 goto err_trigger_free; 1013 + 1014 + indio_dev->trig = iio_trigger_get(data->trig); 1014 1015 } 1015 1016 1016 1017 ret = iio_triggered_buffer_setup(indio_dev, NULL,
+2 -2
drivers/iio/accel/kxcjk-1013.c
··· 1554 1554 1555 1555 data->dready_trig->ops = &kxcjk1013_trigger_ops; 1556 1556 iio_trigger_set_drvdata(data->dready_trig, indio_dev); 1557 - indio_dev->trig = data->dready_trig; 1558 - iio_trigger_get(indio_dev->trig); 1559 1557 ret = iio_trigger_register(data->dready_trig); 1560 1558 if (ret) 1561 1559 goto err_poweroff; 1560 + 1561 + indio_dev->trig = iio_trigger_get(data->dready_trig); 1562 1562 1563 1563 data->motion_trig->ops = &kxcjk1013_trigger_ops; 1564 1564 iio_trigger_set_drvdata(data->motion_trig, indio_dev);
+14 -8
drivers/iio/accel/mma8452.c
··· 1511 1511 int i; 1512 1512 int ret; 1513 1513 1514 - ret = i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG2, 1514 + /* 1515 + * Find on fxls8471, after config reset bit, it reset immediately, 1516 + * and will not give ACK, so here do not check the return value. 1517 + * The following code will read the reset register, and check whether 1518 + * this reset works. 1519 + */ 1520 + i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG2, 1515 1521 MMA8452_CTRL_REG2_RST); 1516 - if (ret < 0) 1517 - return ret; 1518 1522 1519 1523 for (i = 0; i < 10; i++) { 1520 1524 usleep_range(100, 200); ··· 1561 1557 mutex_init(&data->lock); 1562 1558 1563 1559 data->chip_info = device_get_match_data(&client->dev); 1564 - if (!data->chip_info && id) { 1565 - data->chip_info = &mma_chip_info_table[id->driver_data]; 1566 - } else { 1567 - dev_err(&client->dev, "unknown device model\n"); 1568 - return -ENODEV; 1560 + if (!data->chip_info) { 1561 + if (id) { 1562 + data->chip_info = &mma_chip_info_table[id->driver_data]; 1563 + } else { 1564 + dev_err(&client->dev, "unknown device model\n"); 1565 + return -ENODEV; 1566 + } 1569 1567 } 1570 1568 1571 1569 ret = iio_read_mount_matrix(&client->dev, &data->orientation);
+2 -2
drivers/iio/accel/mxc4005.c
··· 456 456 457 457 data->dready_trig->ops = &mxc4005_trigger_ops; 458 458 iio_trigger_set_drvdata(data->dready_trig, indio_dev); 459 - indio_dev->trig = data->dready_trig; 460 - iio_trigger_get(indio_dev->trig); 461 459 ret = devm_iio_trigger_register(&client->dev, 462 460 data->dready_trig); 463 461 if (ret) { ··· 463 465 "failed to register trigger\n"); 464 466 return ret; 465 467 } 468 + 469 + indio_dev->trig = iio_trigger_get(data->dready_trig); 466 470 } 467 471 468 472 return devm_iio_device_register(&client->dev, indio_dev);
+3
drivers/iio/adc/adi-axi-adc.c
··· 322 322 323 323 if (!try_module_get(cl->dev->driver->owner)) { 324 324 mutex_unlock(&registered_clients_lock); 325 + of_node_put(cln); 325 326 return ERR_PTR(-ENODEV); 326 327 } 327 328 328 329 get_device(cl->dev); 329 330 cl->info = info; 330 331 mutex_unlock(&registered_clients_lock); 332 + of_node_put(cln); 331 333 return cl; 332 334 } 333 335 334 336 mutex_unlock(&registered_clients_lock); 337 + of_node_put(cln); 335 338 336 339 return ERR_PTR(-EPROBE_DEFER); 337 340 }
+1
drivers/iio/adc/aspeed_adc.c
··· 186 186 return -EOPNOTSUPP; 187 187 } 188 188 scu = syscon_node_to_regmap(syscon); 189 + of_node_put(syscon); 189 190 if (IS_ERR(scu)) { 190 191 dev_warn(data->dev, "Failed to get syscon regmap\n"); 191 192 return -EOPNOTSUPP;
+8
drivers/iio/adc/axp288_adc.c
··· 196 196 }, 197 197 .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA, 198 198 }, 199 + { 200 + /* Nuvision Solo 10 Draw */ 201 + .matches = { 202 + DMI_MATCH(DMI_SYS_VENDOR, "TMAX"), 203 + DMI_MATCH(DMI_PRODUCT_NAME, "TM101W610L"), 204 + }, 205 + .driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA, 206 + }, 199 207 {} 200 208 }; 201 209
+6 -2
drivers/iio/adc/rzg2l_adc.c
··· 334 334 i = 0; 335 335 device_for_each_child_node(&pdev->dev, fwnode) { 336 336 ret = fwnode_property_read_u32(fwnode, "reg", &channel); 337 - if (ret) 337 + if (ret) { 338 + fwnode_handle_put(fwnode); 338 339 return ret; 340 + } 339 341 340 - if (channel >= RZG2L_ADC_MAX_CHANNELS) 342 + if (channel >= RZG2L_ADC_MAX_CHANNELS) { 343 + fwnode_handle_put(fwnode); 341 344 return -EINVAL; 345 + } 342 346 343 347 chan_array[i].type = IIO_VOLTAGE; 344 348 chan_array[i].indexed = 1;
+7 -2
drivers/iio/adc/stm32-adc-core.c
··· 64 64 * @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet) 65 65 * @has_syscfg: SYSCFG capability flags 66 66 * @num_irqs: number of interrupt lines 67 + * @num_adcs: maximum number of ADC instances in the common registers 67 68 */ 68 69 struct stm32_adc_priv_cfg { 69 70 const struct stm32_adc_common_regs *regs; ··· 72 71 u32 max_clk_rate_hz; 73 72 unsigned int has_syscfg; 74 73 unsigned int num_irqs; 74 + unsigned int num_adcs; 75 75 }; 76 76 77 77 /** ··· 354 352 * before invoking the interrupt handler (e.g. call ISR only for 355 353 * IRQ-enabled ADCs). 356 354 */ 357 - for (i = 0; i < priv->cfg->num_irqs; i++) { 355 + for (i = 0; i < priv->cfg->num_adcs; i++) { 358 356 if ((status & priv->cfg->regs->eoc_msk[i] && 359 357 stm32_adc_eoc_enabled(priv, i)) || 360 358 (status & priv->cfg->regs->ovr_msk[i])) ··· 794 792 .clk_sel = stm32f4_adc_clk_sel, 795 793 .max_clk_rate_hz = 36000000, 796 794 .num_irqs = 1, 795 + .num_adcs = 3, 797 796 }; 798 797 799 798 static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = { ··· 803 800 .max_clk_rate_hz = 36000000, 804 801 .has_syscfg = HAS_VBOOSTER, 805 802 .num_irqs = 1, 803 + .num_adcs = 2, 806 804 }; 807 805 808 806 static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = { 809 807 .regs = &stm32h7_adc_common_regs, 810 808 .clk_sel = stm32h7_adc_clk_sel, 811 - .max_clk_rate_hz = 40000000, 809 + .max_clk_rate_hz = 36000000, 812 810 .has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD, 813 811 .num_irqs = 2, 812 + .num_adcs = 2, 814 813 }; 815 814 816 815 static const struct of_device_id stm32_adc_of_match[] = {
+17 -20
drivers/iio/adc/stm32-adc.c
··· 1365 1365 else 1366 1366 ret = -EINVAL; 1367 1367 1368 - if (mask == IIO_CHAN_INFO_PROCESSED && adc->vrefint.vrefint_cal) 1368 + if (mask == IIO_CHAN_INFO_PROCESSED) 1369 1369 *val = STM32_ADC_VREFINT_VOLTAGE * adc->vrefint.vrefint_cal / *val; 1370 1370 1371 1371 iio_device_release_direct_mode(indio_dev); ··· 1407 1407 struct stm32_adc *adc = iio_priv(indio_dev); 1408 1408 const struct stm32_adc_regspec *regs = adc->cfg->regs; 1409 1409 u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg); 1410 - u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg); 1411 1410 1412 1411 /* Check ovr status right now, as ovr mask should be already disabled */ 1413 1412 if (status & regs->isr_ovr.mask) { ··· 1421 1422 return IRQ_HANDLED; 1422 1423 } 1423 1424 1424 - if (!(status & mask)) 1425 - dev_err_ratelimited(&indio_dev->dev, 1426 - "Unexpected IRQ: IER=0x%08x, ISR=0x%08x\n", 1427 - mask, status); 1428 - 1429 1425 return IRQ_NONE; 1430 1426 } 1431 1427 ··· 1430 1436 struct stm32_adc *adc = iio_priv(indio_dev); 1431 1437 const struct stm32_adc_regspec *regs = adc->cfg->regs; 1432 1438 u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg); 1433 - u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg); 1434 - 1435 - if (!(status & mask)) 1436 - return IRQ_WAKE_THREAD; 1437 1439 1438 1440 if (status & regs->isr_ovr.mask) { 1439 1441 /* ··· 1969 1979 1970 1980 for (i = 0; i < STM32_ADC_INT_CH_NB; i++) { 1971 1981 if (!strncmp(stm32_adc_ic[i].name, ch_name, STM32_ADC_CH_SZ)) { 1972 - adc->int_ch[i] = chan; 1973 - 1974 - if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT) 1975 - continue; 1982 + if (stm32_adc_ic[i].idx != STM32_ADC_INT_CH_VREFINT) { 1983 + adc->int_ch[i] = chan; 1984 + break; 1985 + } 1976 1986 1977 1987 /* Get calibration data for vrefint channel */ 1978 1988 ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint); ··· 1980 1990 return dev_err_probe(indio_dev->dev.parent, ret, 1981 1991 "nvmem access error\n"); 1982 1992 } 1983 - if (ret == -ENOENT) 1984 - dev_dbg(&indio_dev->dev, "vrefint calibration not found\n"); 1985 - else 1986 - adc->vrefint.vrefint_cal = vrefint; 1993 + if (ret == -ENOENT) { 1994 + dev_dbg(&indio_dev->dev, "vrefint calibration not found. Skip vrefint channel\n"); 1995 + return ret; 1996 + } else if (!vrefint) { 1997 + dev_dbg(&indio_dev->dev, "Null vrefint calibration value. Skip vrefint channel\n"); 1998 + return -ENOENT; 1999 + } 2000 + adc->int_ch[i] = chan; 2001 + adc->vrefint.vrefint_cal = vrefint; 1987 2002 } 1988 2003 } 1989 2004 ··· 2025 2030 } 2026 2031 strncpy(adc->chan_name[val], name, STM32_ADC_CH_SZ); 2027 2032 ret = stm32_adc_populate_int_ch(indio_dev, name, val); 2028 - if (ret) 2033 + if (ret == -ENOENT) 2034 + continue; 2035 + else if (ret) 2029 2036 goto err; 2030 2037 } else if (ret != -EINVAL) { 2031 2038 dev_err(&indio_dev->dev, "Invalid label %d\n", ret);
+7 -3
drivers/iio/adc/ti-ads131e08.c
··· 739 739 device_for_each_child_node(dev, node) { 740 740 ret = fwnode_property_read_u32(node, "reg", &channel); 741 741 if (ret) 742 - return ret; 742 + goto err_child_out; 743 743 744 744 ret = fwnode_property_read_u32(node, "ti,gain", &tmp); 745 745 if (ret) { ··· 747 747 } else { 748 748 ret = ads131e08_pga_gain_to_field_value(st, tmp); 749 749 if (ret < 0) 750 - return ret; 750 + goto err_child_out; 751 751 752 752 channel_config[i].pga_gain = tmp; 753 753 } ··· 758 758 } else { 759 759 ret = ads131e08_validate_channel_mux(st, tmp); 760 760 if (ret) 761 - return ret; 761 + goto err_child_out; 762 762 763 763 channel_config[i].mux = tmp; 764 764 } ··· 784 784 st->channel_config = channel_config; 785 785 786 786 return 0; 787 + 788 + err_child_out: 789 + fwnode_handle_put(node); 790 + return ret; 787 791 } 788 792 789 793 static void ads131e08_regulator_disable(void *data)
+1 -1
drivers/iio/adc/xilinx-ams.c
··· 1409 1409 1410 1410 irq = platform_get_irq(pdev, 0); 1411 1411 if (irq < 0) 1412 - return ret; 1412 + return irq; 1413 1413 1414 1414 ret = devm_request_irq(&pdev->dev, irq, &ams_irq, 0, "ams-irq", 1415 1415 indio_dev);
+1 -1
drivers/iio/afe/iio-rescale.c
··· 277 277 chan->ext_info = rescale->ext_info; 278 278 chan->type = rescale->cfg->type; 279 279 280 - if (iio_channel_has_info(schan, IIO_CHAN_INFO_RAW) || 280 + if (iio_channel_has_info(schan, IIO_CHAN_INFO_RAW) && 281 281 iio_channel_has_info(schan, IIO_CHAN_INFO_SCALE)) { 282 282 dev_info(dev, "using raw+scale source channel\n"); 283 283 } else if (iio_channel_has_info(schan, IIO_CHAN_INFO_PROCESSED)) {
+2 -2
drivers/iio/chemical/ccs811.c
··· 499 499 500 500 data->drdy_trig->ops = &ccs811_trigger_ops; 501 501 iio_trigger_set_drvdata(data->drdy_trig, indio_dev); 502 - indio_dev->trig = data->drdy_trig; 503 - iio_trigger_get(indio_dev->trig); 504 502 ret = iio_trigger_register(data->drdy_trig); 505 503 if (ret) 506 504 goto err_poweroff; 505 + 506 + indio_dev->trig = iio_trigger_get(data->drdy_trig); 507 507 } 508 508 509 509 ret = iio_triggered_buffer_setup(indio_dev, NULL,
+4 -2
drivers/iio/frequency/admv1014.c
··· 700 700 ADMV1014_DET_EN_MSK; 701 701 702 702 enable_reg = FIELD_PREP(ADMV1014_P1DB_COMPENSATION_MSK, st->p1db_comp ? 3 : 0) | 703 - FIELD_PREP(ADMV1014_IF_AMP_PD_MSK, !(st->input_mode)) | 704 - FIELD_PREP(ADMV1014_BB_AMP_PD_MSK, st->input_mode) | 703 + FIELD_PREP(ADMV1014_IF_AMP_PD_MSK, 704 + (st->input_mode == ADMV1014_IF_MODE) ? 0 : 1) | 705 + FIELD_PREP(ADMV1014_BB_AMP_PD_MSK, 706 + (st->input_mode == ADMV1014_IF_MODE) ? 1 : 0) | 705 707 FIELD_PREP(ADMV1014_DET_EN_MSK, st->det_en); 706 708 707 709 return __admv1014_spi_update_bits(st, ADMV1014_REG_ENABLE, enable_reg_msk, enable_reg);
+1
drivers/iio/gyro/mpu3050-core.c
··· 875 875 ret = regmap_update_bits(mpu3050->map, MPU3050_PWR_MGM, 876 876 MPU3050_PWR_MGM_SLEEP, 0); 877 877 if (ret) { 878 + regulator_bulk_disable(ARRAY_SIZE(mpu3050->regs), mpu3050->regs); 878 879 dev_err(mpu3050->dev, "error setting power mode\n"); 879 880 return ret; 880 881 }
+4 -1
drivers/iio/humidity/hts221_buffer.c
··· 135 135 136 136 iio_trigger_set_drvdata(hw->trig, iio_dev); 137 137 hw->trig->ops = &hts221_trigger_ops; 138 + 139 + err = devm_iio_trigger_register(hw->dev, hw->trig); 140 + 138 141 iio_dev->trig = iio_trigger_get(hw->trig); 139 142 140 - return devm_iio_trigger_register(hw->dev, hw->trig); 143 + return err; 141 144 } 142 145 143 146 static int hts221_buffer_preenable(struct iio_dev *iio_dev)
+1
drivers/iio/imu/inv_icm42600/inv_icm42600.h
··· 17 17 #include "inv_icm42600_buffer.h" 18 18 19 19 enum inv_icm42600_chip { 20 + INV_CHIP_INVALID, 20 21 INV_CHIP_ICM42600, 21 22 INV_CHIP_ICM42602, 22 23 INV_CHIP_ICM42605,
+1 -1
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
··· 565 565 bool open_drain; 566 566 int ret; 567 567 568 - if (chip < 0 || chip >= INV_CHIP_NB) { 568 + if (chip <= INV_CHIP_INVALID || chip >= INV_CHIP_NB) { 569 569 dev_err(dev, "invalid chip = %d\n", chip); 570 570 return -ENODEV; 571 571 }
+1 -1
drivers/iio/magnetometer/yamaha-yas530.c
··· 639 639 dev_dbg(yas5xx->dev, "calibration data: %*ph\n", 14, data); 640 640 641 641 /* Sanity check, is this all zeroes? */ 642 - if (memchr_inv(data, 0x00, 13)) { 642 + if (memchr_inv(data, 0x00, 13) == NULL) { 643 643 if (!(data[13] & BIT(7))) 644 644 dev_warn(yas5xx->dev, "calibration is blank!\n"); 645 645 }
+3
drivers/iio/proximity/sx9324.c
··· 885 885 break; 886 886 ret = device_property_read_u32_array(dev, prop, pin_defs, 887 887 ARRAY_SIZE(pin_defs)); 888 + if (ret) 889 + break; 890 + 888 891 for (pin = 0; pin < SX9324_NUM_PINS; pin++) 889 892 raw |= (pin_defs[pin] << (2 * pin)) & 890 893 SX9324_REG_AFE_PH0_PIN_MASK(pin);
+1 -1
drivers/iio/test/Kconfig
··· 6 6 # Keep in alphabetical order 7 7 config IIO_RESCALE_KUNIT_TEST 8 8 bool "Test IIO rescale conversion functions" 9 - depends on KUNIT=y && !IIO_RESCALE 9 + depends on KUNIT=y && IIO_RESCALE=y 10 10 default KUNIT_ALL_TESTS 11 11 help 12 12 If you want to run tests on the iio-rescale code say Y here.
+1 -1
drivers/iio/test/Makefile
··· 4 4 # 5 5 6 6 # Keep in alphabetical order 7 - obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o ../afe/iio-rescale.o 7 + obj-$(CONFIG_IIO_RESCALE_KUNIT_TEST) += iio-test-rescale.o 8 8 obj-$(CONFIG_IIO_TEST_FORMAT) += iio-test-format.o 9 9 CFLAGS_iio-test-format.o += $(DISABLE_STRUCTLEAK_PLUGIN)
+1
drivers/iio/trigger/iio-trig-sysfs.c
··· 190 190 } 191 191 192 192 iio_trigger_unregister(t->trig); 193 + irq_work_sync(&t->work); 193 194 iio_trigger_free(t->trig); 194 195 195 196 list_del(&t->l);