Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: kxsd9: Don't return error code in trigger handler

IIO trigger handlers need to return one of the irqreturn_t values.
Returning an error code is not supported.

The kxsd9 interrupt handler returns an error code if reading the data
registers fails. In addition when exiting due to an error the trigger
handler does not call `iio_trigger_notify_done()`. Which when not done
keeps the triggered disabled forever.

Modify the code so that the function returns a valid irqreturn_t value as
well as calling `iio_trigger_notify_done()` on all exit paths.

Since we can't return the error code make sure to at least log it as part
of the error message.

Fixes: 0427a106a98a ("iio: accel: kxsd9: Add triggered buffer handling")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20211024171251.22896-2-lars@metafoo.de
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Lars-Peter Clausen and committed by
Jonathan Cameron
45febe0d ef9d67fa

+3 -3
+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;