Skip to contentSkip to conversation

i2c: Add support for designware i2c controller

PATCH New Amit Virdi 2 participants 5 messages Feb 27, 2012 – Apr 24, 2012

Subsystems (2)
lore
Share & tools
lore

Amit Virdi

author
#0 lore raw

PATCH 1/1 i2c: Add support for designware i2c controller

From: Vipin KUMAR <[email protected]>

Earlier, a driver exists in the u-boot source for designware i2c interface. That driver was specific to spear platforms. This patch implements the i2c controller as a generic driver which can be used by multiple platforms

The driver files are now renamed to designware_i2c.c and designware_i2c.h and these are moved into drivers/i2c folder for reusability by other platforms

---
 drivers/i2c/Makefile                               |    2 +-
 drivers/i2c/{spr_i2c.c => designware_i2c.c}        |    4 ++--
 .../spr_i2c.h => drivers/i2c/designware_i2c.h      |    6 +++---
 include/configs/spear-common.h                     |    2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)
 rename drivers/i2c/{spr_i2c.c => designware_i2c.c} (98%)
 rename arch/arm/include/asm/arch-spear/spr_i2c.h => drivers/i2c/designware_i2c.h (98%)
drivers/i2c/Makefile +1 -1
index 504db03..0d268f2 100644
@@ -27,6 +27,7 @@ LIB	:= $(obj)libi2c.o
 
 COBJS-$(CONFIG_BFIN_TWI_I2C) += bfin-twi_i2c.o
 COBJS-$(CONFIG_DRIVER_DAVINCI_I2C) += davinci_i2c.o
+COBJS-$(CONFIG_DW_I2C) += designware_i2c.o
 COBJS-$(CONFIG_FSL_I2C) += fsl_i2c.o
 COBJS-$(CONFIG_I2C_MVTWSI) += mvtwsi.o
 COBJS-$(CONFIG_I2C_MV) += mv_i2c.o
@@ -40,7 +41,6 @@ COBJS-$(CONFIG_PPC4XX_I2C) += ppc4xx_i2c.o
 COBJS-$(CONFIG_DRIVER_S3C24X0_I2C) += s3c24x0_i2c.o
 COBJS-$(CONFIG_S3C44B0_I2C) += s3c44b0_i2c.o
 COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o
-COBJS-$(CONFIG_SPEAR_I2C) += spr_i2c.o
 COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o
 COBJS-$(CONFIG_U8500_I2C) += u8500_i2c.o
 COBJS-$(CONFIG_SH_I2C) += sh_i2c.o
drivers/i2c/designware_i2c.c renamed from drivers/i2c/spr_i2c.c +2 -2
similarity index 98%
rename from drivers/i2c/spr_i2c.c
rename to drivers/i2c/designware_i2c.c
index eabfe84..d352146 100644
@@ -24,7 +24,7 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/hardware.h>
-#include <asm/arch/spr_i2c.h>
+#include "designware_i2c.h"
 
 static struct i2c_regs *const i2c_regs_p =
     (struct i2c_regs *)CONFIG_SYS_I2C_BASE;
@@ -113,7 +113,7 @@ int i2c_get_bus_speed(void)
 /*
  * i2c_init - Init function
  * @speed:	required i2c speed
- * @slaveadd:	slave address for the spear device
+ * @slaveadd:	slave address for the device
  *
  * Initialization function.
  */
drivers/i2c/designware_i2c.h renamed from arch/arm/include/asm/arch-spear/spr_i2c.h +3 -3
similarity index 98%
rename from arch/arm/include/asm/arch-spear/spr_i2c.h
rename to drivers/i2c/designware_i2c.h
index 7521ebc..03b520e 100644
@@ -21,8 +21,8 @@
  * MA 02111-1307 USA
  */
 
-#ifndef __SPR_I2C_H_
-#define __SPR_I2C_H_
+#ifndef __DW_I2C_H_
+#define __DW_I2C_H_
 
 struct i2c_regs {
 	u32 ic_con;
@@ -143,4 +143,4 @@ struct i2c_regs {
 #define I2C_FAST_SPEED		400000
 #define I2C_STANDARD_SPEED	100000
 
-#endif /* __SPR_I2C_H_ */
+#endif /* __DW_I2C_H_ */
include/configs/spear-common.h +1 -1
index 5a582e8..516b78e 100644
@@ -41,7 +41,7 @@
 
 /* I2C driver configuration */
 #define CONFIG_HARD_I2C
-#define CONFIG_SPEAR_I2C
+#define CONFIG_DW_I2C
 #define CONFIG_SYS_I2C_SPEED			400000
 #define CONFIG_SYS_I2C_SLAVE			0x02
 
Signature · 1 line
1.7.2.2
author
#1 lore raw

PATCH 1/1 i2c: Add support for designware i2c controller

Heiko,

Quoted 10 lines · Amit VIRDI

From: Vipin KUMAR<[email protected]>

Earlier, a driver exists in the u-boot source for designware i2c interface. That driver was specific to spear platforms. This patch implements the i2c controller as a generic driver which can be used by multiple platforms

The driver files are now renamed to designware_i2c.c and designware_i2c.h and these are moved into drivers/i2c folder for reusability by other platforms

Any updated on the status of this patch?

Thanks
Amit Virdi

author
#2 lore raw

PATCH 1/1 i2c:designware Turn off the ctrl when setting the speed

In reply to Amit Virdi

From: Armando Visconti <[email protected]>

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.

---
 drivers/i2c/designware_i2c.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)
drivers/i2c/designware_i2c.c +11 -0
index d352146..6d118ac 100644
@@ -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);
 }
 
 /*
Signature · 1 line
1.7.2.2
#3 lore raw

PATCH 1/1 i2c:designware Turn off the ctrl when setting the speed

Hello Amit,

Quoted 6 lines · Amit Virdi

From: Armando Visconti <[email protected]>

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.

Quoted 6 lines
---
 drivers/i2c/designware_i2c.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

Applied to u-boot-i2c.git

Thanks!

bye
Heiko

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#4 lore raw

PATCH 1/1 i2c: Add support for designware i2c controller

In reply to Amit Virdi

Hello Amit,

Quoted 12 lines · Amit Virdi

From: Vipin KUMAR <[email protected]>

Earlier, a driver exists in the u-boot source for designware i2c interface. That driver was specific to spear platforms. This patch implements the i2c controller as a generic driver which can be used by multiple platforms

The driver files are now renamed to designware_i2c.c and designware_i2c.h and these are moved into drivers/i2c folder for reusability by other platforms

Quoted 8 lines
---
 drivers/i2c/Makefile                               |    2 +-
 drivers/i2c/{spr_i2c.c => designware_i2c.c}        |    4 ++--
 .../spr_i2c.h => drivers/i2c/designware_i2c.h      |    6 +++---
 include/configs/spear-common.h                     |    2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)
 rename drivers/i2c/{spr_i2c.c => designware_i2c.c} (98%)
 rename arch/arm/include/asm/arch-spear/spr_i2c.h => drivers/i2c/designware_i2c.h (98%)

Applied to u-boot-i2c.git

Thanks!

bye
Heiko

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany