[U-Boot] [PATCH] Davinci I2C code cleanup

ksi at koi8.net ksi at koi8.net
Thu Feb 19 22:52:30 CET 2009


Removed CHECK_NACK macro from Davinci I2C driver for code cleanup.

Signed-off-by: Sergey Kubushyn <ksi at koi8.net>
---
 cpu/arm926ejs/davinci/i2c.c |   62 +++++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 17 deletions(-)

diff --git a/cpu/arm926ejs/davinci/i2c.c b/cpu/arm926ejs/davinci/i2c.c
index 3ba20ef..f48aae2 100644
--- a/cpu/arm926ejs/davinci/i2c.c
+++ b/cpu/arm926ejs/davinci/i2c.c
@@ -32,14 +32,6 @@
 #include <asm/arch/hardware.h>
 #include <asm/arch/i2c_defs.h>
 
-#define CHECK_NACK() \
-	do {\
-		if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {\
-			REG(I2C_CON) = 0;\
-			return(1);\
-		}\
-	} while (0)
-
 
 static int wait_for_bus(void)
 {
@@ -179,7 +171,11 @@ int i2c_read(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 
 		tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK);
 
-		CHECK_NACK();
+		/* Check for NACK */
+		if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+			REG(I2C_CON) = 0;
+			return(1);
+		}
 
 		switch (alen) {
 			case 2:
@@ -193,7 +189,11 @@ int i2c_read(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 
 				tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK);
 
-				CHECK_NACK();
+				/* Check for NACK */
+				if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+					REG(I2C_CON) = 0;
+					return(1);
+				}
 				/* No break, fall through */
 			case 1:
 				/* Send address LSByte */
@@ -206,7 +206,11 @@ int i2c_read(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 
 				tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK | I2C_STAT_ARDY);
 
-				CHECK_NACK();
+				/* Check for NACK */
+				if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+					REG(I2C_CON) = 0;
+					return(1);
+				}
 
 				if (!(tmp & I2C_STAT_ARDY)) {
 					REG(I2C_CON) = 0;
@@ -224,7 +228,11 @@ int i2c_read(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 	for (i = 0; i < len; i++) {
 		tmp = poll_i2c_irq(I2C_STAT_RRDY | I2C_STAT_NACK | I2C_STAT_ROVR);
 
-		CHECK_NACK();
+		/* Check for NACK */
+		if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+			REG(I2C_CON) = 0;
+			return(1);
+		}
 
 		if (tmp & I2C_STAT_RRDY) {
 			buf[i] = REG(I2C_DRR);
@@ -236,7 +244,11 @@ int i2c_read(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 
 	tmp = poll_i2c_irq(I2C_STAT_SCD | I2C_STAT_NACK);
 
-	CHECK_NACK();
+	/* Check for NACK */
+	if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+		REG(I2C_CON) = 0;
+		return(1);
+	}
 
 	if (!(tmp & I2C_STAT_SCD)) {
 		REG(I2C_CON) = 0;
@@ -279,7 +291,11 @@ int i2c_write(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 			/* Send address MSByte */
 			tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK);
 
-			CHECK_NACK();
+			/* Check for NACK */
+			if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+				REG(I2C_CON) = 0;
+				return(1);
+			}
 
 			if (tmp & I2C_STAT_XRDY) {
 				REG(I2C_DXR) = (addr >> 8) & 0xff;
@@ -292,7 +308,11 @@ int i2c_write(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 			/* Send address LSByte */
 			tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK);
 
-			CHECK_NACK();
+			/* Check for NACK */
+			if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+				REG(I2C_CON) = 0;
+				return(1);
+			}
 
 			if (tmp & I2C_STAT_XRDY) {
 				REG(I2C_DXR) = addr & 0xff;
@@ -305,7 +325,11 @@ int i2c_write(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 	for (i = 0; i < len; i++) {
 		tmp = poll_i2c_irq(I2C_STAT_XRDY | I2C_STAT_NACK);
 
-		CHECK_NACK();
+		/* Check for NACK */
+		if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+			REG(I2C_CON) = 0;
+			return(1);
+		}
 
 		if (tmp & I2C_STAT_XRDY) {
 			REG(I2C_DXR) = buf[i];
@@ -316,7 +340,11 @@ int i2c_write(u_int8_t chip, u_int32_t addr, int alen, u_int8_t *buf, int len)
 
 	tmp = poll_i2c_irq(I2C_STAT_SCD | I2C_STAT_NACK);
 
-	CHECK_NACK();
+	/* Check for NACK */
+	if (tmp & (I2C_TIMEOUT | I2C_STAT_NACK)) {
+		REG(I2C_CON) = 0;
+		return(1);
+	}
 
 	if (!(tmp & I2C_STAT_SCD)) {
 		REG(I2C_CON) = 0;


More information about the U-Boot mailing list