diff options
Diffstat (limited to 'chip/mchp/gpio_cmds.c')
-rw-r--r-- | chip/mchp/gpio_cmds.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/chip/mchp/gpio_cmds.c b/chip/mchp/gpio_cmds.c new file mode 100644 index 0000000000..cbf5f4c462 --- /dev/null +++ b/chip/mchp/gpio_cmds.c @@ -0,0 +1,97 @@ +/* Copyright 2017 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* MCHP MEC GPIO module EC UART commands */ + +#include "common.h" +#include "console.h" +#include "gpio.h" +#include "hooks.h" +#include "registers.h" +#include "system.h" +#include "util.h" +#include "gpio_chip.h" +#include "tfdp_chip.h" + +/* Console output macros */ +#define CPUTS(outstr) cputs(CC_LPC, outstr) +#define CPRINTS(format, args...) cprints(CC_LPC, format, ## args) + + + +static int cmd_gp_get_config(int argc, char **argv) +{ + char *e; + int i; + uint32_t gctrl; + + /* If a signal is specified, print only that one */ + if (argc == 2) { + i = strtoi(argv[1], &e, 0); + if (*e) + return EC_ERROR_PARAM1; + + if (!gpio_is_implemented(i)) + return EC_ERROR_PARAM1; + + gctrl = MCHP_GPIO_CTRL(i); + + ccprintf(" GPIO[0x%X].Ctrl = 0x%08X\n", i, gctrl); + + } else { /* Otherwise print them all */ + for (i = 0; i < GPIO_COUNT; i++) { + if (!gpio_is_implemented(i)) + continue; /* Skip unsupported signals */ + + gctrl = MCHP_GPIO_CTRL(i); + + ccprintf(" GPIO[0x%X].Ctrl = 0x%08X\n", i, gctrl); + } + } + + /* Flush console to avoid truncating output */ + cflush(); + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(gpgetcfg, cmd_gp_get_config, + "[number]", + "Read GPIO config"); + +static int cmd_gp_set_config(int argc, char **argv) +{ + char *e; + int i; + uint32_t gctrl; + + /* If a signal is specified, print only that one */ + if (argc > 2) { + i = strtoi(argv[1], &e, 0); + if (*e) + return EC_ERROR_PARAM1; + + if (!gpio_is_implemented(i)) + return EC_ERROR_PARAM1; + + gctrl = (uint32_t)strtoi(argv[2], &e, 0); + if (*e) + return EC_ERROR_PARAM2; + + MCHP_GPIO_CTRL(i) = gctrl; + gctrl = MCHP_GPIO_CTRL(i); + ccprintf(" GPIO[0x%X].Ctrl = 0x%08X\n", i, gctrl); + + } else { + ccprintf(" Requires two parameters: GPIO num and new config"); + } + /* Flush console to avoid truncating output */ + cflush(); + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(gpsetcfg, cmd_gp_set_config, + "gp_num val", + "Set GPIO config"); + |