summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-02-16 17:50:25 -0700
committerCommit Bot <commit-bot@chromium.org>2021-02-17 21:10:46 +0000
commit9a4174d7c1471e5aee483d9e582806c31b86df7c (patch)
treee8932e22a4d21eebdf7b82a8915a80e8d9a2e555
parent4d5ff27740a8297341b443ad53a24cdbdcd4167e (diff)
downloadchrome-ec-9a4174d7c1471e5aee483d9e582806c31b86df7c.tar.gz
zephyr: add a unimplemented GPIOs mechanism
ECOS allows certain GPIO names to go without an implementation (underlying pin) by using the UNIMPLEMENED(...) macro in gpio.inc. This allows for certain pins to go without an implementation that common code relies on. Reads and writes to these pins are harmless. This adds a GPIO_UNIMPLEMENTED signal that can be used in gpio_map.h to create similarly-functioning unimplemented pins. BUG=b:176559881 BRANCH=none TEST=add unimplemented GPIO_PCH_DSW_PWROK to delbin Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I74884f6a05f9ad30225c6953d3eee748c80cdc00 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2699533 Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r--zephyr/shim/include/zephyr_gpio_signal.h1
-rw-r--r--zephyr/shim/src/gpio.c21
2 files changed, 11 insertions, 11 deletions
diff --git a/zephyr/shim/include/zephyr_gpio_signal.h b/zephyr/shim/include/zephyr_gpio_signal.h
index f727b5e680..c2b64e117b 100644
--- a/zephyr/shim/include/zephyr_gpio_signal.h
+++ b/zephyr/shim/include/zephyr_gpio_signal.h
@@ -14,6 +14,7 @@
#define GPIO_SIGNAL(id) DT_CAT(GPIO_, id)
#define GPIO_SIGNAL_WITH_COMMA(id) GPIO_SIGNAL(id),
enum gpio_signal {
+ GPIO_UNIMPLEMENTED = -1,
#if DT_NODE_EXISTS(DT_PATH(named_gpios))
DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_SIGNAL_WITH_COMMA)
#endif
diff --git a/zephyr/shim/src/gpio.c b/zephyr/shim/src/gpio.c
index 141c9ee77d..fc9a77c1bf 100644
--- a/zephyr/shim/src/gpio.c
+++ b/zephyr/shim/src/gpio.c
@@ -115,7 +115,7 @@ struct gpio_signal_callback gpio_interrupts[] = {
static struct gpio_signal_callback *
get_interrupt_from_signal(enum gpio_signal signal)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return NULL;
for (size_t i = 0; i < ARRAY_SIZE(gpio_interrupts); i++) {
@@ -129,13 +129,12 @@ get_interrupt_from_signal(enum gpio_signal signal)
int gpio_is_implemented(enum gpio_signal signal)
{
- /* All GPIOs listed in Device Tree are consider implemented */
- return 1;
+ return signal >= 0 && signal < ARRAY_SIZE(configs);
}
int gpio_get_level(enum gpio_signal signal)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return 0;
const int l = gpio_pin_get_raw(data[signal].dev, configs[signal].pin);
@@ -149,15 +148,15 @@ int gpio_get_level(enum gpio_signal signal)
const char *gpio_get_name(enum gpio_signal signal)
{
- if (signal >= ARRAY_SIZE(configs))
- return "";
+ if (!gpio_is_implemented(signal))
+ return "UNIMPLEMENTED";
return configs[signal].name;
}
void gpio_set_level(enum gpio_signal signal, int value)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return;
int rv = gpio_pin_set_raw(data[signal].dev, configs[signal].pin, value);
@@ -211,7 +210,7 @@ static gpio_flags_t convert_to_zephyr_flags(int ec_flags)
int gpio_get_default_flags(enum gpio_signal signal)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return 0;
return convert_from_zephyr_flags(configs[signal].init_flags);
@@ -290,7 +289,7 @@ int gpio_disable_interrupt(enum gpio_signal signal)
{
int rv;
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return -1;
rv = gpio_pin_interrupt_configure(data[signal].dev, configs[signal].pin,
@@ -305,7 +304,7 @@ int gpio_disable_interrupt(enum gpio_signal signal)
void gpio_reset(enum gpio_signal signal)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return;
gpio_pin_configure(data[signal].dev, configs[signal].pin,
@@ -314,7 +313,7 @@ void gpio_reset(enum gpio_signal signal)
void gpio_set_flags(enum gpio_signal signal, int flags)
{
- if (signal >= ARRAY_SIZE(configs))
+ if (!gpio_is_implemented(signal))
return;
gpio_pin_configure(data[signal].dev, configs[signal].pin,