]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
gpio: dwapb: fix missing first irq for edgeboth irq type
authorXiaoguang Chen <xgchenshy@gmail.com>
Thu, 1 Jun 2017 23:27:15 +0000 (07:27 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 21 Jun 2017 07:36:46 +0000 (09:36 +0200)
dwapb_irq_set_type overwrites polarity register value for
IRQ_TYPE_EDGE_BOTH case. If the polarity of one gpio is 0
by default, then it will set falling edge irq trigger.
and the gpio may requires rising edge irq for the first time,
and it will be missed.

Do not overwrite polarity register for IRQ_TYPE_EDGE_BOTH case
can solve this issue.

Signed-off-by: Xiaoguang Chen <xgchenshy@gmail.com>
Tested-by: Jisheng Zhang <jszhang@marvell.com>
[Fix some really weird text encoding problem]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-dwapb.c

index f051c4552af570257b92bf5d7f80b2a706cbf721..c07ada9c7af6d6f8403f5412bd5d4bc85fd46055 100644 (file)
@@ -288,7 +288,8 @@ static int dwapb_irq_set_type(struct irq_data *d, u32 type)
        irq_setup_alt_chip(d, type);
 
        dwapb_write(gpio, GPIO_INTTYPE_LEVEL, level);
-       dwapb_write(gpio, GPIO_INT_POLARITY, polarity);
+       if (type != IRQ_TYPE_EDGE_BOTH)
+               dwapb_write(gpio, GPIO_INT_POLARITY, polarity);
        spin_unlock_irqrestore(&gc->bgpio_lock, flags);
 
        return 0;