[1/1] gpio: mcp23s08: Fix clearing of interrupt.
diff mbox

Message ID 1458027990-128142-2-git-send-email-preid@electromag.com.au
State New
Headers show

Commit Message

Phil Reid March 15, 2016, 7:46 a.m. UTC
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>
---
 drivers/gpio/gpio-mcp23s08.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Linus Walleij March 16, 2016, 12:51 p.m. UTC | #1
On Tue, Mar 15, 2016 at 8:46 AM, Phil Reid <preid@electromag.com.au> wrote:

> 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>

Patch applied.

Is there some way I could convince you to try to convert this driver
to use GPIOLIB_IRQCHIP in the same manner as other nested
GPIO irqchips, e.g. drivers/gpio/gpio-stmpe.c (see commit
fe44e70db0544e24cd1d00fc594b6e5b0afd333b)?

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Phil Reid March 17, 2016, 1:57 a.m. UTC | #2
G'day Linus,

On 16/03/2016 8:51 PM, Linus Walleij wrote:
> On Tue, Mar 15, 2016 at 8:46 AM, Phil Reid <preid@electromag.com.au> wrote:
>
>> 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>
>
> Patch applied.

Thanks.

>
> Is there some way I could convince you to try to convert this driver
> to use GPIOLIB_IRQCHIP in the same manner as other nested
> GPIO irqchips, e.g. drivers/gpio/gpio-stmpe.c (see commit
> fe44e70db0544e24cd1d00fc594b6e5b0afd333b)?
>

I'll have a look into it.

Patch
diff mbox

diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c
index 72521d9..b42524f 100644
--- a/drivers/gpio/gpio-mcp23s08.c
+++ b/drivers/gpio/gpio-mcp23s08.c
@@ -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;