From e9774afedd20bfe8a18b20a63010c1d18cd16cd7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Beh=C3=BAn?= Date: Tue, 21 May 2024 09:13:33 +0200 Subject: [PATCH] cmd: eeprom: Refactor command execution into function by action MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- cmd/eeprom.c | 111 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/cmd/eeprom.c b/cmd/eeprom.c index e29639780d..c76cf43157 100644 --- a/cmd/eeprom.c +++ b/cmd/eeprom.c @@ -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 -- 2.39.5