Messages in this thread Patch in this message | | | From | Feng Kan <> | Subject | [PATCH] irqchip: gic: correct gic_set_type trigger acceptance criteria | Date | Thu, 21 Aug 2014 09:56:23 -0700 |
| |
GIC is designed to support two types of trigger mechanism. Either active level high or edge rising.
static int gic_set_type(struct irq_data *d, unsigned int type) { ... if (type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING) return -EINVAL;
However, this cause problem with requesting driver uses combo selections to tie down trigger mechanism. In below case gpio_keys_setup_key tries to use either rising or falling edge trigger, but accidently cause a false positive in the gic code.
static int gpio_keys_setup_key(struct platform_device *pdev, { irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
This patch fixes this problem by filter the selection type first.
Signed-off-by: Feng Kan <fkan@apm.com> --- drivers/irqchip/irq-gic.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index c31eea4..bea167e 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -194,6 +194,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type) if (gicirq < 16) return -EINVAL; + type &= IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING; if (type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING) return -EINVAL; -- 1.9.1
| |