diff options
Diffstat (limited to 'zephyr/shim/include/zephyr_gpio_signal.h')
-rw-r--r-- | zephyr/shim/include/zephyr_gpio_signal.h | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/zephyr/shim/include/zephyr_gpio_signal.h b/zephyr/shim/include/zephyr_gpio_signal.h index 8949826987..1a98071d6d 100644 --- a/zephyr/shim/include/zephyr_gpio_signal.h +++ b/zephyr/shim/include/zephyr_gpio_signal.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -34,27 +34,48 @@ * a GPIO signal name from either the enum-name or a * unique name generated using the DTS ordinal. */ -#define GPIO_SIGNAL_NAME(id) \ - COND_CODE_1(DT_NODE_HAS_PROP(id, enum_name), \ - (GPIO_SIGNAL_NAME_FROM_ENUM(id)), \ - (GPIO_SIGNAL_NAME_FROM_ORD(id ## _ORD))) - -#define GPIO_SIGNAL(id) GPIO_SIGNAL_NAME(id) -#define GPIO_SIGNAL_WITH_COMMA(id) \ - GPIO_SIGNAL(id), +#define GPIO_SIGNAL_NAME(id) \ + COND_CODE_1(DT_NODE_HAS_PROP(id, enum_name), \ + (GPIO_SIGNAL_NAME_FROM_ENUM(id)), \ + (GPIO_SIGNAL_NAME_FROM_ORD(id##_ORD))) + +#define GPIO_SIGNAL(id) GPIO_SIGNAL_NAME(id) + +#define GPIO_IMPL_SIGNAL(id) \ + COND_CODE_1(DT_NODE_HAS_PROP(id, gpios), (GPIO_SIGNAL(id), ), ()) + +#define GPIO_UNIMPL_SIGNAL(id) \ + COND_CODE_1(DT_NODE_HAS_PROP(id, gpios), (), \ + (GPIO_SIGNAL_NAME(id) = GPIO_UNIMPLEMENTED, )) +/* + * Create a list of aliases to allow remapping of aliased names. + */ +#define GPIO_DT_MK_ALIAS(id) \ + DT_STRING_UPPER_TOKEN(id, alias) = DT_STRING_UPPER_TOKEN(id, enum_name), + +#define GPIO_DT_ALIAS_LIST(id) \ + COND_CODE_1(DT_NODE_HAS_PROP(id, alias), (GPIO_DT_MK_ALIAS(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) + DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_IMPL_SIGNAL) #endif - GPIO_COUNT, - GPIO_LIMIT = 0x0FFF, + GPIO_COUNT, +#if DT_NODE_EXISTS(DT_PATH(named_gpios)) + DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_UNIMPL_SIGNAL) + DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_DT_ALIAS_LIST) +#endif + GPIO_LIMIT = 0x0FFF, IOEX_SIGNAL_START = GPIO_LIMIT + 1, IOEX_SIGNAL_END = IOEX_SIGNAL_START, IOEX_LIMIT = 0x1FFF, }; -#undef GPIO_SIGNAL_WITH_COMMA +#undef GPIO_DT_ALIAS_LIST +#undef GPIO_DT_MK_ALIAS +#undef GPIO_IMPL_SIGNAL +#undef GPIO_UNIMPL_SIGNAL BUILD_ASSERT(GPIO_COUNT < GPIO_LIMIT); @@ -118,8 +139,8 @@ BUILD_ASSERT(GPIO_COUNT < GPIO_LIMIT); */ struct gpio_dt_spec; -#define GPIO_DT_PTR_DECL(id) extern const struct gpio_dt_spec * const \ - GPIO_DT_NAME(GPIO_SIGNAL(id)); +#define GPIO_DT_PTR_DECL(id) \ + extern const struct gpio_dt_spec *const GPIO_DT_NAME(GPIO_SIGNAL(id)); DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_DT_PTR_DECL) @@ -127,14 +148,13 @@ DT_FOREACH_CHILD(DT_PATH(named_gpios), GPIO_DT_PTR_DECL) #endif /* DT_NODE_EXISTS(DT_PATH(named_gpios)) */ - #define IOEXPANDER_ID_EXPAND(id) ioex_chip_##id #define IOEXPANDER_ID(id) IOEXPANDER_ID_EXPAND(id) #define IOEXPANDER_ID_FROM_INST_WITH_COMMA(id) IOEXPANDER_ID(id), enum ioexpander_id { DT_FOREACH_STATUS_OKAY(cros_ioex_chip, - IOEXPANDER_ID_FROM_INST_WITH_COMMA) - CONFIG_IO_EXPANDER_PORT_COUNT + IOEXPANDER_ID_FROM_INST_WITH_COMMA) + CONFIG_IO_EXPANDER_PORT_COUNT }; /** |