From 4ef7aa37f1c47e42e982a09b83e9953c37c4ba46 Mon Sep 17 00:00:00 2001 From: Paul Walmsley Date: Tue, 22 Jul 2008 17:51:27 -0600 Subject: [PATCH] TWL4030: clear TWL GPIO interrupt status registers twl_init_irq() does not clear the TWL GPIO ISR registers, but the PIH ISR thinks that it has. This causes any previously-latched GPIO interrupts to be stuck on until twl4030-gpio.c initializes, often drowning the console in TWL4030 module irq 368 is disabled but can't be masked! messages. This seems to be a particular problem when booting on Beagle. Signed-off-by: Paul Walmsley Signed-off-by: Tony Lindgren --- drivers/i2c/chips/twl4030-core.c | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/drivers/i2c/chips/twl4030-core.c b/drivers/i2c/chips/twl4030-core.c index ff662bc0a62..dfc38057c22 100644 --- a/drivers/i2c/chips/twl4030-core.c +++ b/drivers/i2c/chips/twl4030-core.c @@ -857,6 +857,48 @@ static void twl_init_irq(void) return; } + /* GPIO_ISR1A */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x19); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + + /* GPIO_ISR2A */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x1a); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + + /* GPIO_ISR3A */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x1b); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + + /* GPIO_ISR1B */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x1f); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + + /* GPIO_ISR2B */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x20); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + + /* GPIO_ISR3B */ + res = twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0xff, 0x21); + if (res < 0) { + pr_err("%s[%d][%d]\n", msg, res, __LINE__); + return; + } + /* install an irq handler for each of the PIH modules */ for (i = TWL4030_IRQ_BASE; i < TWL4030_IRQ_END; i++) { set_irq_chip(i, &twl4030_irq_chip); -- 2.41.1