Merge tag 'iio-fixes-for-5.16b' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-next

Jonathan writes:

2nd set of IIO fixes for 5.16

Note 1st set were before the merge window.

Biggest set in here fix what happens when things go wrong in
the interrupt handlers for an IIO trigger.

Otherwise normal mix of recent and ancient bugs.

trigger core
- Fix reference counting bug that was preventing the iio_trig
structures from being released.
adxrs290
- Correctly sign extend the rate and temperature data.
at91-sama5d2
- Fix sign extension from the wrong bit and use the scan_type
values to avoid it being open coded in two places (which were
out of sync)
axp20x_adc
- Fix current reporting bit depth.
dln2-adc
- Fix a lock ordering issue and lockdep complaint that results.
- Add error handling for failure to register the trigger.
imx8qxp
- Wrong config dependency
kxcjk-1013
- Potential leak due to wrong guard on cleanup.
ltr501, kxsd9, stk3310, itg3200, ad7768
- Don't return error codes from interrupt handler and call
iio_trigger_notify_done() on all paths to avoid leaving
trigger disabled on an intermittent fault.
mma8452
- Fix missing iio_trigger_get() that could lead to use after free.
stm32
- Fix a current leak.
- Avoid null pointer derefence on defer_probe error due to wrong
struct device being passed.
stm32-timer
- Drop space in MODULE_ALIAS.

* tag 'iio-fixes-for-5.16b' of https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio:
iio: trigger: stm32-timer: fix MODULE_ALIAS
iio: adc: stm32: fix null pointer on defer_probe error
iio: at91-sama5d2: Fix incorrect sign extension
iio: adc: axp20x_adc: fix charging current reporting on AXP22x
iio: gyro: adxrs290: fix data signedness
iio: ad7768-1: Call iio_trigger_notify_done() on error
iio: itg3200: Call iio_trigger_notify_done() on error
iio: imx8qxp-adc: fix dependency to the intended ARCH_MXC config
iio: dln2: Check return value of devm_iio_trigger_register()
iio: trigger: Fix reference counting
iio: dln2-adc: Fix lockdep complaint
iio: adc: stm32: fix a current leak by resetting pcsel before disabling vdda
iio: mma8452: Fix trigger reference couting
iio: stk3310: Don't return error code in interrupt handler
iio: kxsd9: Don't return error code in trigger handler
iio: ltr501: Don't return error code in trigger handler
iio: accel: kxcjk-1013: Fix possible memory leak in probe and remove

+2 -3
drivers/iio/accel/kxcjk-1013.c
··· 1595 1595 return 0; 1596 1596 1597 1597 err_buffer_cleanup: 1598 - if (data->dready_trig) 1599 - iio_triggered_buffer_cleanup(indio_dev); 1598 + iio_triggered_buffer_cleanup(indio_dev); 1600 1599 err_trigger_unregister: 1601 1600 if (data->dready_trig) 1602 1601 iio_trigger_unregister(data->dready_trig); ··· 1617 1618 pm_runtime_disable(&client->dev); 1618 1619 pm_runtime_set_suspended(&client->dev); 1619 1620 1621 + iio_triggered_buffer_cleanup(indio_dev); 1620 1622 if (data->dready_trig) { 1621 - iio_triggered_buffer_cleanup(indio_dev); 1622 1623 iio_trigger_unregister(data->dready_trig); 1623 1624 iio_trigger_unregister(data->motion_trig); 1624 1625 }
+3 -3
drivers/iio/accel/kxsd9.c
··· 224 224 hw_values.chan, 225 225 sizeof(hw_values.chan)); 226 226 if (ret) { 227 - dev_err(st->dev, 228 - "error reading data\n"); 229 - return ret; 227 + dev_err(st->dev, "error reading data: %d\n", ret); 228 + goto out; 230 229 } 231 230 232 231 iio_push_to_buffers_with_timestamp(indio_dev, 233 232 &hw_values, 234 233 iio_get_time_ns(indio_dev)); 234 + out: 235 235 iio_trigger_notify_done(indio_dev->trig); 236 236 237 237 return IRQ_HANDLED;
+1 -1
drivers/iio/accel/mma8452.c
··· 1470 1470 if (ret) 1471 1471 return ret; 1472 1472 1473 - indio_dev->trig = trig; 1473 + indio_dev->trig = iio_trigger_get(trig); 1474 1474 1475 1475 return 0; 1476 1476 }
+1 -1
drivers/iio/adc/Kconfig
··· 532 532 533 533 config IMX8QXP_ADC 534 534 tristate "NXP IMX8QXP ADC driver" 535 - depends on ARCH_MXC_ARM64 || COMPILE_TEST 535 + depends on ARCH_MXC || COMPILE_TEST 536 536 depends on HAS_IOMEM 537 537 help 538 538 Say yes here to build support for IMX8QXP ADC.
+1 -1
drivers/iio/adc/ad7768-1.c
··· 480 480 iio_push_to_buffers_with_timestamp(indio_dev, &st->data.scan, 481 481 iio_get_time_ns(indio_dev)); 482 482 483 - iio_trigger_notify_done(indio_dev->trig); 484 483 err_unlock: 484 + iio_trigger_notify_done(indio_dev->trig); 485 485 mutex_unlock(&st->lock); 486 486 487 487 return IRQ_HANDLED;
+2 -1
drivers/iio/adc/at91-sama5d2_adc.c
··· 1586 1586 *val = st->conversion_value; 1587 1587 ret = at91_adc_adjust_val_osr(st, val); 1588 1588 if (chan->scan_type.sign == 's') 1589 - *val = sign_extend32(*val, 11); 1589 + *val = sign_extend32(*val, 1590 + chan->scan_type.realbits - 1); 1590 1591 st->conversion_done = false; 1591 1592 } 1592 1593
+3 -15
drivers/iio/adc/axp20x_adc.c
··· 251 251 struct iio_chan_spec const *chan, int *val) 252 252 { 253 253 struct axp20x_adc_iio *info = iio_priv(indio_dev); 254 - int size; 255 254 256 - /* 257 - * N.B.: Unlike the Chinese datasheets tell, the charging current is 258 - * stored on 12 bits, not 13 bits. Only discharging current is on 13 259 - * bits. 260 - */ 261 - if (chan->type == IIO_CURRENT && chan->channel == AXP22X_BATT_DISCHRG_I) 262 - size = 13; 263 - else 264 - size = 12; 265 - 266 - *val = axp20x_read_variable_width(info->regmap, chan->address, size); 255 + *val = axp20x_read_variable_width(info->regmap, chan->address, 12); 267 256 if (*val < 0) 268 257 return *val; 269 258 ··· 375 386 return IIO_VAL_INT_PLUS_MICRO; 376 387 377 388 case IIO_CURRENT: 378 - *val = 0; 379 - *val2 = 500000; 380 - return IIO_VAL_INT_PLUS_MICRO; 389 + *val = 1; 390 + return IIO_VAL_INT; 381 391 382 392 case IIO_TEMP: 383 393 *val = 100;
+12 -9
drivers/iio/adc/dln2-adc.c
··· 248 248 static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel) 249 249 { 250 250 int ret, i; 251 - struct iio_dev *indio_dev = platform_get_drvdata(dln2->pdev); 252 251 u16 conflict; 253 252 __le16 value; 254 253 int olen = sizeof(value); ··· 256 257 .chan = channel, 257 258 }; 258 259 259 - ret = iio_device_claim_direct_mode(indio_dev); 260 - if (ret < 0) 261 - return ret; 262 - 263 260 ret = dln2_adc_set_chan_enabled(dln2, channel, true); 264 261 if (ret < 0) 265 - goto release_direct; 262 + return ret; 266 263 267 264 ret = dln2_adc_set_port_enabled(dln2, true, &conflict); 268 265 if (ret < 0) { ··· 295 300 dln2_adc_set_port_enabled(dln2, false, NULL); 296 301 disable_chan: 297 302 dln2_adc_set_chan_enabled(dln2, channel, false); 298 - release_direct: 299 - iio_device_release_direct_mode(indio_dev); 300 303 301 304 return ret; 302 305 } ··· 330 337 331 338 switch (mask) { 332 339 case IIO_CHAN_INFO_RAW: 340 + ret = iio_device_claim_direct_mode(indio_dev); 341 + if (ret < 0) 342 + return ret; 343 + 333 344 mutex_lock(&dln2->mutex); 334 345 ret = dln2_adc_read(dln2, chan->channel); 335 346 mutex_unlock(&dln2->mutex); 347 + 348 + iio_device_release_direct_mode(indio_dev); 336 349 337 350 if (ret < 0) 338 351 return ret; ··· 655 656 return -ENOMEM; 656 657 } 657 658 iio_trigger_set_drvdata(dln2->trig, dln2); 658 - devm_iio_trigger_register(dev, dln2->trig); 659 + ret = devm_iio_trigger_register(dev, dln2->trig); 660 + if (ret) { 661 + dev_err(dev, "failed to register trigger: %d\n", ret); 662 + return ret; 663 + } 659 664 iio_trigger_set_immutable(indio_dev, dln2->trig); 660 665 661 666 ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
+2 -1
drivers/iio/adc/stm32-adc.c
··· 1117 1117 { 1118 1118 struct stm32_adc *adc = iio_priv(indio_dev); 1119 1119 1120 + stm32_adc_writel(adc, STM32H7_ADC_PCSEL, 0); 1120 1121 stm32h7_adc_disable(indio_dev); 1121 1122 stm32_adc_int_ch_disable(adc); 1122 1123 stm32h7_adc_enter_pwr_down(adc); ··· 1987 1986 /* Get calibration data for vrefint channel */ 1988 1987 ret = nvmem_cell_read_u16(&indio_dev->dev, "vrefint", &vrefint); 1989 1988 if (ret && ret != -ENOENT) { 1990 - return dev_err_probe(&indio_dev->dev, ret, 1989 + return dev_err_probe(indio_dev->dev.parent, ret, 1991 1990 "nvmem access error\n"); 1992 1991 } 1993 1992 if (ret == -ENOENT)
+3 -2
drivers/iio/gyro/adxrs290.c
··· 7 7 */ 8 8 9 9 #include <linux/bitfield.h> 10 + #include <linux/bitops.h> 10 11 #include <linux/delay.h> 11 12 #include <linux/device.h> 12 13 #include <linux/kernel.h> ··· 125 124 goto err_unlock; 126 125 } 127 126 128 - *val = temp; 127 + *val = sign_extend32(temp, 15); 129 128 130 129 err_unlock: 131 130 mutex_unlock(&st->lock); ··· 147 146 } 148 147 149 148 /* extract lower 12 bits temperature reading */ 150 - *val = temp & 0x0FFF; 149 + *val = sign_extend32(temp, 11); 151 150 152 151 err_unlock: 153 152 mutex_unlock(&st->lock);
+1 -1
drivers/iio/gyro/itg3200_buffer.c
··· 61 61 62 62 iio_push_to_buffers_with_timestamp(indio_dev, &scan, pf->timestamp); 63 63 64 + error_ret: 64 65 iio_trigger_notify_done(indio_dev->trig); 65 66 66 - error_ret: 67 67 return IRQ_HANDLED; 68 68 } 69 69
-1
drivers/iio/industrialio-trigger.c
··· 556 556 irq_modify_status(trig->subirq_base + i, 557 557 IRQ_NOREQUEST | IRQ_NOAUTOEN, IRQ_NOPROBE); 558 558 } 559 - get_device(&trig->dev); 560 559 561 560 return trig; 562 561
+1 -1
drivers/iio/light/ltr501.c
··· 1275 1275 ret = regmap_bulk_read(data->regmap, LTR501_ALS_DATA1, 1276 1276 als_buf, sizeof(als_buf)); 1277 1277 if (ret < 0) 1278 - return ret; 1278 + goto done; 1279 1279 if (test_bit(0, indio_dev->active_scan_mask)) 1280 1280 scan.channels[j++] = le16_to_cpu(als_buf[1]); 1281 1281 if (test_bit(1, indio_dev->active_scan_mask))
+3 -3
drivers/iio/light/stk3310.c
··· 546 546 mutex_lock(&data->lock); 547 547 ret = regmap_field_read(data->reg_flag_nf, &dir); 548 548 if (ret < 0) { 549 - dev_err(&data->client->dev, "register read failed\n"); 550 - mutex_unlock(&data->lock); 551 - return ret; 549 + dev_err(&data->client->dev, "register read failed: %d\n", ret); 550 + goto out; 552 551 } 553 552 event = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, 1, 554 553 IIO_EV_TYPE_THRESH, ··· 559 560 ret = regmap_field_write(data->reg_flag_psint, 0); 560 561 if (ret < 0) 561 562 dev_err(&data->client->dev, "failed to reset interrupts\n"); 563 + out: 562 564 mutex_unlock(&data->lock); 563 565 564 566 return IRQ_HANDLED;
+1 -1
drivers/iio/trigger/stm32-timer-trigger.c
··· 912 912 }; 913 913 module_platform_driver(stm32_timer_trigger_driver); 914 914 915 - MODULE_ALIAS("platform: stm32-timer-trigger"); 915 + MODULE_ALIAS("platform:stm32-timer-trigger"); 916 916 MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver"); 917 917 MODULE_LICENSE("GPL v2");