diff mbox series

[1/3] iio: ltr501: Don't return error code in trigger handler

Message ID 20211024171251.22896-1-lars@metafoo.de (mailing list archive)
State Accepted
Headers show
Series [1/3] iio: ltr501: Don't return error code in trigger handler | expand

Commit Message

Lars-Peter Clausen Oct. 24, 2021, 5:12 p.m. UTC
IIO trigger handlers need to return one of the irqreturn_t values.
Returning an error code is not supported.

The ltr501 interrupt handler gets this right for most error paths, but
there is one case where it returns the error code.

In addition for this particular case 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.

Fixes: 2690be905123 ("iio: Add Lite-On ltr501 ambient light / proximity sensor driver")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/iio/light/ltr501.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jonathan Cameron Oct. 28, 2021, 2:05 p.m. UTC | #1
On Sun, 24 Oct 2021 19:12:49 +0200
Lars-Peter Clausen <lars@metafoo.de> wrote:

> IIO trigger handlers need to return one of the irqreturn_t values.
> Returning an error code is not supported.
> 
> The ltr501 interrupt handler gets this right for most error paths, but
> there is one case where it returns the error code.
> 
> In addition for this particular case 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.
> 
> Fixes: 2690be905123 ("iio: Add Lite-On ltr501 ambient light / proximity sensor driver")
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Series applied to the fixes-togreg branch of iio.git and marked for stable.

Thanks,

Jonathan

> ---
>  drivers/iio/light/ltr501.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
> index 7e51aaac0bf8..b2983b1a9ed1 100644
> --- a/drivers/iio/light/ltr501.c
> +++ b/drivers/iio/light/ltr501.c
> @@ -1275,7 +1275,7 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p)
>  		ret = regmap_bulk_read(data->regmap, LTR501_ALS_DATA1,
>  				       als_buf, sizeof(als_buf));
>  		if (ret < 0)
> -			return ret;
> +			goto done;
>  		if (test_bit(0, indio_dev->active_scan_mask))
>  			scan.channels[j++] = le16_to_cpu(als_buf[1]);
>  		if (test_bit(1, indio_dev->active_scan_mask))
diff mbox series

Patch

diff --git a/drivers/iio/light/ltr501.c b/drivers/iio/light/ltr501.c
index 7e51aaac0bf8..b2983b1a9ed1 100644
--- a/drivers/iio/light/ltr501.c
+++ b/drivers/iio/light/ltr501.c
@@ -1275,7 +1275,7 @@  static irqreturn_t ltr501_trigger_handler(int irq, void *p)
 		ret = regmap_bulk_read(data->regmap, LTR501_ALS_DATA1,
 				       als_buf, sizeof(als_buf));
 		if (ret < 0)
-			return ret;
+			goto done;
 		if (test_bit(0, indio_dev->active_scan_mask))
 			scan.channels[j++] = le16_to_cpu(als_buf[1]);
 		if (test_bit(1, indio_dev->active_scan_mask))