|
@@ -1247,7 +1247,14 @@ static void omap_i2c_prepare_recovery(struct i2c_adapter *adap)
|
|
|
u32 reg;
|
|
|
|
|
|
reg = omap_i2c_read_reg(dev, OMAP_I2C_SYSTEST_REG);
|
|
|
+ /* enable test mode */
|
|
|
reg |= OMAP_I2C_SYSTEST_ST_EN;
|
|
|
+ /* select SDA/SCL IO mode */
|
|
|
+ reg |= 3 << OMAP_I2C_SYSTEST_TMODE_SHIFT;
|
|
|
+ /* set SCL to high-impedance state (reset value is 0) */
|
|
|
+ reg |= OMAP_I2C_SYSTEST_SCL_O;
|
|
|
+ /* set SDA to high-impedance state (reset value is 0) */
|
|
|
+ reg |= OMAP_I2C_SYSTEST_SDA_O;
|
|
|
omap_i2c_write_reg(dev, OMAP_I2C_SYSTEST_REG, reg);
|
|
|
}
|
|
|
|
|
@@ -1257,7 +1264,11 @@ static void omap_i2c_unprepare_recovery(struct i2c_adapter *adap)
|
|
|
u32 reg;
|
|
|
|
|
|
reg = omap_i2c_read_reg(dev, OMAP_I2C_SYSTEST_REG);
|
|
|
+ /* restore reset values */
|
|
|
reg &= ~OMAP_I2C_SYSTEST_ST_EN;
|
|
|
+ reg &= ~OMAP_I2C_SYSTEST_TMODE_MASK;
|
|
|
+ reg &= ~OMAP_I2C_SYSTEST_SCL_O;
|
|
|
+ reg &= ~OMAP_I2C_SYSTEST_SDA_O;
|
|
|
omap_i2c_write_reg(dev, OMAP_I2C_SYSTEST_REG, reg);
|
|
|
}
|
|
|
|