diff options
author | Jack Rosenthal <jrosenth@chromium.org> | 2021-02-16 17:50:25 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-17 21:10:46 +0000 |
commit | 9a4174d7c1471e5aee483d9e582806c31b86df7c (patch) | |
tree | e8932e22a4d21eebdf7b82a8915a80e8d9a2e555 | |
parent | 4d5ff27740a8297341b443ad53a24cdbdcd4167e (diff) | |
download | chrome-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.h | 1 | ||||
-rw-r--r-- | zephyr/shim/src/gpio.c | 21 |
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, |