mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-17 18:41:22 +00:00
BRANCH=none BUG= TEST=Review only. Committing small pieces until all code passes review. Change-Id: I9d16f95314a7c97b11c4fe61602c6db2621e6024 Signed-off-by: Scott Worley <scott.worley@microchip.corp-partner.google.com>
98 lines
2.0 KiB
C
98 lines
2.0 KiB
C
/* 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");
|
|
|