eeprom: use eeprom_execute_command for all eeprom functions
authorNikita Kiryanov <nikita@compulab.co.il>
Sat, 16 Apr 2016 14:55:12 +0000 (17:55 +0300)
committerTom Rini <trini@konsulko.com>
Sat, 21 May 2016 00:42:40 +0000 (20:42 -0400)
Update eeprom_execute_command() and related code to accommodate both layout
aware and layout unaware functions.

No functional changes.

Cc: Heiko Schocher <hs@denx.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Tom Rini <trini@konsulko.com>
Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
[trini: Make eeprom_execute_command have ulong for i2c_addr]
Signed-off-by: Tom Rini <trini@konsulko.com>
cmd/eeprom.c

index 54bf06ceb32f1d8d6422cd31b8479276050c82c0..0f2a9f763f72498b9aa1617495c2403f903c8542 100644 (file)
@@ -24,6 +24,7 @@
 #include <config.h>
 #include <command.h>
 #include <i2c.h>
+#include <eeprom_layout.h>
 
 #ifndef        CONFIG_SYS_I2C_SPEED
 #define        CONFIG_SYS_I2C_SPEED    50000
@@ -258,7 +259,6 @@ static int parse_i2c_bus_addr(int *i2c_bus, ulong *i2c_addr, int argc,
 }
 
 #ifdef CONFIG_CMD_EEPROM_LAYOUT
-#include <eeprom_layout.h>
 
 __weak int eeprom_parse_layout_version(char *str)
 {
@@ -271,12 +271,17 @@ static unsigned char eeprom_buf[CONFIG_SYS_EEPROM_SIZE];
 #define CONFIG_EEPROM_LAYOUT_HELP_STRING "<not defined>"
 #endif
 
+#endif
+
 enum eeprom_action {
+       EEPROM_READ,
+       EEPROM_WRITE,
        EEPROM_PRINT,
        EEPROM_UPDATE,
        EEPROM_ACTION_INVALID,
 };
 
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
 static enum eeprom_action parse_action(char *cmd)
 {
        if (!strncmp(cmd, "print", 5))
@@ -286,18 +291,40 @@ static enum eeprom_action parse_action(char *cmd)
 
        return EEPROM_ACTION_INVALID;
 }
+#endif
 
 static int eeprom_execute_command(enum eeprom_action action, int i2c_bus,
-                                 int i2c_addr, int layout_ver, char *key,
-                                 char *value)
+                                 ulong i2c_addr, int layout_ver, char *key,
+                                 char *value, ulong addr, ulong off, ulong cnt)
 {
-       int rcode;
+       int rcode = 0;
+       const char *const fmt =
+               "\nEEPROM @0x%lX %s: addr %08lx  off %04lx  count %ld ... ";
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
        struct eeprom_layout layout;
+#endif
 
        if (action == EEPROM_ACTION_INVALID)
                return CMD_RET_USAGE;
 
        eeprom_init(i2c_bus);
+       if (action == EEPROM_READ) {
+               printf(fmt, i2c_addr, "read", addr, off, cnt);
+
+               rcode = eeprom_read(i2c_addr, off, (uchar *)addr, cnt);
+
+               puts("done\n");
+               return rcode;
+       } else if (action == EEPROM_WRITE) {
+               printf(fmt, i2c_addr, "write", addr, off, cnt);
+
+               rcode = eeprom_write(i2c_addr, off, (uchar *)addr, cnt);
+
+               puts("done\n");
+               return rcode;
+       }
+
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
        rcode = eeprom_read(i2c_addr, 0, eeprom_buf, CONFIG_SYS_EEPROM_SIZE);
        if (rcode < 0)
                return rcode;
@@ -313,10 +340,12 @@ static int eeprom_execute_command(enum eeprom_action action, int i2c_bus,
        layout.update(&layout, key, value);
 
        rcode = eeprom_write(i2c_addr, 0, layout.data, CONFIG_SYS_EEPROM_SIZE);
+#endif
 
        return rcode;
 }
 
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
 #define NEXT_PARAM(argc, index)        { (argc)--; (index)++; }
 static int do_eeprom_layout(cmd_tbl_t *cmdtp, int flag, int argc,
                            char * const argv[])
@@ -369,15 +398,13 @@ static int do_eeprom_layout(cmd_tbl_t *cmdtp, int flag, int argc,
 
 done:
        return eeprom_execute_command(action, i2c_bus, i2c_addr, layout_ver,
-                              field_name, field_value);
+                                     field_name, field_value, 0, 0, 0);
 }
 
 #endif
 
 static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       const char *const fmt =
-               "\nEEPROM @0x%lX %s: addr %08lx  off %04lx  count %ld ... ";
        char * const *args = &argv[2];
        int rcode;
        ulong dev_addr, addr, off, cnt;
@@ -398,22 +425,14 @@ static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        off = simple_strtoul(*args++, NULL, 16);
        cnt = simple_strtoul(*args++, NULL, 16);
 
-       eeprom_init(bus_addr);
-
        if (strcmp(argv[1], "read") == 0) {
-               printf(fmt, dev_addr, argv[1], addr, off, cnt);
-
-               rcode = eeprom_read(dev_addr, off, (uchar *)addr, cnt);
-
-               puts("done\n");
-               return rcode;
+               return eeprom_execute_command(EEPROM_READ, bus_addr, dev_addr,
+                                             LAYOUT_VERSION_UNRECOGNIZED,
+                                             NULL, NULL, addr, off, cnt);
        } else if (strcmp(argv[1], "write") == 0) {
-               printf(fmt, dev_addr, argv[1], addr, off, cnt);
-
-               rcode = eeprom_write(dev_addr, off, (uchar *)addr, cnt);
-
-               puts("done\n");
-               return rcode;
+               return eeprom_execute_command(EEPROM_WRITE, bus_addr, dev_addr,
+                                             LAYOUT_VERSION_UNRECOGNIZED,
+                                             NULL, NULL, addr, off, cnt);
        }
 
        return CMD_RET_USAGE;