@@ -678,7 +678,9 @@ omap_i2c_rev1_isr(int this_irq, void *dev_id)
*/
static int omap3430_workaround(struct omap_i2c_dev *dev, u16 *stat, int *err)
{
- while (!(*stat & OMAP_I2C_STAT_XUDF)) {
+ unsigned long timeout = 10000;
+
+ while (!(*stat & OMAP_I2C_STAT_XUDF && --timeout)) {
if (*stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
omap_i2c_ack_stat(dev, *stat & (OMAP_I2C_STAT_XRDY |
OMAP_I2C_STAT_XDR));
@@ -689,6 +691,9 @@ static int omap3430_workaround(struct omap_i2c_dev *dev, u16 *stat, int *err)
*stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
}
+ if (!timeout)
+ dev_err(dev->dev, "timeout waiting on XUDF bit\n");
+
return 0;
}