As it is stated in DesignWare I2C databook: writes to IC_TAR (0x4) register succeed only when IC_ENABLE[0] is set to 0.
Signed-off-by: Alexey Brodkin <abrod...@synopsys.com> Cc: Tom Rini <tr...@ti.com> cc: Armando Visconti <armando.visco...@st.com> Cc: Stefan Roese <s...@denx.de> Cc: Albert ARIBAUD <albert.u.b...@aribaud.net> Cc: Heiko Schocher <h...@denx.de> Cc: Vipin KUMAR <vipin.ku...@st.com> Cc: Tom Rix <tom....@windriver.com> Cc: Mischa Jonker <mjon...@synopsys.com> --- drivers/i2c/designware_i2c.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index c2f0662..c5c6015 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -151,7 +151,19 @@ void i2c_init(int speed, int slaveadd) */ static void i2c_setaddress(unsigned int i2c_addr) { + unsigned int enbl; + + /* Disable i2c */ + enbl = readl(&i2c_regs_p->ic_enable); + enbl &= ~IC_ENABLE_0B; + writel(enbl, &i2c_regs_p->ic_enable); + writel(i2c_addr, &i2c_regs_p->ic_tar); + + /* Enable i2c */ + enbl = readl(&i2c_regs_p->ic_enable); + enbl |= IC_ENABLE_0B; + writel(enbl, &i2c_regs_p->ic_enable); } /* -- 1.8.4.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot