On Fri, Apr 10, 2015 at 11:41:22PM +0200, Wolfram Sang wrote: > On Thu, Feb 19, 2015 at 12:06:49PM -0600, Felipe Balbi wrote: > > If either SCL or SDA are stuck low, we need to > > recover the bus using the procedure described > > on section 3.1.16 of the I2C specification. > > > > Note that we're trying to implement the procedure > > exactly as described by that section. First we > > check which line is stuck low, then implement > > one or the other procedure. If SDA recovery procedure > > fails, we reset our IP in an attempt to make it work. > > > > Signed-off-by: Felipe Balbi <balbi@xxxxxx> > > As Grygorii already mentioned: can you convert it to the standard i2c > bus recovery mechanism? > > And is the timeout you replace with the recovery caused by SDA stuck > high (check the thread starting with > http://thread.gmane.org/gmane.linux.kernel/1841371/focus=22435) SDA stuck low is one reason, yes. There could be other reasons like the far end (i2c client) just crapping out. I know of one touchscreen controller which will just die if you continuously try to read from unexistent registers. It will NAK for a while and later just die, completely. The only way to recover from that today is resetting the board. I have a feeling that resetting the touch controller might be doable if we have a reset pin tied to a GPIO, haven't tried that yet. In any case this is off-topic. I'll rebase the patch and fix what you asked, then retest, and resend. -- balbi
Attachment:
signature.asc
Description: Digital signature