cmd_eeprom: bug fix for i2c read/write
The local pointer of address (i.e., addr) only gets referenced under SPI mode, and it won't be appropriate to pass only 1-byte addr[1] to i2c_read/i2c_write while CONFIG_SYS_I2C_EEPROM_ADDR_LEN > 1. 1. In U-boot's I2C model, the address would be re-assembled to a byte string in MSB order inside I2C controller drivers. 2. The 'CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW' option which could be found at soft_i2c.c is always turned on in cmd_eeprom.c, the addr[0] always contains the device address with overflowed MSB address bits. Signed-off-by: Kuo-Jung Su <dantesu@faraday-tech.com> Cc: Alexey Brodkin <abrodkin@synopsys.com> Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> cc: Peter Tyser <ptyser@xes-inc.com> Cc: Heiko Schocher <hs@denx.de> Cc: Wolfgang Denk <wd@denx.de> Cc: Stefan Roese <sr@denx.de> Cc: Mischa Jonker <mjonker@synopsys.com>
This commit is contained in:
parent
c727618d2c
commit
6ca6d080d6
|
@ -161,7 +161,7 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt
|
|||
#if defined(CONFIG_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C)
|
||||
spi_read (addr, alen, buffer, len);
|
||||
#else
|
||||
if (i2c_read (addr[0], addr[1], alen-1, buffer, len) != 0)
|
||||
if (i2c_read(addr[0], offset, alen - 1, buffer, len))
|
||||
rcode = 1;
|
||||
#endif
|
||||
buffer += len;
|
||||
|
@ -339,7 +339,7 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn
|
|||
/* Write is enabled ... now write eeprom value.
|
||||
*/
|
||||
#endif
|
||||
if (i2c_write (addr[0], addr[1], alen-1, buffer, len) != 0)
|
||||
if (i2c_write(addr[0], offset, alen - 1, buffer, len))
|
||||
rcode = 1;
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue