diff options
| author | Armando Visconti <armando.visconti@st.com> | 2012-03-29 20:10:17 +0000 | 
|---|---|---|
| committer | Heiko Schocher <hs@denx.de> | 2012-04-24 09:57:00 +0200 | 
| commit | 5e3e8dda51c46faedb124c0ffd6136e2ef09ae52 (patch) | |
| tree | 9089a5c1e0322da753296e9147288ed27353d97d /drivers/i2c | |
| parent | 031ed2fa748ccfc746bd0e0073f8690c84a0d7b6 (diff) | |
| download | olio-uboot-2014.01-5e3e8dda51c46faedb124c0ffd6136e2ef09ae52.tar.xz olio-uboot-2014.01-5e3e8dda51c46faedb124c0ffd6136e2ef09ae52.zip | |
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 <michel.sanches@st.com>
Signed-off-by: Armando Visconti <armando.visconti@st.com>
Signed-off-by: Amit Virdi <amit.virdi@st.com>
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/designware_i2c.c | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index d35214608..6d118acec 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);  }  /* |