First of all, this isn't fully tested yet. I can see some issues poping up after this patchset which I'm not sure if it's a race condition somewhere or the HW is just misbehaving. All in all, the IRQ handler looks cleaner now. There's still lots of things to be done and before I'm going any further, I'd like help testing this patchset. Note that on multiple boots you might face some issues with the XDR IRQ which aparently keeps getting retriggered even though it gets acked and properly cleared. I didn't look yet if there's an errata for that. I'll give myself a break of the I2C driver because it's just driving me nuts already. If you have the balls to look over the unfinished patches (see that there are a few patches which could be combined, will do that later) and help out testing, reviewing, commenting... Next steps (after this set is done) would be to get rid of that stupid, nonsensical FIFO clear before starting every transfer, fix up NAK handling, clean up debugging messages, figure out why sometimes IRQs don't fire (AKA "controller timed out" crap) and lots more. For convenience it's also located on the following git branch: git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git i2c ps: boot tested on OMAP4 Panda. When it boots fine, it's actually quite stable, I managed to do many transfers with the PMIC (checking regulators' state) and it works very reliably (while true; cat /sys/class/regulators/*/state; done works fine for multiple iterations); Felipe Balbi (22): i2c: omap: simplify num_bytes handling i2c: omap: decrease indentation level on data handling i2c: omap: add blank lines i2c: omap: simplify omap_i2c_ack_stat() i2c: omap: split out [XR]DR and [XR]RDY i2c: omap: improve 1p153 errata handling i2c: omap: re-factor receive/transmit data loop i2c: omap: switch over to do {} while loop i2c: omap: ack IRQ in parts i2c: omap: switch I2C REV2 to threaded IRQ i2c: omap: get rid of "count" variable i2c: omap: get rid of the "complete" label i2c: omap: if controller is suspended, bail out i2c: omap: ack ARDY IRQ i2c: omap: switch to devm_* API i2c: omap: switch to platform_get_irq() i2c: omap: drop Access Ready IRQ i2c: omap: drop errata i207 from RRDY interrupt i2c: omap: bus: add a receiver flag i2c: omap: avoid unnecessary register read i2c: omap: no need to reinitialize "stat" i2c: omap: simplify errata check drivers/i2c/busses/i2c-omap.c | 386 +++++++++++++++++++++++------------------ 1 file changed, 216 insertions(+), 170 deletions(-) -- 1.7.10.4 -- 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