]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: eeprom: Refactor command execution into function by action
authorMarek Behún <kabel@kernel.org>
Tue, 21 May 2024 07:13:33 +0000 (09:13 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 7 Jun 2024 16:48:00 +0000 (10:48 -0600)
Refactor the eeprom_execute_command() function into separate functions
do_eeprom_rw(), do_eeprom_print() and do_eeprom_update().

Signed-off-by: Marek Behún <kabel@kernel.org>
cmd/eeprom.c

index e29639780de030b1da8831ede2aa965732998267..c76cf43157852f35970d35f2165b75df48fb7f10 100644 (file)
@@ -288,61 +288,75 @@ static enum eeprom_action parse_action(char *cmd)
        return EEPROM_ACTION_INVALID;
 }
 
-static int eeprom_execute_command(enum eeprom_action action,
-                                 struct eeprom_dev_spec *dev,
-                                 int layout_ver, char *key, char *value,
-                                 ulong addr, ulong off, ulong cnt)
+static int do_eeprom_rw(struct eeprom_dev_spec *dev, bool read,
+                       ulong addr, ulong off, ulong cnt)
 {
-       int rcode = 0;
        const char *const fmt =
                "\nEEPROM @0x%lX %s: addr 0x%08lx  off 0x%04lx  count %ld ... ";
+       uchar *memloc = (uchar *)addr;
+       int ret;
+
+       printf(fmt, dev->i2c_addr, read ? "read" : "write", addr, off, cnt);
+       if (read)
+               ret = eeprom_read(dev->i2c_addr, off, memloc, cnt);
+       else
+               ret = eeprom_write(dev->i2c_addr, off, memloc, cnt);
+       puts("done\n");
+
+       return ret;
+}
+
 #ifdef CONFIG_CMD_EEPROM_LAYOUT
-       struct eeprom_layout layout;
-#endif
 
-       if (action == EEPROM_ACTION_INVALID)
-               return CMD_RET_USAGE;
+static int do_eeprom_layout(struct eeprom_dev_spec *dev, int layout_ver,
+                           struct eeprom_layout *layout)
+{
+       int ret;
 
-       eeprom_init(dev->i2c_bus);
-       if (action == EEPROM_READ) {
-               printf(fmt, dev->i2c_addr, "read", addr, off, cnt);
+       ret = eeprom_read(dev->i2c_addr, 0, eeprom_buf, CONFIG_SYS_EEPROM_SIZE);
+       if (ret)
+               return ret;
 
-               rcode = eeprom_read(dev->i2c_addr, off, (uchar *)addr, cnt);
+       eeprom_layout_setup(layout, eeprom_buf, CONFIG_SYS_EEPROM_SIZE,
+                           layout_ver);
 
-               puts("done\n");
-               return rcode;
-       } else if (action == EEPROM_WRITE) {
-               printf(fmt, dev->i2c_addr, "write", addr, off, cnt);
+       return 0;
+}
 
-               rcode = eeprom_write(dev->i2c_addr, off, (uchar *)addr, cnt);
+static int do_eeprom_print(struct eeprom_dev_spec *dev, int layout_ver)
+{
+       struct eeprom_layout layout;
+       int ret;
 
-               puts("done\n");
-               return rcode;
-       }
+       ret = do_eeprom_layout(dev, layout_ver, &layout);
+       if (ret)
+               return ret;
 
-#ifdef CONFIG_CMD_EEPROM_LAYOUT
-       rcode = eeprom_read(dev->i2c_addr, 0, eeprom_buf,
-                           CONFIG_SYS_EEPROM_SIZE);
-       if (rcode < 0)
-               return rcode;
+       layout.print(&layout);
 
-       eeprom_layout_setup(&layout, eeprom_buf, CONFIG_SYS_EEPROM_SIZE,
-                           layout_ver);
+       return 0;
+}
 
-       if (action == EEPROM_PRINT) {
-               layout.print(&layout);
-               return 0;
-       }
+static int do_eeprom_update(struct eeprom_dev_spec *dev, int layout_ver,
+                           char *key, char *value)
+{
+       struct eeprom_layout layout;
+       int ret;
 
-       layout.update(&layout, key, value);
+       ret = do_eeprom_layout(dev, layout_ver, &layout);
+       if (ret)
+               return ret;
 
-       rcode = eeprom_write(dev->i2c_addr, 0, layout.data,
-                            CONFIG_SYS_EEPROM_SIZE);
-#endif
+       ret = layout.update(&layout, key, value);
+       if (ret)
+               return CMD_RET_FAILURE;
 
-       return rcode;
+       return eeprom_write(dev->i2c_addr, 0, layout.data,
+                           CONFIG_SYS_EEPROM_SIZE);
 }
 
+#endif
+
 static int eeprom_action_expected_argc(enum eeprom_action action)
 {
        switch (action) {
@@ -361,13 +375,15 @@ static int eeprom_action_expected_argc(enum eeprom_action action)
 #define NEXT_PARAM(argc, index)        { (argc)--; (index)++; }
 int do_eeprom(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
-       int layout_ver = LAYOUT_VERSION_AUTODETECT;
        enum eeprom_action action = EEPROM_ACTION_INVALID;
        struct eeprom_dev_spec dev;
        ulong addr = 0, cnt = 0, off = 0;
        int ret, index = 0;
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
        char *field_name = "";
        char *field_value = "";
+       int layout_ver = LAYOUT_VERSION_AUTODETECT;
+#endif
 
        if (argc <= 1)
                return CMD_RET_USAGE;
@@ -416,8 +432,23 @@ int do_eeprom(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
        }
 #endif
 
-       return eeprom_execute_command(action, &dev, layout_ver, field_name,
-                                     field_value, addr, off, cnt);
+       eeprom_init(dev.i2c_bus);
+
+       switch (action) {
+       case EEPROM_READ:
+       case EEPROM_WRITE:
+               return do_eeprom_rw(&dev, action == EEPROM_READ,
+                                   addr, off, cnt);
+#ifdef CONFIG_CMD_EEPROM_LAYOUT
+       case EEPROM_PRINT:
+               return do_eeprom_print(&dev, layout_ver);
+       case EEPROM_UPDATE:
+               return do_eeprom_update(&dev, layout_ver,
+                                       field_name, field_value);
+#endif
+       default:
+               return CMD_RET_USAGE;
+       }
 }
 
 #ifdef CONFIG_EEPROM_LAYOUT_VERSIONS