[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