diff mbox

[U-Boot] designware_i2c: disable i2c controller during target address setup

Message ID 1383832338-11981-1-git-send-email-abrodkin@synopsys.com
State Accepted
Delegated to: Heiko Schocher
Headers show

Commit Message

Alexey Brodkin Nov. 7, 2013, 1:52 p.m. UTC
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 <abrodkin@synopsys.com>

Cc: Tom Rini <trini@ti.com>
cc: Armando Visconti <armando.visconti@st.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
Cc: Heiko Schocher <hs@denx.de>
Cc: Vipin KUMAR <vipin.kumar@st.com>
Cc: Tom Rix <Tom.Rix@windriver.com>
Cc: Mischa Jonker <mjonker@synopsys.com>
---
 drivers/i2c/designware_i2c.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Albert ARIBAUD Nov. 7, 2013, 5:24 p.m. UTC | #1
Hi Alexey,

On Thu,  7 Nov 2013 17:52:18 +0400, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:

> 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 <abrodkin@synopsys.com>
> 
> Cc: Tom Rini <trini@ti.com>
> cc: Armando Visconti <armando.visconti@st.com>
> Cc: Stefan Roese <sr@denx.de>
> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net>
> Cc: Heiko Schocher <hs@denx.de>
> Cc: Vipin KUMAR <vipin.kumar@st.com>
> Cc: Tom Rix <Tom.Rix@windriver.com>
> Cc: Mischa Jonker <mjonker@synopsys.com>
> ---

/me wonders what made this patch Cc: me. Is it ARM-related in some way?

Amicalement,
Albert ARIBAUD Nov. 8, 2013, 12:10 p.m. UTC | #2
Hi Alexey,

On Thu, 7 Nov 2013 17:32:19 +0000, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:

> On Thu, 2013-11-07 at 18:24 +0100, Albert ARIBAUD wrote:
> > Hi Alexey,
> > 
> > On Thu,  7 Nov 2013 17:52:18 +0400, Alexey Brodkin
> > <Alexey.Brodkin@synopsys.com> wrote:
> > 
> > /me wonders what made this patch Cc: me. Is it ARM-related in some way?
> > 
> > Amicalement,
> 
> Hi Albert,
> 
> I noticed that you were a committer of
> 496ba48f5ec60187d9ff7e4298e3d37677d74530 "i2c: designware_i2c.c: Add
> support for the "i2c probe" command".
> 
> So I concluded that you might be interested in this driver and thus may
> want to be in the loop.

Thanks, that explains it -- although I don't remember why this one went
through me, but then, that is /my/ problem. :)

> -Alexey

Amicalement,
Heiko Schocher Nov. 13, 2013, 6:38 a.m. UTC | #3
Hello Alexey,

Am 07.11.2013 14:52, schrieb Alexey Brodkin:
> 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<abrodkin@synopsys.com>
>
> Cc: Tom Rini<trini@ti.com>
> cc: Armando Visconti<armando.visconti@st.com>
> Cc: Stefan Roese<sr@denx.de>
> Cc: Albert ARIBAUD<albert.u.boot@aribaud.net>
> Cc: Heiko Schocher<hs@denx.de>
> Cc: Vipin KUMAR<vipin.kumar@st.com>
> Cc: Tom Rix<Tom.Rix@windriver.com>
> Cc: Mischa Jonker<mjonker@synopsys.com>
>
> ---
> drivers/i2c/designware_i2c.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)

Thanks!

Applied to u-boot-i2c.git

bye,
Heiko
diff mbox

Patch

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);
 }
 
 /*