mxs-i2c: Fix internal address byte order
authorTorsten Fleischer <to-fleischer@t-online.de>
Tue, 17 Apr 2012 05:37:45 +0000 (05:37 +0000)
committerHeiko Schocher <hs@denx.de>
Wed, 11 Jul 2012 08:54:53 +0000 (10:54 +0200)
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@t-online.de>
CC: Marek Vasut <marex@denx.de>
CC: Stefano Babic <sbabic@denx.de>
CC: Fabio Estevam <fabio.estevam@freescale.com>
Acked-by: Marek Vasut <marex@denx.de>
Acked-by: Stefano Babic <sbabic@denx.de>
drivers/i2c/mxs_i2c.c

index c8fea32..48aaaa6 100644 (file)
@@ -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);
        }