We re seeing intermittient though quite frequent bug in our kernel all

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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