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! 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 336 bytes. The __init changes cause an extra 4KB page to be freed after kernel init on Beagle. 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. Tested on BeagleBoard rev B4 (3530ES2.2). - Paul --- Paul Walmsley (9): TWL4030: convert early interrupt mask/clear funcs to use array TWL4030: use symbolic ISR/IMR register names during twl_init_irq() TWL4030: move TWL module register defs into separate include files TWL4030: change init-time IMR mask code to WARN if error TWL4030: read and write module ISRs to clear them at init TWL4030: clear MADC interrupt status registers upon init TWL4030: use correct register addresses for BCI IMR registers TWL4030: clear TWL GPIO interrupt status registers TWL4030: remove superfluous PWR interrupt status clear before masking drivers/i2c/chips/twl4030-core.c | 335 ++++++++++++++++++++---------------- 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, 303 insertions(+), 208 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