diff options
Diffstat (limited to 'drivers/acpi/resource.c')
| -rw-r--r-- | drivers/acpi/resource.c | 26 | 
1 files changed, 26 insertions, 0 deletions
| diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c index cdc5c2599beb..d02fd53042a5 100644 --- a/drivers/acpi/resource.c +++ b/drivers/acpi/resource.c @@ -23,6 +23,7 @@  #include <linux/export.h>  #include <linux/ioport.h>  #include <linux/slab.h> +#include <linux/irq.h>  #ifdef CONFIG_X86  #define valid_IRQ(i) (((i) != 0) && ((i) != 2)) @@ -336,6 +337,31 @@ unsigned long acpi_dev_irq_flags(u8 triggering, u8 polarity, u8 shareable)  }  EXPORT_SYMBOL_GPL(acpi_dev_irq_flags); +/** + * acpi_dev_get_irq_type - Determine irq type. + * @triggering: Triggering type as provided by ACPI. + * @polarity: Interrupt polarity as provided by ACPI. + */ +unsigned int acpi_dev_get_irq_type(int triggering, int polarity) +{ +	switch (polarity) { +	case ACPI_ACTIVE_LOW: +		return triggering == ACPI_EDGE_SENSITIVE ? +		       IRQ_TYPE_EDGE_FALLING : +		       IRQ_TYPE_LEVEL_LOW; +	case ACPI_ACTIVE_HIGH: +		return triggering == ACPI_EDGE_SENSITIVE ? +		       IRQ_TYPE_EDGE_RISING : +		       IRQ_TYPE_LEVEL_HIGH; +	case ACPI_ACTIVE_BOTH: +		if (triggering == ACPI_EDGE_SENSITIVE) +			return IRQ_TYPE_EDGE_BOTH; +	default: +		return IRQ_TYPE_NONE; +	} +} +EXPORT_SYMBOL_GPL(acpi_dev_get_irq_type); +  static void acpi_dev_irqresource_disabled(struct resource *res, u32 gsi)  {  	res->start = gsi; | 
