]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: temperature: ltc2983: Fix reinit_completion() called after conversion start
authorLiviu Stan <liviu.stan@analog.com>
Mon, 25 May 2026 16:39:29 +0000 (19:39 +0300)
committerJonathan Cameron <jic23@kernel.org>
Sun, 31 May 2026 10:01:50 +0000 (11:01 +0100)
reinit_completion() was called after regmap_write() initiated the hardware
conversion, creating a race window where the interrupt could fire and call
complete() before reinit_completion() reset the completion.

Move reinit_completion() before the regmap_write() to close the race.
ltc2983_eeprom_cmd() already does it in the correct order.

Fixes: f110f3188e56 ("iio: temperature: Add support for LTC2983")
Signed-off-by: Liviu Stan <liviu.stan@analog.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/temperature/ltc2983.c

index 1f835e326b932a4bf3e7efb62d5589602e8f2a2d..2bc5cd46a72f3ba603d7c2c0efc2ecdf5380ea24 100644 (file)
@@ -1177,12 +1177,11 @@ static int ltc2983_chan_read(struct ltc2983_data *st,
        start_conversion |= LTC2983_STATUS_CHAN_SEL(sensor->chan);
        dev_dbg(&st->spi->dev, "Start conversion on chan:%d, status:%02X\n",
                sensor->chan, start_conversion);
+       reinit_completion(&st->completion);
        /* start conversion */
        ret = regmap_write(st->regmap, LTC2983_STATUS_REG, start_conversion);
        if (ret)
                return ret;
-
-       reinit_completion(&st->completion);
        /*
         * wait for conversion to complete.
         * 300 ms should be more than enough to complete the conversion.