]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio:adc:ad_sigma_delta: Use IRQF_NO_AUTOEN rather than request and disable
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Fri, 2 Apr 2021 18:45:44 +0000 (19:45 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 7 Apr 2021 07:36:39 +0000 (08:36 +0100)
These devices are not able to mask the signal used as a data ready
interrupt.  As such they previously requested the irq then immediately
disabled it.  Now we can avoid the potential of a spurious interrupt
by avoiding the irq being auto enabled in the first place.

I'm not sure how this code could have been called with the irq already
disabled, so I believe the conditional would always have been true and
have removed it.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Alexandru Ardelean <ardeleanalex@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
Link: https://lore.kernel.org/r/20210402184544.488862-8-jic23@kernel.org
drivers/iio/adc/ad_sigma_delta.c

index 9289812c0a9461081abc0098cc32aea0a17f8920..e777ec718973bae60e5c785d76ffd3f38911b5cd 100644 (file)
@@ -485,18 +485,15 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
        sigma_delta->trig->ops = &ad_sd_trigger_ops;
        init_completion(&sigma_delta->completion);
 
+       sigma_delta->irq_dis = true;
        ret = request_irq(sigma_delta->spi->irq,
                          ad_sd_data_rdy_trig_poll,
-                         sigma_delta->info->irq_flags,
+                         sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
                          indio_dev->name,
                          sigma_delta);
        if (ret)
                goto error_free_trig;
 
-       if (!sigma_delta->irq_dis) {
-               sigma_delta->irq_dis = true;
-               disable_irq_nosync(sigma_delta->spi->irq);
-       }
        iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
 
        ret = iio_trigger_register(sigma_delta->trig);