On 17 August 2015 at 22:18, Ezequiel Garcia <ezequiel@xxxxxxxxxxxxxxxxxxxx> wrote: > On 16 Aug 08:10 PM, Joachim Eastwood wrote: > [..] >> + >> +static int 2(struct lpc2k_i2c *i2c) >> +{ >> + unsigned long timeout = jiffies + msecs_to_jiffies(1000); >> + >> + /*1 >> + * If the transfer needs to abort for some reason, we'll try to >> + * force a stop condition to clear any pending bus conditions >> + */ >> + writel(LPC24XX_STO, i2c->base + LPC24XX_I2CONSET); >> + >> + /* Wait for status change */ >> + while (readl(i2c->base + LPC24XX_I2STAT) != M_I2C_IDLE) { >> + if (time_after(jiffies, timeout)) { >> + /* Bus was not idle, try to reset adapter */ >> + i2c_lpc2k_reset(i2c); >> + return -EBUSY; >> + } >> + >> + cpu_relax(); >> + } > > I believe you can use readl_{relaxed}_poll_timeout_{atomic} here. I did consider it, but since I don't have a good to way test the code path I left it as it was. Also since readl_{relaxed}_poll_timeout_{atomic} takes parameters in us it seemed unsuitable for a 1s total sleep, but I may be wrong. > Ccing Ariel, maybe he can help with a test. That would be great. regards, Joachim Eastwood -- 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