We're seeing a intermittient though quite frequent bug in our kernel: all of the sudden N516 stops responding to keys and quickly drains battery (due to being unable to enter sleep mode). We revealed the following pattern in logs repeating infinitely: <7>[13331.730000] i2c-adapter i2c-0: jz47xx_xfer: processing 1 messages: <7>[13331.730000] i2c-adapter i2c-0: #0: reading 1 byte from 0x54 <7>[13331.730000] i2c-adapter i2c-0: xfer_read <7>[13331.830000] i2c-adapter i2c-0: xfer_read: 114: timeout <7>[13331.830000] i2c-adapter i2c-0: xfer_read: Received ACK <7>[13331.830000] i2c-adapter i2c-0: transfer complete <7>[13331.830000] n516-keys 0-0054: msg: 0xa9 Did we do anything wrong so controller went mad? Is it possible completely reset the i2c controller as a fail-safe measure in such situations? As you could see from the code (especially i2c-jz47xx.c::xfer_read) we are disabling i2c after every transaction. For the reference, there are links to a source code for jz47x0 controller driver and n516 binding: http://git.openinkpot.org/linux-2.6.git/?a=blob;f=drivers/i2c/busses/i2c-jz47xx.c http://git.openinkpot.org/linux-2.6.git/?a=blob;f=arch/mips/jz4740/i2c.c http://git.openinkpot.org/linux-2.6.git/?a=blob;f=drivers/i2c/chips/n516-lpc.c