]> Pileus Git - ~andy/linux/blobdiff - arch/blackfin/mach-common/ints-priority.c
[Blackfin] arch:Fix BUG [#3876] pfbutton test for BTN3 on bf533 don't show complete...
[~andy/linux] / arch / blackfin / mach-common / ints-priority.c
index 81d00183ae91ee23f849471a4f543b7b92e7d023..880595afe98da61b2ade7323701b17de6b4070b6 100644 (file)
@@ -430,16 +430,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
                return 0;
        }
 
+       set_gpio_inen(gpionr, 0);
        set_gpio_dir(gpionr, 0);
-       set_gpio_inen(gpionr, 1);
-
-       if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
-               gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
-               set_gpio_edge(gpionr, 1);
-       } else {
-               set_gpio_edge(gpionr, 0);
-               gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
-       }
 
        if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
            == (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
@@ -452,6 +444,18 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
        else
                set_gpio_polar(gpionr, 0);      /* high or rising edge denoted by zero */
 
+       if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
+               set_gpio_edge(gpionr, 1);
+               set_gpio_inen(gpionr, 1);
+               gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
+               set_gpio_data(gpionr, 0);
+
+       } else {
+               set_gpio_edge(gpionr, 0);
+               gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
+               set_gpio_inen(gpionr, 1);
+       }
+
        SSYNC();
 
        if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))