Merge tag 'iio-fixes-for-6.14a' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-linus

Jonathan writes:

IIO: 1st set of fixes for the 6.14 cycle

hid-sensors
- Fix an ABI issue that occurred when we gained multiple proximity sensor
support.
adi,adi-axi-adc
- Fix missing pwm-names inItems entry in dt binding.
adi,ad3552r
- Make sure to clear the reset bit in the status flag so future
resets can be detected.
adi,ad7192
- Fix use of value where it should be bit(value) to select channel.
adi,ad7606
- Fix up reporting of wrong available scales.
adi,admv8818
- Force SDO line to be initialized without relying on it already being
intialized to read back current register value.
atmel,sama5d2
- Fix wrong number of bits reported for readings from sama7g5
avago,apds9306
- Fix wrong scaling of scale values (missing a few zeros).
microchip,pac1921
- Fix resource leak by moving ACPI_FREE() call up a few lines.
tyhx,hx9023s
- Fix a use after free caused by releasing firmware a few lines early.

* tag 'iio-fixes-for-6.14a' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio:
iio: filter: admv8818: Force initialization of SDO
iio: adc: ad7606: fix wrong scale available
dt-bindings: iio: dac: adi-axi-adc: fix ad7606 pwm-names
iio: dac: ad3552r: clear reset status flag
iio: adc: ad7192: fix channel select
iio: hid-sensor-prox: Split difference from multiple channels
iio: proximity: Fix use-after-free in hx9023s_send_cfg()
iio: adc: at91-sama5d2_adc: fix sama7g5 realbits value
iio: adc: pac1921: Move ACPI_FREE() to cover all branches
iio: light: apds9306: fix max_scale_nano values

+62 -47
+1
Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
··· 146 146 maxItems: 2 147 147 148 148 pwm-names: 149 + minItems: 1 149 150 items: 150 151 - const: convst1 151 152 - const: convst2
+1 -1
drivers/iio/adc/ad7192.c
··· 1084 1084 1085 1085 conf &= ~AD7192_CONF_CHAN_MASK; 1086 1086 for_each_set_bit(i, scan_mask, 8) 1087 - conf |= FIELD_PREP(AD7192_CONF_CHAN_MASK, i); 1087 + conf |= FIELD_PREP(AD7192_CONF_CHAN_MASK, BIT(i)); 1088 1088 1089 1089 ret = ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, conf); 1090 1090 if (ret < 0)
+1 -1
drivers/iio/adc/ad7606.c
··· 1047 1047 1048 1048 cs = &st->chan_scales[ch]; 1049 1049 *vals = (int *)cs->scale_avail; 1050 - *length = cs->num_scales; 1050 + *length = cs->num_scales * 2; 1051 1051 *type = IIO_VAL_INT_PLUS_MICRO; 1052 1052 1053 1053 return IIO_AVAIL_LIST;
+40 -28
drivers/iio/adc/at91-sama5d2_adc.c
··· 329 329 #define AT91_HWFIFO_MAX_SIZE_STR "128" 330 330 #define AT91_HWFIFO_MAX_SIZE 128 331 331 332 - #define AT91_SAMA5D2_CHAN_SINGLE(index, num, addr) \ 332 + #define AT91_SAMA_CHAN_SINGLE(index, num, addr, rbits) \ 333 333 { \ 334 334 .type = IIO_VOLTAGE, \ 335 335 .channel = num, \ ··· 337 337 .scan_index = index, \ 338 338 .scan_type = { \ 339 339 .sign = 'u', \ 340 - .realbits = 14, \ 340 + .realbits = rbits, \ 341 341 .storagebits = 16, \ 342 342 }, \ 343 343 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ ··· 350 350 .indexed = 1, \ 351 351 } 352 352 353 - #define AT91_SAMA5D2_CHAN_DIFF(index, num, num2, addr) \ 353 + #define AT91_SAMA5D2_CHAN_SINGLE(index, num, addr) \ 354 + AT91_SAMA_CHAN_SINGLE(index, num, addr, 14) 355 + 356 + #define AT91_SAMA7G5_CHAN_SINGLE(index, num, addr) \ 357 + AT91_SAMA_CHAN_SINGLE(index, num, addr, 16) 358 + 359 + #define AT91_SAMA_CHAN_DIFF(index, num, num2, addr, rbits) \ 354 360 { \ 355 361 .type = IIO_VOLTAGE, \ 356 362 .differential = 1, \ ··· 366 360 .scan_index = index, \ 367 361 .scan_type = { \ 368 362 .sign = 's', \ 369 - .realbits = 14, \ 363 + .realbits = rbits, \ 370 364 .storagebits = 16, \ 371 365 }, \ 372 366 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ ··· 378 372 .datasheet_name = "CH"#num"-CH"#num2, \ 379 373 .indexed = 1, \ 380 374 } 375 + 376 + #define AT91_SAMA5D2_CHAN_DIFF(index, num, num2, addr) \ 377 + AT91_SAMA_CHAN_DIFF(index, num, num2, addr, 14) 378 + 379 + #define AT91_SAMA7G5_CHAN_DIFF(index, num, num2, addr) \ 380 + AT91_SAMA_CHAN_DIFF(index, num, num2, addr, 16) 381 381 382 382 #define AT91_SAMA5D2_CHAN_TOUCH(num, name, mod) \ 383 383 { \ ··· 678 666 }; 679 667 680 668 static const struct iio_chan_spec at91_sama7g5_adc_channels[] = { 681 - AT91_SAMA5D2_CHAN_SINGLE(0, 0, 0x60), 682 - AT91_SAMA5D2_CHAN_SINGLE(1, 1, 0x64), 683 - AT91_SAMA5D2_CHAN_SINGLE(2, 2, 0x68), 684 - AT91_SAMA5D2_CHAN_SINGLE(3, 3, 0x6c), 685 - AT91_SAMA5D2_CHAN_SINGLE(4, 4, 0x70), 686 - AT91_SAMA5D2_CHAN_SINGLE(5, 5, 0x74), 687 - AT91_SAMA5D2_CHAN_SINGLE(6, 6, 0x78), 688 - AT91_SAMA5D2_CHAN_SINGLE(7, 7, 0x7c), 689 - AT91_SAMA5D2_CHAN_SINGLE(8, 8, 0x80), 690 - AT91_SAMA5D2_CHAN_SINGLE(9, 9, 0x84), 691 - AT91_SAMA5D2_CHAN_SINGLE(10, 10, 0x88), 692 - AT91_SAMA5D2_CHAN_SINGLE(11, 11, 0x8c), 693 - AT91_SAMA5D2_CHAN_SINGLE(12, 12, 0x90), 694 - AT91_SAMA5D2_CHAN_SINGLE(13, 13, 0x94), 695 - AT91_SAMA5D2_CHAN_SINGLE(14, 14, 0x98), 696 - AT91_SAMA5D2_CHAN_SINGLE(15, 15, 0x9c), 697 - AT91_SAMA5D2_CHAN_DIFF(16, 0, 1, 0x60), 698 - AT91_SAMA5D2_CHAN_DIFF(17, 2, 3, 0x68), 699 - AT91_SAMA5D2_CHAN_DIFF(18, 4, 5, 0x70), 700 - AT91_SAMA5D2_CHAN_DIFF(19, 6, 7, 0x78), 701 - AT91_SAMA5D2_CHAN_DIFF(20, 8, 9, 0x80), 702 - AT91_SAMA5D2_CHAN_DIFF(21, 10, 11, 0x88), 703 - AT91_SAMA5D2_CHAN_DIFF(22, 12, 13, 0x90), 704 - AT91_SAMA5D2_CHAN_DIFF(23, 14, 15, 0x98), 669 + AT91_SAMA7G5_CHAN_SINGLE(0, 0, 0x60), 670 + AT91_SAMA7G5_CHAN_SINGLE(1, 1, 0x64), 671 + AT91_SAMA7G5_CHAN_SINGLE(2, 2, 0x68), 672 + AT91_SAMA7G5_CHAN_SINGLE(3, 3, 0x6c), 673 + AT91_SAMA7G5_CHAN_SINGLE(4, 4, 0x70), 674 + AT91_SAMA7G5_CHAN_SINGLE(5, 5, 0x74), 675 + AT91_SAMA7G5_CHAN_SINGLE(6, 6, 0x78), 676 + AT91_SAMA7G5_CHAN_SINGLE(7, 7, 0x7c), 677 + AT91_SAMA7G5_CHAN_SINGLE(8, 8, 0x80), 678 + AT91_SAMA7G5_CHAN_SINGLE(9, 9, 0x84), 679 + AT91_SAMA7G5_CHAN_SINGLE(10, 10, 0x88), 680 + AT91_SAMA7G5_CHAN_SINGLE(11, 11, 0x8c), 681 + AT91_SAMA7G5_CHAN_SINGLE(12, 12, 0x90), 682 + AT91_SAMA7G5_CHAN_SINGLE(13, 13, 0x94), 683 + AT91_SAMA7G5_CHAN_SINGLE(14, 14, 0x98), 684 + AT91_SAMA7G5_CHAN_SINGLE(15, 15, 0x9c), 685 + AT91_SAMA7G5_CHAN_DIFF(16, 0, 1, 0x60), 686 + AT91_SAMA7G5_CHAN_DIFF(17, 2, 3, 0x68), 687 + AT91_SAMA7G5_CHAN_DIFF(18, 4, 5, 0x70), 688 + AT91_SAMA7G5_CHAN_DIFF(19, 6, 7, 0x78), 689 + AT91_SAMA7G5_CHAN_DIFF(20, 8, 9, 0x80), 690 + AT91_SAMA7G5_CHAN_DIFF(21, 10, 11, 0x88), 691 + AT91_SAMA7G5_CHAN_DIFF(22, 12, 13, 0x90), 692 + AT91_SAMA7G5_CHAN_DIFF(23, 14, 15, 0x98), 705 693 IIO_CHAN_SOFT_TIMESTAMP(24), 706 694 AT91_SAMA5D2_CHAN_TEMP(AT91_SAMA7G5_ADC_TEMP_CHANNEL, "temp", 0xdc), 707 695 };
+1 -1
drivers/iio/adc/pac1921.c
··· 1198 1198 1199 1199 label = devm_kstrdup(dev, status->package.elements[0].string.pointer, 1200 1200 GFP_KERNEL); 1201 + ACPI_FREE(status); 1201 1202 if (!label) 1202 1203 return -ENOMEM; 1203 1204 1204 1205 indio_dev->label = label; 1205 - ACPI_FREE(status); 1206 1206 1207 1207 return 0; 1208 1208 }
+6
drivers/iio/dac/ad3552r.c
··· 410 410 return ret; 411 411 } 412 412 413 + /* Clear reset error flag, see ad3552r manual, rev B table 38. */ 414 + ret = ad3552r_write_reg(dac, AD3552R_REG_ADDR_ERR_STATUS, 415 + AD3552R_MASK_RESET_STATUS); 416 + if (ret) 417 + return ret; 418 + 413 419 return ad3552r_update_reg_field(dac, 414 420 AD3552R_REG_ADDR_INTERFACE_CONFIG_A, 415 421 AD3552R_MASK_ADDR_ASCENSION,
+4 -10
drivers/iio/filter/admv8818.c
··· 574 574 struct spi_device *spi = st->spi; 575 575 unsigned int chip_id; 576 576 577 - ret = regmap_update_bits(st->regmap, ADMV8818_REG_SPI_CONFIG_A, 578 - ADMV8818_SOFTRESET_N_MSK | 579 - ADMV8818_SOFTRESET_MSK, 580 - FIELD_PREP(ADMV8818_SOFTRESET_N_MSK, 1) | 581 - FIELD_PREP(ADMV8818_SOFTRESET_MSK, 1)); 577 + ret = regmap_write(st->regmap, ADMV8818_REG_SPI_CONFIG_A, 578 + ADMV8818_SOFTRESET_N_MSK | ADMV8818_SOFTRESET_MSK); 582 579 if (ret) { 583 580 dev_err(&spi->dev, "ADMV8818 Soft Reset failed.\n"); 584 581 return ret; 585 582 } 586 583 587 - ret = regmap_update_bits(st->regmap, ADMV8818_REG_SPI_CONFIG_A, 588 - ADMV8818_SDOACTIVE_N_MSK | 589 - ADMV8818_SDOACTIVE_MSK, 590 - FIELD_PREP(ADMV8818_SDOACTIVE_N_MSK, 1) | 591 - FIELD_PREP(ADMV8818_SDOACTIVE_MSK, 1)); 584 + ret = regmap_write(st->regmap, ADMV8818_REG_SPI_CONFIG_A, 585 + ADMV8818_SDOACTIVE_N_MSK | ADMV8818_SDOACTIVE_MSK); 592 586 if (ret) { 593 587 dev_err(&spi->dev, "ADMV8818 SDO Enable failed.\n"); 594 588 return ret;
+2 -2
drivers/iio/light/apds9306.c
··· 108 108 { 109 109 .part_id = 0xB1, 110 110 .max_scale_int = 16, 111 - .max_scale_nano = 3264320, 111 + .max_scale_nano = 326432000, 112 112 }, { 113 113 .part_id = 0xB3, 114 114 .max_scale_int = 14, 115 - .max_scale_nano = 9712000, 115 + .max_scale_nano = 97120000, 116 116 }, 117 117 }; 118 118
+4 -3
drivers/iio/light/hid-sensor-prox.c
··· 49 49 #define PROX_CHANNEL(_is_proximity, _channel) \ 50 50 {\ 51 51 .type = _is_proximity ? IIO_PROXIMITY : IIO_ATTENTION,\ 52 - .info_mask_separate = _is_proximity ? BIT(IIO_CHAN_INFO_RAW) :\ 53 - BIT(IIO_CHAN_INFO_PROCESSED),\ 54 - .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) |\ 52 + .info_mask_separate = \ 53 + (_is_proximity ? BIT(IIO_CHAN_INFO_RAW) :\ 54 + BIT(IIO_CHAN_INFO_PROCESSED)) |\ 55 + BIT(IIO_CHAN_INFO_OFFSET) |\ 55 56 BIT(IIO_CHAN_INFO_SCALE) |\ 56 57 BIT(IIO_CHAN_INFO_SAMP_FREQ) |\ 57 58 BIT(IIO_CHAN_INFO_HYSTERESIS),\
+2 -1
drivers/iio/proximity/hx9023s.c
··· 1036 1036 return -ENOMEM; 1037 1037 1038 1038 memcpy(bin->data, fw->data, fw->size); 1039 - release_firmware(fw); 1040 1039 1041 1040 bin->fw_size = fw->size; 1042 1041 bin->fw_ver = bin->data[FW_VER_OFFSET]; 1043 1042 bin->reg_count = get_unaligned_le16(bin->data + FW_REG_CNT_OFFSET); 1043 + 1044 + release_firmware(fw); 1044 1045 1045 1046 return hx9023s_bin_load(data, bin); 1046 1047 }