diff options
Diffstat (limited to 'drivers/i2c/designware_i2c.c')
| -rw-r--r-- | drivers/i2c/designware_i2c.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index c2f06627d..cb2ac04b6 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);  }  /* @@ -237,9 +249,6 @@ static int i2c_xfer_finish(void)  	i2c_flush_rxfifo(); -	/* Wait for read/write operation to complete on actual memory */ -	udelay(10000); -  	return 0;  } |