[ This is the second version of these patches - they now check the SIH_CTRL.COR bit to determine whether to read or write to clear ] At boot, twl_init_irq() tries to mask off all TWL4030 secondary interrupts and clear them, since no secondary interrupt handlers are registered yet (that happens later in the boot). However, this code is flawed. MADC, BCI, keypad, and GPIO ISRs are either not cleared or are incompletely cleared. Some BCI register addresses are nonsensical. And some code attempts to clear ISRs before masking IMRs, which is race-prone (an interrupt could occur after the ISR clear, but before the mask). These problems can cause large numbers of boot messages similar to this: TWL4030 module irq 368 is disabled but can't be masked! and I2C transmit overflows, both observed during boot on the BeagleBoard here. The actual IRQ number sometimes varied depending on which interrupt was unacknowledged. This series fixes these issues and does some code cleanup, saving 272 bytes. Thanks to Philip Balister <philip@xxxxxxxxxxxx>, Koen Kooi <k.kooi@xxxxxxxxxxxxxxxxxx>, Måns Rullgård <mans@xxxxxxxxx>, Steve Sakoman <sakoman@xxxxxxxxx> and others on #beagle for help tracing these problems. Thanks also to Peter De Schrijver <peter.de-schrijver@xxxxxxxxx> for help with this second version, allowing several unnecessary I2C transactions to be elided from twl_init_irq(). Tested on BeagleBoard rev B4 (3530ES2.2). - Paul --- size: text data bss dec hex filename 3076157 142840 104248 3323245 32b56d vmlinux.beagle.orig 3075885 142840 104248 3322973 32b45d vmlinux.beagle diffstat: drivers/i2c/chips/twl4030-core.c | 383 ++++++++++++++++++++++-------------- drivers/i2c/chips/twl4030-gpio.c | 48 ----- drivers/i2c/chips/twl4030-pwrirq.c | 15 + include/linux/i2c/twl4030-gpio.h | 76 +++++++ include/linux/i2c/twl4030-pwrirq.h | 37 +++ 5 files changed, 359 insertions(+), 200 deletions(-) create mode 100644 include/linux/i2c/twl4030-gpio.h create mode 100644 include/linux/i2c/twl4030-pwrirq.h -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html