* Cory Maccarrone <darkstar6262@xxxxxxxxx> [091222 17:05]: > Commit ef871432... (i2c-omap: OMAP3: PM: (re)init for every transfer > to support off-mode) introduced a change which make the dev->iestate > contents be written to the OMAP_I2C_IE_REG every time omap_i2c_unidle > is called. Previously, the state was only written if it wasn't equal > to zero. > > In omap_i2c_probe, omap_i2c_unidle() is called prior to omap_i2c_init(), > in which case dev->iestate has not yet been initialized and will be set > to zero. Having this value written to the registers causes deadlock > while booting. > > As such, this change restores the original functionality. Looks like initializing dev->iestate to something before calling omap_i2c_unidle in omap_i2c_probe is not an option in this case. We'd want to initialize it to zero, which causes the deadlock.. Acked-by: Tony Lindgren <tony@xxxxxxxxxxx> > > Signed-off-by: Cory Maccarrone <darkstar6262@xxxxxxxxx> > --- > drivers/i2c/busses/i2c-omap.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c > index 3440d88..c0bb9eb 100644 > --- a/drivers/i2c/busses/i2c-omap.c > +++ b/drivers/i2c/busses/i2c-omap.c > @@ -248,7 +248,13 @@ static void omap_i2c_unidle(struct omap_i2c_dev *dev) > omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN); > } > dev->idle = 0; > - omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate); > + > + /* > + * Don't write to this register if the IE state is 0 as it can > + * cause deadlock. > + */ > + if (dev->iestate) > + omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate); > } > > static void omap_i2c_idle(struct omap_i2c_dev *dev) > -- > 1.6.3.3 > > -- > 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 -- 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