diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c index 9b1db8160d1c..653e471ca9cb 100644 --- a/drivers/i2c/busses/i2c-rk3x.c +++ b/drivers/i2c/busses/i2c-rk3x.c @@ -246,6 +246,13 @@ static inline void rk3x_i2c_clean_ipd(struct rk3x_i2c *i2c) i2c_writel(i2c, REG_INT_ALL, REG_IPD); } +static inline void rk3x_i2c_disable(struct rk3x_i2c *i2c) +{ + u32 val = i2c_readl(i2c, REG_CON) & REG_CON_TUNING_MASK; + + i2c_writel(i2c, val, REG_CON); +} + /** * Generate a START condition, which triggers a REG_INT_START interrupt. */ @@ -1118,6 +1125,8 @@ static int rk3x_i2c_xfer(struct i2c_adapter *adap, } } + rk3x_i2c_disable(i2c); + clk_disable(i2c->pclk); clk_disable(i2c->clk);