summaryrefslogtreecommitdiff
path: root/common/gpio.c
diff options
context:
space:
mode:
authorMohammed Habibulla <moch@chromium.org>2014-04-23 15:47:26 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-04-29 03:11:16 +0000
commit2457b509cc1a962231a543dff54d1ecd04ee952d (patch)
tree0139fa0220c33a9721ec1f23f369ba31b9df635f /common/gpio.c
parentb57137dcac703ef9428032332ddff470ab424906 (diff)
downloadchrome-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.c55
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)
{