From: Armando Visconti <armando.visco...@st.com>

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.sanc...@st.com>
Signed-off-by: Armando Visconti <armando.visco...@st.com>
Signed-off-by: Amit Virdi <amit.vi...@st.com>
---
 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 d352146..6d118ac 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);
 }
 
 /*
-- 
1.7.2.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to