The reference taken with iio_trigger_get() is only dropped by iio_dev_release() when INDIO_BUFFER_TRIGGERED is set. If devm_iio_triggered_buffer_setup() fails before setting that mode, the reference acquired for indio_dev->trig leaks. Move the iio_trigger_get() after the buffer setup succeeds. Fixes: d935eddd2799 ("iio: adc: Add driver for Texas Instruments ADS131E0x ADC family") Cc: stable@vger.kernel.org Signed-off-by: Wentao Liang --- drivers/iio/adc/ti-ads131e08.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/iio/adc/ti-ads131e08.c b/drivers/iio/adc/ti-ads131e08.c index a585621b0bc3..d976214504c3 100644 --- a/drivers/iio/adc/ti-ads131e08.c +++ b/drivers/iio/adc/ti-ads131e08.c @@ -851,8 +851,6 @@ static int ads131e08_probe(struct spi_device *spi) return ret; } - indio_dev->trig = iio_trigger_get(st->trig); - ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, NULL, &ads131e08_trigger_handler, NULL); if (ret) { @@ -860,6 +858,8 @@ static int ads131e08_probe(struct spi_device *spi) return ret; } + indio_dev->trig = iio_trigger_get(st->trig); + st->vref_reg = devm_regulator_get_optional(&spi->dev, "vref"); if (!IS_ERR(st->vref_reg)) { ret = regulator_enable(st->vref_reg); -- 2.34.1