summaryrefslogtreecommitdiff
path: root/zephyr/shim/include/power/power.h
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/include/power/power.h')
-rw-r--r--zephyr/shim/include/power/power.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/zephyr/shim/include/power/power.h b/zephyr/shim/include/power/power.h
index a764e0c8b5..1e780646af 100644
--- a/zephyr/shim/include/power/power.h
+++ b/zephyr/shim/include/power/power.h
@@ -9,10 +9,30 @@
#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
-#if CONFIG_CROS_EC_POWER_SIGNAL_LIST
-
#define POWER_SIGNAL_LIST_NODE DT_NODELABEL(power_signal_list)
+#define SYSTEM_DT_POWER_SIGNAL_CONFIG DT_NODE_EXISTS(POWER_SIGNAL_LIST_NODE)
+
+#if (SYSTEM_DT_POWER_SIGNAL_CONFIG)
+
+#define GEN_POWER_SIGNAL_STRUCT_ENTRY_GPIO(cid) \
+ DT_STRING_UPPER_TOKEN(DT_PROP(cid, power_gpio_pin), enum_name)
+#define GEN_POWER_SIGNAL_STRUCT_ENTRY_FLAGS(cid) \
+ (DT_GPIO_FLAGS(DT_PROP(cid, power_gpio_pin), gpios) & \
+ GPIO_ACTIVE_LOW ? \
+ POWER_SIGNAL_ACTIVE_LOW : \
+ POWER_SIGNAL_ACTIVE_HIGH)
+#define GEN_POWER_SIGNAL_STRUCT_ENTRY_NAME(cid) DT_PROP(cid, power_enum_name)
+
+#define GEN_POWER_SIGNAL_STRUCT_ENTRY(cid) \
+ { \
+ .gpio = GEN_POWER_SIGNAL_STRUCT_ENTRY_GPIO(cid), \
+ .flags = GEN_POWER_SIGNAL_STRUCT_ENTRY_FLAGS(cid), \
+ .name = GEN_POWER_SIGNAL_STRUCT_ENTRY_NAME(cid) \
+ }
+#define GEN_POWER_SIGNAL_STRUCT(cid) \
+ [GEN_POWER_SIGNAL_ENUM_ENTRY(cid)] = GEN_POWER_SIGNAL_STRUCT_ENTRY(cid),
+
#define GEN_POWER_SIGNAL_ENUM_ENTRY(cid) \
DT_STRING_UPPER_TOKEN(cid, power_enum_name)
@@ -22,5 +42,13 @@ enum power_signal {
POWER_SIGNAL_COUNT
};
-#endif /* CONFIG_CROS_EC_POWER_SIGNAL_LIST */
+/*
+ * Verify the number of required power-signals are specified in
+ * the DeviceTree
+ */
+#define POWER_SIGNALS_REQUIRED \
+ DT_PROP(POWER_SIGNAL_LIST_NODE, power_signals_required)
+BUILD_ASSERT(POWER_SIGNALS_REQUIRED == POWER_SIGNAL_COUNT);
+
+#endif /* SYSTEM_DT_POWER_SIGNAL_CONFIG */
#endif /* ZEPHYR_CHROME_POWER_POWER_H */