gpio: stmpe: fix up interrupt enable logic
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 2 Oct 2014 05:55:27 +0000 (07:55 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 2 Oct 2014 07:19:22 +0000 (09:19 +0200)
The STMPE driver assumes that the passed in IRQ type is
for rising or falling IRQs, not both, even though the
hardware actually supports this perfectly well. Likewise
the check for level IRQs is done against just high or low
level types, not for the case where it is combined with
other IRQs.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-stmpe.c

index b0b342787c375d185ee6c1b58c958fa5d3c36a6a..866baa87947391bf379212543be0c1f15d2abfcd 100644 (file)
@@ -127,19 +127,19 @@ static int stmpe_gpio_irq_set_type(struct irq_data *d, unsigned int type)
        int regoffset = offset / 8;
        int mask = 1 << (offset % 8);
 
-       if (type == IRQ_TYPE_LEVEL_LOW || type == IRQ_TYPE_LEVEL_HIGH)
+       if (type & IRQ_TYPE_LEVEL_LOW || type & IRQ_TYPE_LEVEL_HIGH)
                return -EINVAL;
 
        /* STMPE801 doesn't have RE and FE registers */
        if (stmpe_gpio->stmpe->partnum == STMPE801)
                return 0;
 
-       if (type == IRQ_TYPE_EDGE_RISING)
+       if (type & IRQ_TYPE_EDGE_RISING)
                stmpe_gpio->regs[REG_RE][regoffset] |= mask;
        else
                stmpe_gpio->regs[REG_RE][regoffset] &= ~mask;
 
-       if (type == IRQ_TYPE_EDGE_FALLING)
+       if (type & IRQ_TYPE_EDGE_FALLING)
                stmpe_gpio->regs[REG_FE][regoffset] |= mask;
        else
                stmpe_gpio->regs[REG_FE][regoffset] &= ~mask;
This page took 0.031006 seconds and 5 git commands to generate.