Skip to content

Commit c2fff4a

Browse files
maass-hamburgkartben
authored andcommitted
devicetree: Enhance DT_ENUM_HAS_VALUE macro for arrays
On arrays DT_ENUM_HAS_VALUE() and DT_INST_ENUM_HAS_VALUE() were only checking the first index, this changes it to check all indexes. Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
1 parent 5dcaf07 commit c2fff4a

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

include/zephyr/devicetree.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,14 +1045,14 @@
10451045
IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
10461046

10471047
/**
1048-
* @brief Equivalent to DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, 0, value).
1048+
* @brief Does a node enumeration property have a given value?
10491049
* @param node_id node identifier
10501050
* @param prop lowercase-and-underscores property name
10511051
* @param value lowercase-and-underscores enumeration value
10521052
* @return 1 if the node property has the value @a value, 0 otherwise.
10531053
*/
10541054
#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
1055-
DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, 0, value)
1055+
IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
10561056

10571057
/**
10581058
* @brief Get a string property's value as a token.

scripts/dts/gen_defines.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ def enum_macros(prop: edtlib.Property, macro: str):
686686
ret[f"{macro}_IDX_{i}_EXISTS"] = 1
687687
# DT_N_<node-id>_P_<prop-id>_IDX_<i>_ENUM_VAL_<val>_EXISTS 1
688688
ret[f"{macro}_IDX_{i}_ENUM_VAL_{subval}_EXISTS"] = 1
689+
# DT_N_<node-id>_P_<prop-id>_ENUM_VAL_<val>_EXISTS 1
690+
ret[f"{macro}_ENUM_VAL_{subval}_EXISTS"] = 1
689691

690692
return ret
691693

tests/lib/devicetree/api/src/main.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2193,6 +2193,12 @@ ZTEST(devicetree_api, test_enums)
21932193
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, bar));
21942194
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, zoo));
21952195

2196+
/* DT_ENUM_HAS_VALUE on string-array enum */
2197+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_string_array), val, foo));
2198+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_string_array), val, zoo));
2199+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_string_array), val, foo));
2200+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_string_array), val, baz));
2201+
21962202
/* DT_ENUM_IDX_BY_IDX and DT_ENUM_HAS_VALUE_BY_IDX on int-array enum */
21972203
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 0), 3);
21982204
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 1), 4);
@@ -2210,6 +2216,16 @@ ZTEST(devicetree_api, test_enums)
22102216
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 0));
22112217
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 2));
22122218
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 1));
2219+
2220+
/* DT_ENUM_HAS_VALUE on int-array enum */
2221+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 0));
2222+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 1));
2223+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 2));
2224+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 3));
2225+
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 4));
2226+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 5));
2227+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 6));
2228+
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_array), val, 7));
22132229
}
22142230
#undef TO_MY_ENUM
22152231
#undef TO_MY_ENUM_2

0 commit comments

Comments
 (0)