devicetree: basic support for enum tokens
Whenever a devicetree binding defines a string property whose
enumerated values are all tokenizable, generate C macros for each
property value that are the corresponding tokens.
Note that "token" is distinct from "identifier": both 'foo' and '123'
are valid tokens, but only 'foo' is a valid identifier. We permit some
strings which are not valid identifiers in anticipation that the
generalization may be useful, e.g. when defining macros that paste the
token onto a prefix that makes the whole thing an identifier.
Fixes: #21273
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
diff --git a/scripts/dts/gen_defines.py b/scripts/dts/gen_defines.py
index d43c37d..b6e3665 100755
--- a/scripts/dts/gen_defines.py
+++ b/scripts/dts/gen_defines.py
@@ -423,6 +423,17 @@
if prop.enum_index is not None:
# DT_N_<node-id>_P_<prop-id>_ENUM_IDX
macro2val[macro + "_ENUM_IDX"] = prop.enum_index
+ spec = prop.spec
+
+ if spec.enum_tokenizable:
+ as_token = prop.val_as_token
+
+ # DT_N_<node-id>_P_<prop-id>_ENUM_TOKEN
+ macro2val[macro + "_ENUM_TOKEN"] = as_token
+
+ if spec.enum_upper_tokenizable:
+ # DT_N_<node-id>_P_<prop-id>_ENUM_UPPER_TOKEN
+ macro2val[macro + "_ENUM_UPPER_TOKEN"] = as_token.upper()
if "phandle" in prop.type:
macro2val.update(phandle_macros(prop, macro))