Re: [PATCH 1/2 V3] iio: adc: ad-sigma-delta: Allow custom IRQ flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 13 Jan 2020 12:26:52 +0200
Alexandru Tachici <alexandru.tachici@xxxxxxxxxx> wrote:

> Before this patch the ad_sigma_delta implementation hardcoded
> the irq trigger type to low, assuming that all Sigma-Delta ADCs
> have the same interrupt-type.
> 
> This patch allows all drivers using the ad_sigma_delta layer to set the
> irq trigger type to the one specified in the datasheet.
> 
> Signed-off-by: Alexandru Tachici <alexandru.tachici@xxxxxxxxxx>

Now, as neither of these has a fixes tag, I've taken them in the
togreg branch of iio.git.  If you want them backported to stable,
one they are in Linus's tree you can send a specific message to
request they are applied.

Applied to the togreg branch of iio.git and pushed out as testing
for the autobuilders to play with it.

Thanks,

Jonathan

> ---
>  drivers/iio/adc/ad7124.c               | 2 ++
>  drivers/iio/adc/ad7780.c               | 1 +
>  drivers/iio/adc/ad7791.c               | 1 +
>  drivers/iio/adc/ad7793.c               | 1 +
>  drivers/iio/adc/ad_sigma_delta.c       | 2 +-
>  include/linux/iio/adc/ad_sigma_delta.h | 2 ++
>  6 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/ad7124.c b/drivers/iio/adc/ad7124.c
> index edc6f1cc90b2..9531d8a6cb27 100644
> --- a/drivers/iio/adc/ad7124.c
> +++ b/drivers/iio/adc/ad7124.c
> @@ -9,6 +9,7 @@
>  #include <linux/delay.h>
>  #include <linux/device.h>
>  #include <linux/err.h>
> +#include <linux/interrupt.h>
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/regulator/consumer.h>
> @@ -222,6 +223,7 @@ static const struct ad_sigma_delta_info ad7124_sigma_delta_info = {
>  	.addr_shift = 0,
>  	.read_mask = BIT(6),
>  	.data_reg = AD7124_DATA,
> +	.irq_flags = IRQF_TRIGGER_LOW,
>  };
>  
>  static int ad7124_set_channel_odr(struct ad7124_state *st,
> diff --git a/drivers/iio/adc/ad7780.c b/drivers/iio/adc/ad7780.c
> index 217a5a5c3c6d..291c1a898129 100644
> --- a/drivers/iio/adc/ad7780.c
> +++ b/drivers/iio/adc/ad7780.c
> @@ -203,6 +203,7 @@ static const struct ad_sigma_delta_info ad7780_sigma_delta_info = {
>  	.set_mode = ad7780_set_mode,
>  	.postprocess_sample = ad7780_postprocess_sample,
>  	.has_registers = false,
> +	.irq_flags = IRQF_TRIGGER_LOW,
>  };
>  
>  #define AD7780_CHANNEL(bits, wordsize) \
> diff --git a/drivers/iio/adc/ad7791.c b/drivers/iio/adc/ad7791.c
> index 54025ea10239..abb239392631 100644
> --- a/drivers/iio/adc/ad7791.c
> +++ b/drivers/iio/adc/ad7791.c
> @@ -205,6 +205,7 @@ static const struct ad_sigma_delta_info ad7791_sigma_delta_info = {
>  	.has_registers = true,
>  	.addr_shift = 4,
>  	.read_mask = BIT(3),
> +	.irq_flags = IRQF_TRIGGER_LOW,
>  };
>  
>  static int ad7791_read_raw(struct iio_dev *indio_dev,
> diff --git a/drivers/iio/adc/ad7793.c b/drivers/iio/adc/ad7793.c
> index bbc41ecf0d2f..b747db97f78a 100644
> --- a/drivers/iio/adc/ad7793.c
> +++ b/drivers/iio/adc/ad7793.c
> @@ -206,6 +206,7 @@ static const struct ad_sigma_delta_info ad7793_sigma_delta_info = {
>  	.has_registers = true,
>  	.addr_shift = 3,
>  	.read_mask = BIT(6),
> +	.irq_flags = IRQF_TRIGGER_LOW,
>  };
>  
>  static const struct ad_sd_calib_data ad7793_calib_arr[6] = {
> diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
> index 8ba90486c787..8115b6de1d6c 100644
> --- a/drivers/iio/adc/ad_sigma_delta.c
> +++ b/drivers/iio/adc/ad_sigma_delta.c
> @@ -500,7 +500,7 @@ static int ad_sd_probe_trigger(struct iio_dev *indio_dev)
>  
>  	ret = request_irq(sigma_delta->spi->irq,
>  			  ad_sd_data_rdy_trig_poll,
> -			  IRQF_TRIGGER_LOW,
> +			  sigma_delta->info->irq_flags,
>  			  indio_dev->name,
>  			  sigma_delta);
>  	if (ret)
> diff --git a/include/linux/iio/adc/ad_sigma_delta.h b/include/linux/iio/adc/ad_sigma_delta.h
> index 8a4e25a7080c..5a127c0ed200 100644
> --- a/include/linux/iio/adc/ad_sigma_delta.h
> +++ b/include/linux/iio/adc/ad_sigma_delta.h
> @@ -40,6 +40,7 @@ struct iio_dev;
>   * @read_mask: Mask for the communications register having the read bit set.
>   * @data_reg: Address of the data register, if 0 the default address of 0x3 will
>   *   be used.
> + * @irq_flags: flags for the interrupt used by the triggered buffer
>   */
>  struct ad_sigma_delta_info {
>  	int (*set_channel)(struct ad_sigma_delta *, unsigned int channel);
> @@ -49,6 +50,7 @@ struct ad_sigma_delta_info {
>  	unsigned int addr_shift;
>  	unsigned int read_mask;
>  	unsigned int data_reg;
> +	unsigned long irq_flags;
>  };
>  
>  /**




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux