Message ID | 1458027990-128142-2-git-send-email-preid@electromag.com.au |
---|---|
State | New |
Headers | show |
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
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.
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;
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(+)