eeprom: Pull out address computation
authorMarek Vasut <marex@denx.de>
Tue, 10 Nov 2015 19:53:24 +0000 (20:53 +0100)
committerTom Rini <trini@konsulko.com>
Sun, 22 Nov 2015 02:50:23 +0000 (21:50 -0500)
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>
common/cmd_eeprom.c

index 7797d0ec9c9c6446f961614f7baac53f64259378..59799939123b769da1dffeb3def7202b3aa09fa9 100644 (file)
@@ -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;