static int spl_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const cmd_tbl_t *c; if (argc < 2) /* no subcommand */ return cmd_usage(cmdtp); c = find_cmd_tbl(argv[1], &cmd_spl_export_sub[0], ARRAY_SIZE(cmd_spl_export_sub)); if ((c) && ((int)c->cmd <= SPL_EXPORT_LAST)) { argc -= 2; argv += 2; if (call_bootm(argc, argv, subcmd_list[(int)c->cmd])) return -1; switch ((int)c->cmd) { #ifdef CONFIG_OF_LIBFDT case SPL_EXPORT_FDT: printf("Argument image is now in RAM: 0x%p\n", (void *)images.ft_addr); break; #endif case SPL_EXPORT_ATAGS: printf("Argument image is now in RAM at: 0x%p\n", (void *)gd->bd->bi_boot_params); break; } } else { /* Unrecognized command */ return cmd_usage(cmdtp); } return 0; }
static int do_spl(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const cmd_tbl_t *c; int cmd; if (argc < 2) /* no subcommand */ return cmd_usage(cmdtp); c = find_cmd_tbl(argv[1], &cmd_spl_sub[0], ARRAY_SIZE(cmd_spl_sub)); if (c) { cmd = (int)c->cmd; switch (cmd) { case SPL_EXPORT: argc--; argv++; if (spl_export(cmdtp, flag, argc, argv)) printf("Subcommand failed\n"); break; default: /* unrecognized command */ return cmd_usage(cmdtp); } } else { /* Unrecognized command */ return cmd_usage(cmdtp); } return 0; }
static int do_bootm_subcommand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int ret = 0; long state; cmd_tbl_t *c; c = find_cmd_tbl(argv[0], &cmd_bootm_sub[0], ARRAY_SIZE(cmd_bootm_sub)); argc--; argv++; if (c) { state = (long)c->cmd; if (state == BOOTM_STATE_START) state |= BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER; } else { /* Unrecognized command */ return CMD_RET_USAGE; } if (state != BOOTM_STATE_START && images.state >= state) { printf("Trying to execute a command out of order\n"); return CMD_RET_USAGE; } ret = do_bootm_states(cmdtp, flag, argc, argv, state, &images, 0); return ret; }
/** * do_efidebug() - display and configure UEFI environment * * @cmdtp: Command table * @flag: Command flag * @argc: Number of arguments * @argv: Argument array * Return: CMD_RET_SUCCESS on success, * CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure * * Implement efidebug command which allows us to display and * configure UEFI environment. * See above for details of sub-commands. */ static int do_efidebug(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cp; efi_status_t r; if (argc < 2) return CMD_RET_USAGE; argc--; argv++; /* Initialize UEFI drivers */ r = efi_init_obj_list(); if (r != EFI_SUCCESS) { printf("Error: Cannot initialize UEFI sub-system, r = %lu\n", r & ~EFI_ERROR_MASK); return CMD_RET_FAILURE; } cp = find_cmd_tbl(argv[0], cmd_efidebug_sub, ARRAY_SIZE(cmd_efidebug_sub)); if (!cp) return CMD_RET_USAGE; return cp->cmd(cmdtp, flag, argc, argv); }
cmd_tbl_t *find_cmd (const char *cmd) { int len = __command_list_used; return find_cmd_tbl(cmd, __command_list, len); }
int do_pca953x(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { static uint8_t chip = CONFIG_SYS_I2C_PCA953X_ADDR; int val; ulong ul_arg2 = 0; ulong ul_arg3 = 0; cmd_tbl_t *c; c = find_cmd_tbl(argv[1], cmd_pca953x, ARRAY_SIZE(cmd_pca953x)); /* All commands but "device" require 'maxargs' arguments */ if (!c || !((argc == (c->maxargs)) || (((int)c->cmd == PCA953X_CMD_DEVICE) && (argc == (c->maxargs - 1))))) { cmd_usage(cmdtp); return 1; } /* arg2 used as chip number or pin number */ if (argc > 2) ul_arg2 = simple_strtoul(argv[2], NULL, 16); /* arg3 used as pin or invert value */ if (argc > 3) ul_arg3 = simple_strtoul(argv[3], NULL, 16) & 0x1; switch ((int)c->cmd) { #ifdef CONFIG_CMD_PCA953X_INFO case PCA953X_CMD_INFO: return pca953x_info(chip); #endif case PCA953X_CMD_DEVICE: if (argc == 3) chip = (uint8_t)ul_arg2; printf("Current device address: 0x%x\n", chip); return 0; case PCA953X_CMD_INPUT: pca953x_set_dir(chip, (1 << ul_arg2), PCA953X_DIR_IN << ul_arg2); val = (pca953x_get_val(chip) & (1 << ul_arg2)) != 0; printf("chip 0x%02x, pin 0x%lx = %d\n", chip, ul_arg2, val); return val; case PCA953X_CMD_OUTPUT: pca953x_set_dir(chip, (1 << ul_arg2), (PCA953X_DIR_OUT << ul_arg2)); return pca953x_set_val(chip, (1 << ul_arg2), (ul_arg3 << ul_arg2)); case PCA953X_CMD_INVERT: return pca953x_set_pol(chip, (1 << ul_arg2), (ul_arg3 << ul_arg2)); default: /* We should never get here */ return 1; } }
static int do_tpm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *tpm_cmd; if (argc < 2) return CMD_RET_USAGE; tpm_cmd = find_cmd_tbl(argv[1], tpm_commands, ARRAY_SIZE(tpm_commands)); if (!tpm_cmd) return CMD_RET_USAGE; return tpm_cmd->cmd(cmdtp, flag, argc - 1, argv + 1); }
static int do_keymanage(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; if (argc < 2) return CMD_RET_USAGE; c = find_cmd_tbl(argv[1], cmd_keyman_sub, ARRAY_SIZE(cmd_keyman_sub)); if (!c) { return CMD_RET_USAGE;} return c->cmd(cmdtp, flag, --argc, ++argv); }
static int do_store(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; if (argc < 2) return CMD_RET_USAGE; c = find_cmd_tbl(argv[1], cmd_store_sub, ARRAY_SIZE(cmd_store_sub)); if (c) { return c->cmd(cmdtp, flag, argc, argv); } return CMD_RET_USAGE; }
static int do_irblaster (cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { cmd_tbl_t *c; if (argc < 2) return CMD_RET_USAGE; /* Strip off leading 'irblaster' command argument */ argc--; argv++; c = find_cmd_tbl(argv[0], &cmd_ir_sub[0], ARRAY_SIZE(cmd_ir_sub)); if (c) return c->cmd(cmdtp, flag, argc, argv); return CMD_RET_USAGE; }
/* * Subroutine: do_bmp * * Description: Handler for 'bmp' command.. * * Inputs: argv[1] contains the subcommand * * Return: None * */ static int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; /* Strip off leading 'bmp' command argument */ argc--; argv++; c = find_cmd_tbl(argv[0], &cmd_bmp_sub[0], ARRAY_SIZE(cmd_bmp_sub)); if (c) return c->cmd(cmdtp, flag, argc, argv); else return CMD_RET_USAGE; }
static int do_vbexport_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; if (argc < 2) return cmd_usage(cmdtp); argc--; argv++; c = find_cmd_tbl(argv[0], &cmd_vbexport_test_sub[0], ARRAY_SIZE(cmd_vbexport_test_sub)); if (c) return c->cmd(c, flag, argc, argv); else return cmd_usage(cmdtp); }
static int do_sandbox(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; /* Skip past 'sandbox' */ argc--; argv++; c = find_cmd_tbl(argv[0], cmd_sandbox_sub, ARRAY_SIZE(cmd_sandbox_sub)); if (c) return c->cmd(cmdtp, flag, argc, argv); else return CMD_RET_USAGE; }
int cmd_mtc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; int err = 0; c = find_cmd_tbl(argv[1], &cmd_mtc_sub[0], ARRAY_SIZE(cmd_mtc_sub)); if (c) { argc--; argv++; return c->cmd(c, flag, argc, argv); } else { /* Unrecognized command */ return cmd_usage(cmdtp); } return err; }
/** * do_efi_boot_opt() - manage UEFI load options * * @cmdtp: Command table * @flag: Command flag * @argc: Number of arguments * @argv: Argument array * Return: CMD_RET_SUCCESS on success, * CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure * * Implement efidebug "boot" sub-command. * See above for details of sub-commands. */ static int do_efi_boot_opt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cp; if (argc < 2) return CMD_RET_USAGE; argc--; argv++; cp = find_cmd_tbl(argv[0], cmd_efidebug_boot_sub, ARRAY_SIZE(cmd_efidebug_boot_sub)); if (!cp) return CMD_RET_USAGE; return cp->cmd(cmdtp, flag, argc, argv); }
static int do_avb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cp; cp = find_cmd_tbl(argv[1], cmd_avb, ARRAY_SIZE(cmd_avb)); argc--; argv++; if (!cp || argc > cp->maxargs) return CMD_RET_USAGE; if (flag == CMD_FLAG_REPEAT) return CMD_RET_FAILURE; return cp->cmd(cmdtp, flag, argc, argv); }
static int do_fsp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *fsp_cmd; int ret; if (argc < 2) return CMD_RET_USAGE; fsp_cmd = find_cmd_tbl(argv[1], fsp_commands, ARRAY_SIZE(fsp_commands)); argc -= 2; argv += 2; if (!fsp_cmd || argc > fsp_cmd->maxargs) return CMD_RET_USAGE; ret = fsp_cmd->cmd(fsp_cmd, flag, argc, argv); return cmd_process_error(fsp_cmd, ret); }
/** * do_remoteproc() - (replace: short desc) * @cmdtp: unused * @flag: unused * @argc: argument count * @argv: argument list * * parses up the command table to invoke the correct command. * * Return: 0 if no error, else returns appropriate error value. */ static int do_remoteproc(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { cmd_tbl_t *c = NULL; /* Strip off leading 'rproc' command argument */ argc--; argv++; if (argc) c = find_cmd_tbl(argv[0], cmd_remoteproc_sub, ARRAY_SIZE(cmd_remoteproc_sub)); if (c) return c->cmd(cmdtp, flag, argc, argv); return CMD_RET_USAGE; }
/* * Subroutine: do_bmp * * Description: Handler for 'bmp' command.. * * Inputs: argv[1] contains the subcommand * * Return: None * */ static int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { cmd_tbl_t *c; /* Strip off leading 'bmp' command argument */ argc--; argv++; c = find_cmd_tbl(argv[0], &cmd_bmp_sub[0], ARRAY_SIZE(cmd_bmp_sub)); if (c) { return c->cmd(cmdtp, flag, argc, argv); } else { cmd_usage(cmdtp); return 1; } }
static int do_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cp; if (argc < 2) return cmd_usage(cmdtp); /* drop initial "env" arg */ argc--; argv++; cp = find_cmd_tbl(argv[0], cmd_env_sub, ARRAY_SIZE(cmd_env_sub)); if (cp) return cp->cmd(cmdtp, flag, argc, argv); return cmd_usage(cmdtp); }
static int do_ut(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *cp; if (argc < 2) return CMD_RET_USAGE; /* drop initial "ut" arg */ argc--; argv++; cp = find_cmd_tbl(argv[0], cmd_ut_sub, ARRAY_SIZE(cmd_ut_sub)); if (cp) return cp->cmd(cmdtp, flag, argc, argv); return CMD_RET_USAGE; }
static int do_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *test_cmd; int ret; if (argc < 2) return CMD_RET_USAGE; test_cmd = find_cmd_tbl(argv[1], test_commands, ARRAY_SIZE(test_commands)); argc -= 2; argv += 2; if (!test_cmd || argc > test_cmd->maxargs) return CMD_RET_USAGE; ret = test_cmd->cmd(test_cmd, flag, argc, argv); return cmd_process_error(test_cmd, ret); }
static int do_aml_key_burn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rc = 0; cmd_tbl_t *c; sprintf(_errInfo, "success"); c = find_cmd_tbl(argv[1], cmd_opt_key_burn, ARRAY_SIZE(cmd_opt_key_burn)); if(!c){ DWN_ERR("Can't find subcmd[%s]\n", argv[1]); return 1; } rc = c->cmd(cmdtp, flag, argc, argv); DWN_MSG("[key]%s\n", _errInfo); if(rc < 0){ DWN_ERR("Fail in cmd[%s %s].ret=%d\n", argv[1], argv[2], rc); return -__LINE__; } rc = strncmp("success", _errInfo, 7); return rc; }
static int do_blkcache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { cmd_tbl_t *c; #ifdef CONFIG_NEEDS_MANUAL_RELOC blkc_reloc(); #endif if (argc < 2) return CMD_RET_USAGE; /* Strip off leading argument */ argc--; argv++; c = find_cmd_tbl(argv[0], &cmd_blkc_sub[0], ARRAY_SIZE(cmd_blkc_sub)); if (c) return c->cmd(cmdtp, flag, argc, argv); else return CMD_RET_USAGE; return 0; }
int do_bootm_subcommand (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { int ret = 0; int state; cmd_tbl_t *c; boot_os_fn *boot_fn; c = find_cmd_tbl(argv[1], &cmd_bootm_sub[0], ARRAY_SIZE(cmd_bootm_sub)); if (c) { state = (int)c->cmd; /* treat start special since it resets the state machine */ if (state == BOOTM_STATE_START) { argc--; argv++; return bootm_start(cmdtp, flag, argc, argv); } } /* Unrecognized command */ else { cmd_usage(cmdtp); return 1; } if (images.state >= state) { printf ("Trying to execute a command out of order\n"); cmd_usage(cmdtp); return 1; } images.state |= state; boot_fn = boot_os[images.os.os]; switch (state) { ulong load_end; case BOOTM_STATE_START: /* should never occur */ break; case BOOTM_STATE_LOADOS: ret = bootm_load_os(images.os, &load_end, 0); if (ret) return ret; lmb_reserve(&images.lmb, images.os.load, (load_end - images.os.load)); break; #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_SPARC) case BOOTM_STATE_RAMDISK: { ulong rd_len = images.rd_end - images.rd_start; char str[17]; ret = boot_ramdisk_high(&images.lmb, images.rd_start, rd_len, &images.initrd_start, &images.initrd_end); if (ret) return ret; sprintf(str, "%lx", images.initrd_start); setenv("initrd_start", str); sprintf(str, "%lx", images.initrd_end); setenv("initrd_end", str); } break; #endif #ifdef CONFIG_OF_LIBFDT case BOOTM_STATE_FDT: { ulong bootmap_base = getenv_bootm_low(); ret = boot_relocate_fdt(&images.lmb, bootmap_base, &images.ft_addr, &images.ft_len); break; } #endif case BOOTM_STATE_OS_CMDLINE: ret = boot_fn(BOOTM_STATE_OS_CMDLINE, argc, argv, &images); if (ret) printf ("cmdline subcommand not supported\n"); break; case BOOTM_STATE_OS_BD_T: ret = boot_fn(BOOTM_STATE_OS_BD_T, argc, argv, &images); if (ret) printf ("bdt subcommand not supported\n"); break; case BOOTM_STATE_OS_PREP: ret = boot_fn(BOOTM_STATE_OS_PREP, argc, argv, &images); if (ret) printf ("prep subcommand not supported\n"); break; case BOOTM_STATE_OS_GO: disable_interrupts(); boot_fn(BOOTM_STATE_OS_GO, argc, argv, &images); break; } return ret; }
int _do_help (cmd_tbl_t *cmd_start, int cmd_items, cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) { int i; int rcode = 0; if (argc == 1) { /*show list of commands */ cmd_tbl_t *cmd_array[cmd_items]; int i, j, swaps; /* Make array of commands from .uboot_cmd section */ cmdtp = cmd_start; for (i = 0; i < cmd_items; i++) { cmd_array[i] = cmdtp++; } /* Sort command list (trivial bubble sort) */ for (i = cmd_items - 1; i > 0; --i) { swaps = 0; for (j = 0; j < i; ++j) { if (strcmp (cmd_array[j]->name, cmd_array[j + 1]->name) > 0) { cmd_tbl_t *tmp; tmp = cmd_array[j]; cmd_array[j] = cmd_array[j + 1]; cmd_array[j + 1] = tmp; ++swaps; } } if (!swaps) break; } /* print short help (usage) */ for (i = 0; i < cmd_items; i++) { const char *usage = cmd_array[i]->usage; /* allow user abort */ if (ctrlc ()) return 1; if (usage == NULL) continue; printf("%-*s- %s\n", CONFIG_SYS_HELP_CMD_WIDTH, cmd_array[i]->name, usage); } return 0; } /* * command help (long version) */ for (i = 1; i < argc; ++i) { if ((cmdtp = find_cmd_tbl (argv[i], cmd_start, cmd_items )) != NULL) { rcode |= cmd_usage(cmdtp); } else { printf ("Unknown command '%s' - try 'help'" " without arguments for list of all" " known commands\n\n", argv[i] ); rcode = 1; } } return rcode; }
cmd_tbl_t *find_cmd (const char *cmd) { int len = &__u_boot_cmd_end - &__u_boot_cmd_start; return find_cmd_tbl(cmd, &__u_boot_cmd_start, len); }
static int do_bootm_subcommand(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int ret = 0; long state; cmd_tbl_t *c; boot_os_fn *boot_fn; c = find_cmd_tbl(argv[1], &cmd_bootm_sub[0], ARRAY_SIZE(cmd_bootm_sub)); if (c) { state = (long)c->cmd; /* treat start special since it resets the state machine */ if (state == BOOTM_STATE_START) { argc--; argv++; return bootm_start(cmdtp, flag, argc, argv); } } else { /* Unrecognized command */ return CMD_RET_USAGE; } if (images.state < BOOTM_STATE_START || images.state >= state) { printf("Trying to execute a command out of order\n"); return CMD_RET_USAGE; } images.state |= state; boot_fn = boot_os[images.os.os]; switch (state) { ulong load_end; case BOOTM_STATE_START: /* should never occur */ break; case BOOTM_STATE_LOADOS: ret = bootm_load_os(images.os, &load_end, 0); if (ret) return ret; lmb_reserve(&images.lmb, images.os.load, (load_end - images.os.load)); break; #ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH case BOOTM_STATE_RAMDISK: { ulong rd_len = images.rd_end - images.rd_start; ret = boot_ramdisk_high(&images.lmb, images.rd_start, rd_len, &images.initrd_start, &images.initrd_end); if (ret) return ret; setenv_hex("initrd_start", images.initrd_start); setenv_hex("initrd_end", images.initrd_end); } break; #endif #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_LMB) case BOOTM_STATE_FDT: { boot_fdt_add_mem_rsv_regions(&images.lmb, images.ft_addr); ret = boot_relocate_fdt(&images.lmb, &images.ft_addr, &images.ft_len); break; } #endif case BOOTM_STATE_OS_CMDLINE: ret = boot_fn(BOOTM_STATE_OS_CMDLINE, argc, argv, &images); if (ret) printf("cmdline subcommand not supported\n"); break; case BOOTM_STATE_OS_BD_T: ret = boot_fn(BOOTM_STATE_OS_BD_T, argc, argv, &images); if (ret) printf("bdt subcommand not supported\n"); break; case BOOTM_STATE_OS_PREP: ret = boot_fn(BOOTM_STATE_OS_PREP, argc, argv, &images); if (ret) printf("prep subcommand not supported\n"); break; case BOOTM_STATE_OS_GO: disable_interrupts(); #ifdef CONFIG_NETCONSOLE /* * Stop the ethernet stack if NetConsole could have * left it up */ eth_halt(); #endif arch_preboot_os(); boot_fn(BOOTM_STATE_OS_GO, argc, argv, &images); break; } return ret; }
int do_tca642x(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { static uchar chip = CONFIG_SYS_I2C_TCA642X_ADDR; int ret = CMD_RET_USAGE, val; uint8_t gpio_bank = 0; uint8_t bank_shift; ulong ul_arg2 = 0; ulong ul_arg3 = 0; cmd_tbl_t *c; c = find_cmd_tbl(argv[1], cmd_tca642x, ARRAY_SIZE(cmd_tca642x)); /* All commands but "device" require 'maxargs' arguments */ if (!c || !((argc == (c->maxargs)) || (((int)c->cmd == TCA642X_CMD_DEVICE) && (argc == (c->maxargs - 1))))) { return CMD_RET_USAGE; } /* arg2 used as chip number or pin number */ if (argc > 2) { ul_arg2 = simple_strtoul(argv[2], NULL, 10); if (ul_arg2 <= 7) { gpio_bank = 0; } else if ((ul_arg2 >= 10) && (ul_arg2 <= 17)) { gpio_bank = 1; } else if ((ul_arg2 >= 20) && (ul_arg2 <= 27)) { gpio_bank = 2; } else { printf("Requested pin is not available\n"); ret = CMD_RET_FAILURE; goto error; } } /* arg3 used as pin or invert value */ if (argc > 3) ul_arg3 = simple_strtoul(argv[3], NULL, 10) & 0x1; switch ((int)c->cmd) { case TCA642X_CMD_INFO: ret = tca642x_info(chip); if (ret) ret = CMD_RET_FAILURE; break; case TCA642X_CMD_DEVICE: if (argc == 3) chip = (uint8_t)ul_arg2; printf("Current device address: 0x%x\n", chip); ret = CMD_RET_SUCCESS; break; case TCA642X_CMD_INPUT: bank_shift = ul_arg2 - (gpio_bank * 10); ret = tca642x_set_dir(chip, gpio_bank, (1 << bank_shift), (TCA642X_DIR_IN << bank_shift)); val = (tca642x_get_val(chip, gpio_bank) & (1 << bank_shift)) != 0; if (ret) ret = CMD_RET_FAILURE; else printf("chip 0x%02x, pin 0x%lx = %d\n", chip, ul_arg2, val); break; case TCA642X_CMD_OUTPUT: bank_shift = ul_arg2 - (gpio_bank * 10); ret = tca642x_set_dir(chip, gpio_bank, (1 << bank_shift), (TCA642X_DIR_OUT << bank_shift)); if (!ret) ret = tca642x_set_val(chip, gpio_bank, (1 << bank_shift), (ul_arg3 << bank_shift)); if (ret) ret = CMD_RET_FAILURE; break; case TCA642X_CMD_INVERT: bank_shift = ul_arg2 - (gpio_bank * 10); ret = tca642x_set_pol(chip, gpio_bank, (1 << bank_shift), (ul_arg3 << bank_shift)); if (ret) ret = CMD_RET_FAILURE; break; } error: if (ret == CMD_RET_FAILURE) eprintf("Error talking to chip at 0x%x\n", chip); return ret; }
cmd_tbl_t *find_cmd (const char *cmd) { cmd_tbl_t *start = ll_entry_start(cmd_tbl_t, cmd); const int len = ll_entry_count(cmd_tbl_t, cmd); return find_cmd_tbl(cmd, start, len); }