From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Mon, 16 Nov 2015 12:28:02 +0100 Subject: [U-Boot] [PATCH 08/17] eeprom: Pull out address computation In-Reply-To: <1447185213-5799-8-git-send-email-marex@denx.de> References: <1447185213-5799-1-git-send-email-marex@denx.de> <1447185213-5799-8-git-send-email-marex@denx.de> Message-ID: <5649BDC2.3010201@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Marek, Am 10.11.2015 um 20:53 schrieb Marek Vasut: > Pull out the code computing the EEPROM address into separate function > so that it's not duplicated. > > Signed-off-by: Marek Vasut > Cc: Simon Glass > Cc: Tom Rini > Cc: Heiko Schocher > --- > common/cmd_eeprom.c | 64 ++++++++++++++++++++++------------------------------- > 1 file changed, 26 insertions(+), 38 deletions(-) Reviewed-by: Heiko Schocher bye, Heiko > > diff --git a/common/cmd_eeprom.c b/common/cmd_eeprom.c > index 7797d0e..5979993 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; > > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany