[U-Boot] [PATCH] mxs-i2c: Fix internal address byte order

Torsten Fleischer to-fleischer at t-online.de
Tue Apr 17 17:37:45 CEST 2012


Large EEPROMs, e.g. 24lc32, need 2 byte to address the internal memory.
These devices require that the high byte of the internal address has to be
written first.
The mxs_i2c driver currently writes the address' low byte first.

The following patch fixes the byte order of the internal address that should
be written to the I2C device.

Signed-off-by: Torsten Fleischer <to-fleischer at t-online.de>

CC: Marek Vasut <marex at denx.de>
CC: Stefano Babic <sbabic at denx.de>
CC: Fabio Estevam <fabio.estevam at freescale.com>
---
 drivers/i2c/mxs_i2c.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/i2c/mxs_i2c.c b/drivers/i2c/mxs_i2c.c
index c8fea32..48aaaa6 100644
--- a/drivers/i2c/mxs_i2c.c
+++ b/drivers/i2c/mxs_i2c.c
@@ -97,7 +97,7 @@ void mxs_i2c_write(uchar chip, uint addr, int alen,
 
 	for (i = 0; i < alen; i++) {
 		data >>= 8;
-		data |= ((char *)&addr)[i] << 24;
+		data |= ((char *)&addr)[alen - i - 1] << 24;
 		if ((i & 3) == 2)
 			writel(data, &i2c_regs->hw_i2c_data);
 	}
-- 
1.7.7



More information about the U-Boot mailing list