On Wed, Apr 20, 2016 at 11:43:54PM +0200, Wolfram Sang wrote: > On Mon, Apr 11, 2016 at 05:28:39PM +0200, Jan Glauber wrote: > > From: David Daney <ddaney@xxxxxxxxxxxxxxxxxx> > > > > Use High-Level Controller (HLC) when possible. The HLC can read/write > > up to 8 bytes and is completely optional. The most important difference > > of the HLC is that it only requires one interrupt for a transfer > > (up to 8 bytes) where the low-level read/write requires 2 interrupts > > plus one interrupt per transferred byte. Since the interrupts are costly > > using the HLC improves the performance. Also, the HLC provides improved error > > handling. > > Much better description, thanks! > > > + while (1) { > > + val = octeon_i2c_ctl_read(i2c); > > + if (!(val & (TWSI_CTL_STA | TWSI_CTL_STP))); > > + break; > > + > > + /* clear IFLG event */ > > + if (val & TWSI_CTL_IFLG) > > + octeon_i2c_ctl_write(i2c, TWSI_CTL_ENAB); > > + > > + if (try++ > 100) { > > + pr_err("%s: giving up\n", __func__); > > + break; > > + } > > + > > + /* spin until any start/stop has finished */ > > + udelay(10); > > + } > > Maybe you can use one of the readx_poll_timeout() functions? Nice, but I don't think we can use readx_poll_timeout() here because of the octeon_i2c_ctl_write inside the loop... -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html