提交 498cbdfe 编写于 作者: P Patil, Rachna 提交者: Heiko Schocher

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: NChandan Nath <chandan.nath@ti.com>
Signed-off-by: NPatil, Rachna <rachna@ti.com>
上级 2faa7619
...@@ -147,7 +147,7 @@ static void flush_fifo(void) ...@@ -147,7 +147,7 @@ static void flush_fifo(void)
stat = readw(&i2c_base->stat); stat = readw(&i2c_base->stat);
if (stat == I2C_STAT_RRDY) { if (stat == I2C_STAT_RRDY) {
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \ #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
defined(CONFIG_OMAP44XX) defined(CONFIG_OMAP44XX) || defined(CONFIG_AM33XX)
readb(&i2c_base->data); readb(&i2c_base->data);
#else #else
readw(&i2c_base->data); readw(&i2c_base->data);
...@@ -247,7 +247,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -247,7 +247,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
switch (alen) { switch (alen) {
case 2: case 2:
/* Send address MSByte */ /* 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); writew(((addr >> 8) & 0xFF), &i2c_base->data);
/* Clearing XRDY event */ /* Clearing XRDY event */
...@@ -264,7 +265,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -264,7 +265,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
} }
#endif #endif
case 1: case 1:
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
defined(CONFIG_AM33XX)
/* Send address LSByte */ /* Send address LSByte */
writew((addr & 0xFF), &i2c_base->data); writew((addr & 0xFF), &i2c_base->data);
#else #else
...@@ -313,7 +315,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -313,7 +315,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
} }
if (status & I2C_STAT_RRDY) { 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); buffer[i] = readb(&i2c_base->data);
#else #else
*((u16 *)&buffer[i]) = *((u16 *)&buffer[i]) =
...@@ -400,7 +403,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -400,7 +403,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
if (!i2c_error) { if (!i2c_error) {
if (status & I2C_STAT_XRDY) { if (status & I2C_STAT_XRDY) {
switch (alen) { switch (alen) {
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
defined(CONFIG_AM33XX)
case 2: case 2:
/* send out MSB byte */ /* send out MSB byte */
writeb(((addr >> 8) & 0xFF), &i2c_base->data); writeb(((addr >> 8) & 0xFF), &i2c_base->data);
...@@ -420,7 +424,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -420,7 +424,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
break; break;
} }
case 1: case 1:
#if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX) || \
defined(CONFIG_AM33XX)
/* send out MSB byte */ /* send out MSB byte */
writeb((addr & 0xFF), &i2c_base->data); writeb((addr & 0xFF), &i2c_base->data);
#else #else
...@@ -442,7 +447,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) ...@@ -442,7 +447,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
if (!i2c_error) { if (!i2c_error) {
for (i = ((alen > 1) ? 0 : 1); i < len; i++) { for (i = ((alen > 1) ? 0 : 1); i < len; i++) {
if (status & I2C_STAT_XRDY) { 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), writeb((buffer[i] & 0xFF),
&i2c_base->data); &i2c_base->data);
#else #else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册