summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorPatil, Rachna <rachna@ti.com>2012-01-22 23:46:23 +0000
committerHeiko Schocher <hs@denx.de>2012-01-23 11:57:31 +0100
commit498cbdfe62a8330f6c89765bdd15e60328a26511 (patch)
tree75aba11ac162f8f19009d1bbde35895a665024b4 /drivers
parent2faa76196af4b3e93bcb9e38ed9090cbd3b06db3 (diff)
downloadu-boot-imx-498cbdfe62a8330f6c89765bdd15e60328a26511.zip
u-boot-imx-498cbdfe62a8330f6c89765bdd15e60328a26511.tar.gz
u-boot-imx-498cbdfe62a8330f6c89765bdd15e60328a26511.tar.bz2
ARM: AM33XX: Add AM33XX I2C driver support
1. Compliant with Philips I2C specification version 2.1 2. Supports upto 100Kbps in standard mode Signed-off-by: Chandan Nath <chandan.nath@ti.com> Signed-off-by: Patil, Rachna <rachna@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/omap24xx_i2c.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c
index 80932ef..f06af02 100644
--- a/drivers/i2c/omap24xx_i2c.c
+++ b/drivers/i2c/omap24xx_i2c.c
@@ -147,7 +147,7 @@ static void flush_fifo(void)
stat = readw(&i2c_base->stat);
if (stat == I2C_STAT_RRDY) {
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
- defined(CONFIG_OMAP44XX)
+ defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX)
readb(&i2c_base->data);
#else
readw(&i2c_base->data);
@@ -247,7 +247,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
switch (alen) {
case 2:
/* Send address MSByte */
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
writew(((addr >> 8) & 0xFF), &i2c_base->data);
/* Clearing XRDY event */
@@ -264,7 +265,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
}
#endif
case 1:
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
/* Send address LSByte */
writew((addr & 0xFF), &i2c_base->data);
#else
@@ -313,7 +315,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
}
if (status & I2C_STAT_RRDY) {
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
buffer[i] = readb(&i2c_base->data);
#else
*((u16 *)&buffer[i]) =
@@ -400,7 +403,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
if (!i2c_error) {
if (status & I2C_STAT_XRDY) {
switch (alen) {
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
case 2:
/* send out MSB byte */
writeb(((addr >> 8) & 0xFF), &i2c_base->data);
@@ -420,7 +424,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
break;
}
case 1:
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
/* send out MSB byte */
writeb((addr & 0xFF), &i2c_base->data);
#else
@@ -442,7 +447,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
if (!i2c_error) {
for (i = ((alen > 1) ? 0 : 1); i < len; i++) {
if (status & I2C_STAT_XRDY) {
-#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
+#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
+ defined(CONFIG_AM33XX)
writeb((buffer[i] & 0xFF),
&i2c_base->data);
#else