summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Loeliger <jdl@freescale.com>2006-10-19 12:02:24 -0500
committerJon Loeliger <jdl@freescale.com>2006-10-19 12:02:24 -0500
commit4d45f69e362b05892c9e92a7907e5820995612aa (patch)
tree789e76a928bbb1d46fc53c7f3d490f6a2715092b
parent7237c033b02fe295880435f1eb80819a0c987532 (diff)
downloadu-boot-imx-4d45f69e362b05892c9e92a7907e5820995612aa.zip
u-boot-imx-4d45f69e362b05892c9e92a7907e5820995612aa.tar.gz
u-boot-imx-4d45f69e362b05892c9e92a7907e5820995612aa.tar.bz2
Rewrite a series of goto statements as a sequences of
conditional expressions instead. Use consistent return code 0/-1 for good/bad indicators. Include one fewer file if the driver isn't used at all. Signed-off-by: Jon Loeliger <jdl@freescale.com>
-rw-r--r--drivers/fsl_i2c.c52
1 files changed, 21 insertions, 31 deletions
diff --git a/drivers/fsl_i2c.c b/drivers/fsl_i2c.c
index 72b2556..af19191 100644
--- a/drivers/fsl_i2c.c
+++ b/drivers/fsl_i2c.c
@@ -16,18 +16,16 @@
* MA 02111-1307 USA
*/
-
#include <common.h>
-#include <command.h>
#ifdef CONFIG_HARD_I2C
+#include <command.h>
#include <asm/io.h>
#include <asm/fsl_i2c.h>
#define I2C_TIMEOUT (CFG_HZ / 4)
-
-#define I2C ((struct fsl_i2c *)(CFG_IMMR + CFG_I2C_OFFSET))
+#define I2C ((struct fsl_i2c *)(CFG_IMMR + CFG_I2C_OFFSET))
void
@@ -170,24 +168,19 @@ i2c_read(u8 dev, uint addr, int alen, u8 *data, int length)
int i = 0;
u8 *a = (u8*)&addr;
- if (i2c_wait4bus () < 0)
- goto exit;
-
- if (i2c_write_addr(dev, I2C_WRITE, 0) == 0)
- goto exit;
-
- if (__i2c_write(&a[4 - alen], alen) != alen)
- goto exit;
-
- if (i2c_write_addr(dev, I2C_READ, 1) == 0)
- goto exit;
-
- i = __i2c_read(data, length);
+ if (i2c_wait4bus() >= 0
+ && i2c_write_addr(dev, I2C_WRITE, 0) != 0
+ && __i2c_write(&a[4 - alen], alen) == alen
+ && i2c_write_addr(dev, I2C_READ, 1) != 0) {
+ i = __i2c_read(data, length);
+ }
- exit:
writeb(I2C_CR_MEN, &I2C->cr);
- return !(i == length);
+ if (i == length)
+ return 0;
+
+ return -1;
}
int
@@ -196,21 +189,18 @@ i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)
int i = 0;
u8 *a = (u8*)&addr;
- if (i2c_wait4bus() < 0)
- goto exit;
-
- if (i2c_write_addr(dev, I2C_WRITE, 0) == 0)
- goto exit;
-
- if (__i2c_write(&a[4 - alen], alen) != alen)
- goto exit;
-
- i = __i2c_write(data, length);
+ if (i2c_wait4bus() >= 0
+ && i2c_write_addr(dev, I2C_WRITE, 0) != 0
+ && __i2c_write(&a[4 - alen], alen) == alen) {
+ i = __i2c_write(data, length);
+ }
- exit:
writeb(I2C_CR_MEN, &I2C->cr);
- return !(i == length);
+ if (i == length)
+ return 0;
+
+ return -1;
}
int