Skip to content

Commit 0840a79

Browse files
committed
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 ...
2 parents c24eb8d + 315f7e1 commit 0840a79

File tree

25 files changed

+92
-52
lines changed

25 files changed

+92
-52
lines changed

Documentation/ABI/testing/sysfs-bus-iio-vf610

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
What: /sys/bus/iio/devices/iio:deviceX/conversion_mode
1+
What: /sys/bus/iio/devices/iio:deviceX/in_conversion_mode
22
KernelVersion: 4.2
33
44
Description:

drivers/iio/accel/bma180.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1006,11 +1006,12 @@ static int bma180_probe(struct i2c_client *client,
10061006

10071007
data->trig->ops = &bma180_trigger_ops;
10081008
iio_trigger_set_drvdata(data->trig, indio_dev);
1009-
indio_dev->trig = iio_trigger_get(data->trig);
10101009

10111010
ret = iio_trigger_register(data->trig);
10121011
if (ret)
10131012
goto err_trigger_free;
1013+
1014+
indio_dev->trig = iio_trigger_get(data->trig);
10141015
}
10151016

10161017
ret = iio_triggered_buffer_setup(indio_dev, NULL,

drivers/iio/accel/kxcjk-1013.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,12 +1554,12 @@ static int kxcjk1013_probe(struct i2c_client *client,
15541554

15551555
data->dready_trig->ops = &kxcjk1013_trigger_ops;
15561556
iio_trigger_set_drvdata(data->dready_trig, indio_dev);
1557-
indio_dev->trig = data->dready_trig;
1558-
iio_trigger_get(indio_dev->trig);
15591557
ret = iio_trigger_register(data->dready_trig);
15601558
if (ret)
15611559
goto err_poweroff;
15621560

1561+
indio_dev->trig = iio_trigger_get(data->dready_trig);
1562+
15631563
data->motion_trig->ops = &kxcjk1013_trigger_ops;
15641564
iio_trigger_set_drvdata(data->motion_trig, indio_dev);
15651565
ret = iio_trigger_register(data->motion_trig);

drivers/iio/accel/mma8452.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,10 +1511,14 @@ static int mma8452_reset(struct i2c_client *client)
15111511
int i;
15121512
int ret;
15131513

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,
15151521
MMA8452_CTRL_REG2_RST);
1516-
if (ret < 0)
1517-
return ret;
15181522

15191523
for (i = 0; i < 10; i++) {
15201524
usleep_range(100, 200);
@@ -1557,11 +1561,13 @@ static int mma8452_probe(struct i2c_client *client,
15571561
mutex_init(&data->lock);
15581562

15591563
data->chip_info = device_get_match_data(&client->dev);
1560-
if (!data->chip_info && id) {
1561-
data->chip_info = &mma_chip_info_table[id->driver_data];
1562-
} else {
1563-
dev_err(&client->dev, "unknown device model\n");
1564-
return -ENODEV;
1564+
if (!data->chip_info) {
1565+
if (id) {
1566+
data->chip_info = &mma_chip_info_table[id->driver_data];
1567+
} else {
1568+
dev_err(&client->dev, "unknown device model\n");
1569+
return -ENODEV;
1570+
}
15651571
}
15661572

15671573
ret = iio_read_mount_matrix(&client->dev, &data->orientation);

drivers/iio/accel/mxc4005.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,15 +456,15 @@ static int mxc4005_probe(struct i2c_client *client,
456456

457457
data->dready_trig->ops = &mxc4005_trigger_ops;
458458
iio_trigger_set_drvdata(data->dready_trig, indio_dev);
459-
indio_dev->trig = data->dready_trig;
460-
iio_trigger_get(indio_dev->trig);
461459
ret = devm_iio_trigger_register(&client->dev,
462460
data->dready_trig);
463461
if (ret) {
464462
dev_err(&client->dev,
465463
"failed to register trigger\n");
466464
return ret;
467465
}
466+
467+
indio_dev->trig = iio_trigger_get(data->dready_trig);
468468
}
469469

470470
return devm_iio_device_register(&client->dev, indio_dev);

drivers/iio/adc/adi-axi-adc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,16 +322,19 @@ static struct adi_axi_adc_client *adi_axi_adc_attach_client(struct device *dev)
322322

323323
if (!try_module_get(cl->dev->driver->owner)) {
324324
mutex_unlock(&registered_clients_lock);
325+
of_node_put(cln);
325326
return ERR_PTR(-ENODEV);
326327
}
327328

328329
get_device(cl->dev);
329330
cl->info = info;
330331
mutex_unlock(&registered_clients_lock);
332+
of_node_put(cln);
331333
return cl;
332334
}
333335

334336
mutex_unlock(&registered_clients_lock);
337+
of_node_put(cln);
335338

336339
return ERR_PTR(-EPROBE_DEFER);
337340
}

drivers/iio/adc/aspeed_adc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ static int aspeed_adc_set_trim_data(struct iio_dev *indio_dev)
186186
return -EOPNOTSUPP;
187187
}
188188
scu = syscon_node_to_regmap(syscon);
189+
of_node_put(syscon);
189190
if (IS_ERR(scu)) {
190191
dev_warn(data->dev, "Failed to get syscon regmap\n");
191192
return -EOPNOTSUPP;

drivers/iio/adc/axp288_adc.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,14 @@ static const struct dmi_system_id axp288_adc_ts_bias_override[] = {
196196
},
197197
.driver_data = (void *)(uintptr_t)AXP288_ADC_TS_BIAS_80UA,
198198
},
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+
},
199207
{}
200208
};
201209

drivers/iio/adc/rzg2l_adc.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,15 @@ static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l
334334
i = 0;
335335
device_for_each_child_node(&pdev->dev, fwnode) {
336336
ret = fwnode_property_read_u32(fwnode, "reg", &channel);
337-
if (ret)
337+
if (ret) {
338+
fwnode_handle_put(fwnode);
338339
return ret;
340+
}
339341

340-
if (channel >= RZG2L_ADC_MAX_CHANNELS)
342+
if (channel >= RZG2L_ADC_MAX_CHANNELS) {
343+
fwnode_handle_put(fwnode);
341344
return -EINVAL;
345+
}
342346

343347
chan_array[i].type = IIO_VOLTAGE;
344348
chan_array[i].indexed = 1;

drivers/iio/adc/stm32-adc-core.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,15 @@ struct stm32_adc_priv;
6464
* @max_clk_rate_hz: maximum analog clock rate (Hz, from datasheet)
6565
* @has_syscfg: SYSCFG capability flags
6666
* @num_irqs: number of interrupt lines
67+
* @num_adcs: maximum number of ADC instances in the common registers
6768
*/
6869
struct stm32_adc_priv_cfg {
6970
const struct stm32_adc_common_regs *regs;
7071
int (*clk_sel)(struct platform_device *, struct stm32_adc_priv *);
7172
u32 max_clk_rate_hz;
7273
unsigned int has_syscfg;
7374
unsigned int num_irqs;
75+
unsigned int num_adcs;
7476
};
7577

7678
/**
@@ -352,7 +354,7 @@ static void stm32_adc_irq_handler(struct irq_desc *desc)
352354
* before invoking the interrupt handler (e.g. call ISR only for
353355
* IRQ-enabled ADCs).
354356
*/
355-
for (i = 0; i < priv->cfg->num_irqs; i++) {
357+
for (i = 0; i < priv->cfg->num_adcs; i++) {
356358
if ((status & priv->cfg->regs->eoc_msk[i] &&
357359
stm32_adc_eoc_enabled(priv, i)) ||
358360
(status & priv->cfg->regs->ovr_msk[i]))
@@ -792,6 +794,7 @@ static const struct stm32_adc_priv_cfg stm32f4_adc_priv_cfg = {
792794
.clk_sel = stm32f4_adc_clk_sel,
793795
.max_clk_rate_hz = 36000000,
794796
.num_irqs = 1,
797+
.num_adcs = 3,
795798
};
796799

797800
static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
@@ -800,14 +803,16 @@ static const struct stm32_adc_priv_cfg stm32h7_adc_priv_cfg = {
800803
.max_clk_rate_hz = 36000000,
801804
.has_syscfg = HAS_VBOOSTER,
802805
.num_irqs = 1,
806+
.num_adcs = 2,
803807
};
804808

805809
static const struct stm32_adc_priv_cfg stm32mp1_adc_priv_cfg = {
806810
.regs = &stm32h7_adc_common_regs,
807811
.clk_sel = stm32h7_adc_clk_sel,
808-
.max_clk_rate_hz = 40000000,
812+
.max_clk_rate_hz = 36000000,
809813
.has_syscfg = HAS_VBOOSTER | HAS_ANASWVDD,
810814
.num_irqs = 2,
815+
.num_adcs = 2,
811816
};
812817

813818
static const struct of_device_id stm32_adc_of_match[] = {

0 commit comments

Comments
 (0)