From: Armando Visconti Date: Thu, 29 Mar 2012 20:10:17 +0000 (+0000) Subject: i2c:designware Turn off the ctrl when setting the speed X-Git-Tag: v2012.07-rc1~152^2^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5e3e8dda51c46faedb124c0ffd6136e2ef09ae52;p=u-boot i2c:designware Turn off the ctrl when setting the speed The designware i2c controller must be turned off before setting the speed in IC_CON register, as stated in the section 6.3.1 of the dw_apb_i2c_db.pdf. Signed-off-by: Michel Sanches Signed-off-by: Armando Visconti Signed-off-by: Amit Virdi --- diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index d352146081..6d118acec4 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -40,6 +40,13 @@ static void set_speed(int i2c_spd) unsigned int cntl; unsigned int hcnt, lcnt; unsigned int high, low; + unsigned int enbl; + + /* to set speed cltr must be disabled */ + enbl = readl(&i2c_regs_p->ic_enable); + enbl &= ~IC_ENABLE_0B; + writel(enbl, &i2c_regs_p->ic_enable); + cntl = (readl(&i2c_regs_p->ic_con) & (~IC_CON_SPD_MSK)); @@ -71,6 +78,10 @@ static void set_speed(int i2c_spd) lcnt = (IC_CLK * low) / NANO_TO_MICRO; writel(lcnt, &i2c_regs_p->ic_fs_scl_lcnt); + + /* re-enable i2c ctrl back now that speed is set */ + enbl |= IC_ENABLE_0B; + writel(enbl, &i2c_regs_p->ic_enable); } /*