[U-Boot] [PATCH] mxs-i2c: Fix internal address byte order
Marek Vasut
marex at denx.de
Tue May 1 04:45:32 CEST 2012
Dear Torsten Fleischer,
> 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.
Are you sure about it? Are you sure what you're seeing isn't FIFO overrun?
Basically, how does your problem manifest? How did you test this? We've been
having similar issues in Linux recently.
>
> 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);
> }
Best regards,
Marek Vasut
More information about the U-Boot
mailing list