summaryrefslogtreecommitdiff
path: root/zephyr/shim/include/zephyr_gpio_signal.h
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/include/zephyr_gpio_signal.h')
-rw-r--r--zephyr/shim/include/zephyr_gpio_signal.h56
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
};
/**