diff options
author | Marek Vasut <marex@denx.de> | 2015-11-10 20:53:24 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-11-21 21:50:23 -0500 |
commit | 02c321cf88c14f330e696830554739d745bb359d (patch) | |
tree | 4e70c47da0ad1eb33162a06fcb55764ea9adbfc0 /common | |
parent | 9132088b00b6ba4d57536f2a3895ee71f28509d0 (diff) |
eeprom: Pull out address computation
Pull out the code computing the EEPROM address into separate function
so that it's not duplicated.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Cc: Heiko Schocher <hs@denx.de>
Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_eeprom.c | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/common/cmd_eeprom.c b/common/cmd_eeprom.c index 7797d0ec9c..5979993912 100644 --- a/common/cmd_eeprom.c +++ b/common/cmd_eeprom.c @@ -61,6 +61,28 @@ void eeprom_init(void) #endif } +static int eeprom_addr(unsigned dev_addr, unsigned offset, uchar *addr) +{ + unsigned blk_off; + int alen; + + blk_off = offset & 0xff; /* block offset */ +#if CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 + addr[0] = offset >> 8; /* block number */ + addr[1] = blk_off; /* block offset */ + alen = 2; +#else + addr[0] = offset >> 16; /* block number */ + addr[1] = offset >> 8; /* upper address octet */ + addr[2] = blk_off; /* lower address octet */ + alen = 3; +#endif /* CONFIG_SYS_I2C_EEPROM_ADDR_LEN */ + + addr[0] |= dev_addr; /* insert device address */ + + return alen; +} + static int eeprom_rw_block(unsigned offset, uchar *addr, unsigned alen, uchar *buffer, unsigned len, bool read) { @@ -94,6 +116,7 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt unsigned end = offset + cnt; unsigned blk_off; int rcode = 0; + uchar addr[3]; /* * Read data until done or would cross a page boundary. @@ -106,26 +129,8 @@ int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt unsigned maxlen; #endif -#if CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 - uchar addr[2]; - - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 8; /* block number */ - addr[1] = blk_off; /* block offset */ - alen = 2; -#else - uchar addr[3]; - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 16; /* block number */ - addr[1] = offset >> 8; /* upper address octet */ - addr[2] = blk_off; /* lower address octet */ - alen = 3; -#endif /* CONFIG_SYS_I2C_EEPROM_ADDR_LEN */ - - addr[0] |= dev_addr; /* insert device address */ + alen = eeprom_addr(dev_addr, offset, addr); len = end - offset; @@ -156,6 +161,7 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn unsigned end = offset + cnt; unsigned blk_off; int rcode = 0; + uchar addr[3]; #if defined(CONFIG_SYS_EEPROM_WREN) eeprom_write_enable (dev_addr,1); @@ -172,26 +178,8 @@ int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cn unsigned maxlen; #endif -#if CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 - uchar addr[2]; - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 8; /* block number */ - addr[1] = blk_off; /* block offset */ - alen = 2; -#else - uchar addr[3]; - - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 16; /* block number */ - addr[1] = offset >> 8; /* upper address octet */ - addr[2] = blk_off; /* lower address octet */ - alen = 3; -#endif /* CONFIG_SYS_I2C_EEPROM_ADDR_LEN */ - - addr[0] |= dev_addr; /* insert device address */ + alen = eeprom_addr(dev_addr, offset, addr); len = end - offset; |