diff options
author | Mohammed Habibulla <moch@chromium.org> | 2014-04-23 15:47:26 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-04-29 03:11:16 +0000 |
commit | 2457b509cc1a962231a543dff54d1ecd04ee952d (patch) | |
tree | 0139fa0220c33a9721ec1f23f369ba31b9df635f /common/gpio.c | |
parent | b57137dcac703ef9428032332ddff470ab424906 (diff) | |
download | chrome-ec-2457b509cc1a962231a543dff54d1ecd04ee952d.tar.gz |
Added v1 version of ectool gpioget supporting more functionsstabilize-5807.0.B
ectool gpioget - returns all GPIOs (with flag info)
ectool gpioget <GPIO_NAME> - get value of <GPIO_NAME>
ectool gpioget count - returns number of GPIOs
ectool gpioget all - returns all GPIOs (with flag info)
BUG=chromium:344969
TEST="ectool gpioget [<subcmd> <GPIO_NAME>]" returns correct information
on squawks
BRANCH=none
Change-Id: Ib6f0d8135a76501f08b084bfd7eb1f2689d5d6e0
Signed-off-by: Mohammed Habibulla <moch@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/196680
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/gpio.c')
-rw-r--r-- | common/gpio.c | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/common/gpio.c b/common/gpio.c index 13775ea449..84a4fc1f47 100644 --- a/common/gpio.c +++ b/common/gpio.c @@ -177,19 +177,56 @@ DECLARE_CONSOLE_COMMAND(gpioset, command_gpio_set, static int gpio_command_get(struct host_cmd_handler_args *args) { - const struct ec_params_gpio_get *p = args->params; - struct ec_response_gpio_get *r = args->response; - int i; + const struct gpio_info *g = gpio_list; + const struct ec_params_gpio_get_v1 *p_v1 = args->params; + struct ec_response_gpio_get_v1 *r_v1 = args->response; + int i, len; + + if (args->version == 0) { + const struct ec_params_gpio_get *p = args->params; + struct ec_response_gpio_get *r = args->response; + i = find_signal_by_name(p->name); + if (i == GPIO_COUNT) + return EC_RES_ERROR; - i = find_signal_by_name(p->name); - if (i == GPIO_COUNT) - return EC_RES_ERROR; + r->val = gpio_get_level(i); + args->response_size = sizeof(struct ec_response_gpio_get); + return EC_RES_SUCCESS; + } + + switch (p_v1->subcmd) { + case EC_GPIO_GET_BY_NAME: + i = find_signal_by_name(p_v1->get_value_by_name.name); + if (i == GPIO_COUNT) + return EC_RES_ERROR; + + r_v1->get_value_by_name.val = gpio_get_level(i); + args->response_size = sizeof(r_v1->get_value_by_name); + break; + case EC_GPIO_GET_COUNT: + r_v1->get_count.val = GPIO_COUNT; + args->response_size = sizeof(r_v1->get_count); + break; + case EC_GPIO_GET_INFO: + if (p_v1->get_info.index >= GPIO_COUNT) + return EC_RES_ERROR; + + i = p_v1->get_info.index; + len = strlen(g[i].name); + memcpy(r_v1->get_info.name, g[i].name, len+1); + r_v1->get_info.val = gpio_get_level(i); + r_v1->get_info.flags = g[i].flags; + args->response_size = sizeof(r_v1->get_info); + break; + default: + return EC_RES_INVALID_PARAM; + } - r->val = gpio_get_level(i); - args->response_size = sizeof(struct ec_response_gpio_get); return EC_RES_SUCCESS; + } -DECLARE_HOST_COMMAND(EC_CMD_GPIO_GET, gpio_command_get, EC_VER_MASK(0)); +DECLARE_HOST_COMMAND(EC_CMD_GPIO_GET, gpio_command_get, + EC_VER_MASK(0) | EC_VER_MASK(1)); static int gpio_command_set(struct host_cmd_handler_args *args) { |