gpio: mcp23s08: Fix clearing of interrupt.
authorPhil Reid <preid@electromag.com.au>
Tue, 15 Mar 2016 07:46:30 +0000 (15:46 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 16 Mar 2016 12:41:59 +0000 (13:41 +0100)
The mcp23s18 is configurable on clearing the interrupt on either reading
INTCAP or GPIO. Since driver reads INTCAP in IRQ and not the GPIO reg need
to set control byte for this mode.

Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-mcp23s08.c

index 971915830d7f6910ecda64855c8483547ecbb070..47e486910aab8c92238f1bffed9e8e189c9a633b 100644 (file)
@@ -49,6 +49,7 @@
 #      define IOCON_HAEN       (1 << 3)
 #      define IOCON_ODR        (1 << 2)
 #      define IOCON_INTPOL     (1 << 1)
+#      define IOCON_INTCC      (1)
 #define MCP_GPPU       0x06
 #define MCP_INTF       0x07
 #define MCP_INTCAP     0x08
@@ -680,6 +681,9 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
                if (mirror)
                        status |= IOCON_MIRROR | (IOCON_MIRROR << 8);
 
+               if (type == MCP_TYPE_S18)
+                       status |= IOCON_INTCC | (IOCON_INTCC << 8);
+
                status = mcp->ops->write(mcp, MCP_IOCON, status);
                if (status < 0)
                        goto fail;