diff mbox series

[2/2] iio: adc: ad_sigma_delta: allow overwriting the IRQ flags

Message ID 20240117-dev_sigma_delta_no_irq_flags-v1-2-db39261592cf@analog.com (mailing list archive)
State Accepted
Headers show
Series iio: adc: ad_sigma_delta: misc fixes/improvements | expand

Commit Message

Nuno Sa Jan. 17, 2024, 12:41 p.m. UTC
Make sure we can specify the IRQ trigger type from firmware and drivers
won't ignore it. In fact, this how it should be done but since someone
might be already depending on the driver to hardcode the trigger type
(and not specifying it in firmware), let's do it like this so there's
no possible breakage.

Signed-off-by: Nuno Sa <nuno.sa@analog.com>
---
 drivers/iio/adc/ad_sigma_delta.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Jonathan Cameron Jan. 21, 2024, 4:22 p.m. UTC | #1
On Wed, 17 Jan 2024 13:41:04 +0100
Nuno Sa <nuno.sa@analog.com> wrote:

> Make sure we can specify the IRQ trigger type from firmware and drivers
> won't ignore it. In fact, this how it should be done but since someone
> might be already depending on the driver to hardcode the trigger type
> (and not specifying it in firmware), let's do it like this so there's
> no possible breakage.
> 
> Signed-off-by: Nuno Sa <nuno.sa@analog.com>
I'm going to treat this as adding increased flexibility rather than a fix. Hence
Applied to the togreg branch of iio.git and pushed out as testing.
Will be rebased on rc1 once available.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/ad_sigma_delta.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
> index 7e2192870743..fbba3f4a1189 100644
> --- a/drivers/iio/adc/ad_sigma_delta.c
> +++ b/drivers/iio/adc/ad_sigma_delta.c
> @@ -568,6 +568,7 @@ EXPORT_SYMBOL_NS_GPL(ad_sd_validate_trigger, IIO_AD_SIGMA_DELTA);
>  static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_dev)
>  {
>  	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
> +	unsigned long irq_flags = irq_get_trigger_type(sigma_delta->spi->irq);
>  	int ret;
>  
>  	if (dev != &sigma_delta->spi->dev) {
> @@ -588,9 +589,13 @@ static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_de
>  	/* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
>  	irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
>  
> +	/* Allow overwriting the flags from firmware */
> +	if (!irq_flags)
> +		irq_flags = sigma_delta->info->irq_flags;
> +
>  	ret = devm_request_irq(dev, sigma_delta->spi->irq,
>  			       ad_sd_data_rdy_trig_poll,
> -			       sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
> +			       irq_flags | IRQF_NO_AUTOEN,
>  			       indio_dev->name,
>  			       sigma_delta);
>  	if (ret)
>
diff mbox series

Patch

diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index 7e2192870743..fbba3f4a1189 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -568,6 +568,7 @@  EXPORT_SYMBOL_NS_GPL(ad_sd_validate_trigger, IIO_AD_SIGMA_DELTA);
 static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_dev)
 {
 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
+	unsigned long irq_flags = irq_get_trigger_type(sigma_delta->spi->irq);
 	int ret;
 
 	if (dev != &sigma_delta->spi->dev) {
@@ -588,9 +589,13 @@  static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_de
 	/* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
 	irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
 
+	/* Allow overwriting the flags from firmware */
+	if (!irq_flags)
+		irq_flags = sigma_delta->info->irq_flags;
+
 	ret = devm_request_irq(dev, sigma_delta->spi->irq,
 			       ad_sd_data_rdy_trig_poll,
-			       sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
+			       irq_flags | IRQF_NO_AUTOEN,
 			       indio_dev->name,
 			       sigma_delta);
 	if (ret)