Lines Matching +full:prop +full:- +full:3

2  * SPDX-License-Identifier: Apache-2.0
39 * -----------------
42 * part in DT_N_<path-id>_P_<property-id> macros, or the "prop-suf"
71 * @defgroup devicetree-generic-id Node identifiers and helpers
96 * The arguments to this macro are the names of non-root nodes in the
98 * Non-alphanumeric characters in each name must be converted to
108 * current-speed = <115200>;
119 * Example usage with DT_PROP() to get the `current-speed` property:
125 * (The `current-speed` property is also in `lowercase-and-underscores`
130 * - the first argument corresponds to a child node of the root (`soc` above)
131 * - a second argument corresponds to a child of the first argument
134 * - and so on for deeper nodes in the desired node's path
136 * @param ... lowercase-and-underscores node names along the node's path,
145 * Convert non-alphanumeric characters in the node label to
155 * current-speed = <115200>;
167 * current-speed property:
177 * L2_0: l2-cache {
178 * cache-level = <2>;
184 * Example usage to get the cache-level property:
193 * @param label lowercase-and-underscores node label name
203 * non-alphanumeric characters in the alias property to underscores to
211 * my-serial = &serial1;
217 * current-speed = <115200>;
225 * `serial@40001000` node. Notice how `my-serial` in the devicetree
227 * DT_PROP() to get the current-speed property:
233 * @param alias lowercase-and-underscores alias name.
240 * @param alias_name lowercase-and-underscores devicetree alias name
259 * instance numbers, which are zero-based indexes specific to that
262 * lowercase-and-underscores version of the compatible, @p compat.
266 * - for each compatible, instance numbers start at 0 and are contiguous
267 * - exactly one instance number is assigned for each node with a compatible,
269 * - enabled nodes (status property is `okay` or missing) are assigned the
275 * - instance numbers **in no way reflect** any numbering scheme that
279 * - there **is no general guarantee** that the same node will have
287 * compatible = "vnd,soc-serial";
289 * current-speed = <9600>;
294 * compatible = "vnd,soc-serial";
296 * current-speed = <57600>;
301 * compatible = "vnd,soc-serial";
302 * current-speed = <115200>;
308 * `"vnd,soc-serial"`, that compatible has nodes with instance numbers
322 * // have instance number 0, so this could be the current-speed
328 * // this expands to 115200, and vice-versa.
337 * Notice how `"vnd,soc-serial"` in the devicetree becomes `vnd_soc_serial`
338 * (without quotes) in the DT_INST() arguments. (As usual, `current-speed`
345 * @param compat lowercase-and-underscores compatible, without quotes
357 * parent: parent-node {
358 * child: child-node {
382 * gparent: grandparent-node {
383 * parent: parent-node {
384 * child: child-node { ... }
408 * soc-label: soc {
411 * current-speed = <115200>;
433 * @param child lowercase-and-underscores child node name
449 * node-a {
454 * node-b {
459 * node-c {
471 * This expands to a node identifier for either `node-a` or `node-b`.
472 * It will not expand to a node identifier for `node-c`, because that
475 * @param compat lowercase-and-underscores compatible, without quotes
495 * node: my-node@12345678 { ... };
503 * DT_NODE_PATH(DT_NODELABEL(node)) // "/soc/my-node@12345678"
514 * @brief Get a devicetree node's name with unit-address as a string literal
516 * This returns the node name and unit-address from a node identifier.
523 * node: my-node@12345678 { ... };
531 * DT_NODE_FULL_NAME(DT_NODELABEL(node)) // "my-node@12345678"
535 * @return the node's name with unit-address as a string in the devicetree
540 * @brief Get the node's full name, including the unit-address, as an unquoted
550 * node: my-node@12345678 { ... };
558 * DT_NODE_FULL_NAME_UNQUOTED(DT_NODELABEL(node)) // my-node@12345678
562 * @return the node's full name with unit-address as a sequence of tokens,
568 * @brief Get the node's full name, including the unit-address, as a token.
571 * converting any non-alphanumeric characters to underscores.
578 * node: my-node@12345678 { ... };
590 * @return the node's full name with unit-address as a token, i.e. without any quotes
599 * converting any non-alphanumeric characters to underscores, and
607 * node: my-node@12345678 { ... };
619 * @return the node's full name with unit-address as an uppercased token,
628 * Indexes are zero-based.
636 * c1: child-1 {};
637 * c2: child-2 {};
727 * @defgroup devicetree-generic-prop Property accessors
738 * - string: a string literal
739 * - boolean: `0` if the property is false, or `1` if it is true
740 * - int: the property's value as an integer literal
741 * - array, uint8-array, string-array: an initializer expression in braces,
744 * - phandle: a node identifier for the node with that phandle
749 * type string-array, `status` has type string, and
750 * `interrupt-controller` has type boolean.
759 * @param prop lowercase-and-underscores property name
762 #define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop) argument
772 * - for types array, string-array, and uint8-array, this expands
774 * - for type phandles, this expands to the number of phandles
775 * - for type phandle-array, this expands to the number of
777 * - for type phandle, this expands to 1 (so that a phandle
779 * - for type string, this expands to 1 (so that a string can be
780 * treated as a degenerate case of string-array with length 1)
784 * - reg property: use `DT_NUM_REGS(node_id)` instead
785 * - interrupts property: use `DT_NUM_IRQS(node_id)` instead
787 * It is an error to use this macro with the `ranges`, `dma-ranges`, `reg`
793 * @param prop a lowercase-and-underscores property with a logical length
796 #define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN) argument
802 * this expands to DT_PROP_LEN(node_id, prop). The @p default_value
808 * @param prop a lowercase-and-underscores property with a logical length
812 #define DT_PROP_LEN_OR(node_id, prop, default_value) \ argument
813 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
814 (DT_PROP_LEN(node_id, prop)), (default_value))
819 * If this returns 1, then DT_PROP_BY_IDX(node_id, prop, idx) or
820 * DT_PHA_BY_IDX(node_id, prop, idx, ...) are valid at index @p idx.
825 * - `reg` property: use DT_REG_HAS_IDX(node_id, idx) instead
826 * - `interrupts` property: use DT_IRQ_HAS_IDX(node_id, idx) instead
831 * @param prop a lowercase-and-underscores property with a logical length
836 #define DT_PROP_HAS_IDX(node_id, prop, idx) \ argument
837 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
840 * @brief Is name @p name available in a `foo-names` property?
844 * - `interrupts` property: use DT_IRQ_HAS_NAME(node_id, idx) instead
851 * nx: node-x {
853 * foo-names = "event", "error";
866 * @param prop a lowercase-and-underscores `prop-names` type property
867 * @param name a lowercase-and-underscores name to check
871 #define DT_PROP_HAS_NAME(node_id, prop, name) \ argument
872 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
878 * `node->property[index]`.
882 * - for types array, string-array, uint8-array, and phandles,
883 * this expands to the idx-th array element as an
887 * - for type phandle, idx must be 0 and the expansion is a node
890 * - for type string, idx must be 0 and the expansion is the
891 * entire string (this treats string like string-array of length 1)
895 * - `reg`: use DT_REG_ADDR_BY_IDX() or DT_REG_SIZE_BY_IDX() instead
896 * - `interrupts`: use DT_IRQ_BY_IDX()
897 * - `ranges`: use DT_NUM_RANGES()
898 * - `dma-ranges`: it is an error to use this property with
904 * @param prop lowercase-and-underscores property name
906 * @return a representation of the idx-th element of the property
908 #define DT_PROP_BY_IDX(node_id, prop, idx) \ argument
909 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
915 * @param prop lowercase-and-underscores property name
919 #define DT_PROP_LAST(node_id, prop) \ argument
920 DT_PROP_BY_IDX(node_id, prop, UTIL_DEC(DT_PROP_LEN(node_id, prop)))
925 * If the value exists, this expands to DT_PROP(node_id, prop).
931 * @param prop lowercase-and-underscores property name
935 #define DT_PROP_OR(node_id, prop, default_value) \ argument
936 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
937 (DT_PROP(node_id, prop)), (default_value))
947 * some_node: some-node {
948 * compat = "vend,enum-string-array";
953 * foo-names = "default", "option3", "option1";
960 * compatible: vend,enum-string-array
963 * type: phandle-array
965 * Explanation about what this phandle-array exactly is for.
967 * foo-names:
968 * type: string-array
976 * - default
977 * - option1
978 * - option2
979 * - option3
990 * @param prop lowercase-and-underscores property name
992 * @return zero-based index of the property's value in its enum: list
994 #define DT_ENUM_IDX_BY_IDX(node_id, prop, idx) \ argument
995 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _ENUM_IDX)
998 * @brief Equivalent to @ref DT_ENUM_IDX_BY_IDX(node_id, prop, 0).
1000 * @param prop lowercase-and-underscores property name
1001 * @return zero-based index of the property's value in its enum: list
1003 #define DT_ENUM_IDX(node_id, prop) DT_ENUM_IDX_BY_IDX(node_id, prop, 0) argument
1009 * DT_ENUM_IDX_BY_IDX(node_id, prop, idx).
1014 * @param prop lowercase-and-underscores property name
1017 * @return zero-based index of the property's value in its enum if present,
1020 #define DT_ENUM_IDX_BY_IDX_OR(node_id, prop, idx, default_idx_value) \ argument
1021 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1022 (DT_ENUM_IDX_BY_IDX(node_id, prop, idx)), (default_idx_value))
1025 * @brief Equivalent to DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value).
1027 * @param prop lowercase-and-underscores property name
1029 * @return zero-based index of the property's value in its enum if present,
1032 #define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \ argument
1033 DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value)
1039 * @param prop lowercase-and-underscores property name
1041 * @param value lowercase-and-underscores enumeration value
1044 #define DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, idx, value) \ argument
1045 IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
1048 * @brief Equivalent to DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, 0, value).
1050 * @param prop lowercase-and-underscores property name
1051 * @param value lowercase-and-underscores enumeration value
1054 #define DT_ENUM_HAS_VALUE(node_id, prop, value) \ argument
1055 DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, 0, value)
1061 * converting any non-alphanumeric characters to underscores. This can
1072 * n1: node-1 {
1073 * prop = "foo";
1075 * n2: node-2 {
1076 * prop = "FOO";
1078 * n3: node-3 {
1079 * prop = "123 foo";
1087 * prop:
1094 * DT_STRING_TOKEN(DT_NODELABEL(n1), prop) // foo
1095 * DT_STRING_TOKEN(DT_NODELABEL(n2), prop) // FOO
1096 * DT_STRING_TOKEN(DT_NODELABEL(n3), prop) // 123_foo
1101 * - Unlike C identifiers, the property values may begin with a
1105 * - The uppercased `"FOO"` in the DTS remains `FOO` as a token. It is
1108 * - The whitespace in the DTS `"123 foo"` string is converted to
1112 * @param prop lowercase-and-underscores property name
1113 * @return the value of @p prop as a token, i.e. without any quotes
1116 #define DT_STRING_TOKEN(node_id, prop) \ argument
1117 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
1122 * If the value exists, this expands to DT_STRING_TOKEN(node_id, prop).
1128 * @param prop lowercase-and-underscores property name
1132 #define DT_STRING_TOKEN_OR(node_id, prop, default_value) \ argument
1133 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1134 (DT_STRING_TOKEN(node_id, prop)), (default_value))
1140 * converting any non-alphanumeric characters to underscores, and
1151 * n1: node-1 {
1152 * prop = "foo";
1154 * n2: node-2 {
1155 * prop = "123 foo";
1163 * prop:
1171 * DT_STRING_UPPER_TOKEN(DT_NODELABEL(n1), prop) // FOO
1172 * DT_STRING_UPPER_TOKEN(DT_NODELABEL(n2), prop) // 123_FOO
1177 * - Unlike C identifiers, the property values may begin with a
1181 * - The lowercased `"foo"` in the DTS becomes `FOO` as a token, i.e.
1184 * - The whitespace in the DTS `"123 foo"` string is converted to
1189 * @param prop lowercase-and-underscores property name
1190 * @return the value of @p prop as an uppercased token, i.e. without
1193 #define DT_STRING_UPPER_TOKEN(node_id, prop) \ argument
1194 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
1199 * If the value exists, this expands to DT_STRING_UPPER_TOKEN(node_id, prop).
1205 * @param prop lowercase-and-underscores property name
1210 #define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \ argument
1211 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1212 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1217 * This removes "the quotes" from string-valued properties.
1228 * n1: node-1 {
1229 * prop = "12.7";
1231 * n2: node-2 {
1232 * prop = "0.5";
1234 * n3: node-3 {
1235 * prop = "A B C";
1241 * prop:
1246 * DT_STRING_UNQUOTED(DT_NODELABEL(n1), prop) // 12.7
1247 * DT_STRING_UNQUOTED(DT_NODELABEL(n2), prop) // 0.5
1248 * DT_STRING_UNQUOTED(DT_NODELABEL(n3), prop) // A B C
1251 * @param prop lowercase-and-underscores property name
1254 #define DT_STRING_UNQUOTED(node_id, prop) \ argument
1255 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1260 * If the value exists, this expands to DT_STRING_UNQUOTED(node_id, prop).
1266 * @param prop lowercase-and-underscores property name
1271 #define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \ argument
1272 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1273 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1276 * @brief Get an element out of a string-array property as a token.
1279 * non-alphanumeric characters to underscores. That can be useful, for example,
1283 * string-array type.
1290 * n1: node-1 {
1291 * prop = "f1", "F2";
1293 * n2: node-2 {
1294 * prop = "123 foo", "456 FOO";
1302 * prop:
1303 * type: string-array
1309 * DT_STRING_TOKEN_BY_IDX(DT_NODELABEL(n1), prop, 0) // f1
1310 * DT_STRING_TOKEN_BY_IDX(DT_NODELABEL(n1), prop, 1) // F2
1311 * DT_STRING_TOKEN_BY_IDX(DT_NODELABEL(n2), prop, 0) // 123_foo
1312 * DT_STRING_TOKEN_BY_IDX(DT_NODELABEL(n2), prop, 1) // 456_FOO
1318 * @param prop lowercase-and-underscores property name
1320 * @return the element in @p prop at index @p idx as a token
1322 #define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \ argument
1323 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1329 * converts non-alphanumeric characters to underscores. That can be useful, for
1333 * string-array type.
1340 * n1: node-1 {
1341 * prop = "f1", "F2";
1343 * n2: node-2 {
1344 * prop = "123 foo", "456 FOO";
1352 * prop:
1353 * type: string-array
1359 * DT_STRING_UPPER_TOKEN_BY_IDX(DT_NODELABEL(n1), prop, 0) // F1
1360 * DT_STRING_UPPER_TOKEN_BY_IDX(DT_NODELABEL(n1), prop, 1) // F2
1361 * DT_STRING_UPPER_TOKEN_BY_IDX(DT_NODELABEL(n2), prop, 0) // 123_FOO
1362 * DT_STRING_UPPER_TOKEN_BY_IDX(DT_NODELABEL(n2), prop, 1) // 456_FOO
1368 * @param prop lowercase-and-underscores property name
1370 * @return the element in @p prop at index @p idx as an uppercased token
1372 #define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \ argument
1373 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1378 * This removes "the quotes" from string-valued item.
1384 * string-array type.
1390 * n1: node-1 {
1391 * prop = "12.7", "34.1";
1393 * n2: node-2 {
1394 * prop = "A B", "C D";
1400 * prop:
1401 * type: string-array
1405 * DT_STRING_UNQUOTED_BY_IDX(DT_NODELABEL(n1), prop, 0) // 12.7
1406 * DT_STRING_UNQUOTED_BY_IDX(DT_NODELABEL(n1), prop, 1) // 34.1
1407 * DT_STRING_UNQUOTED_BY_IDX(DT_NODELABEL(n2), prop, 0) // A B
1408 * DT_STRING_UNQUOTED_BY_IDX(DT_NODELABEL(n2), prop, 1) // C D
1411 * @param prop lowercase-and-underscores property name
1415 #define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \ argument
1416 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UNQUOTED)
1421 * These are special-cased to manage the impedance mismatch between
1432 * DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1435 * That is, @p prop is a property of the phandle's node, not a
1441 * n1: node-1 {
1445 * n2: node-2 {
1449 * n3: node-3 {
1464 * @param phs lowercase-and-underscores property with type `phandle`,
1465 * `phandles`, or `phandle-array`
1468 * @param prop lowercase-and-underscores property of the phandle's node
1471 #define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \ argument
1472 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1479 * idx, prop). The @p default_value parameter is not expanded in this
1485 * @param phs lowercase-and-underscores property with type `phandle`,
1486 * `phandles`, or `phandle-array`
1489 * @param prop lowercase-and-underscores property of the phandle's node
1493 #define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \ argument
1494 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1499 * This is equivalent to DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop).
1502 * @param ph lowercase-and-underscores property of @p node_id
1504 * @param prop lowercase-and-underscores property of the phandle's node
1507 #define DT_PROP_BY_PHANDLE(node_id, ph, prop) \ argument
1508 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1511 * @brief Get a phandle-array specifier cell value at an index
1514 * `node->phandle_array[index].cell`. That is, the cell value is in
1522 * #gpio-cells = <2>;
1526 * #gpio-cells = <2>;
1537 * gpio-cells:
1538 * - pin
1539 * - flags
1544 * - index 0 has specifier <17 0x1>, so its `pin` cell is 17, and its
1546 * - index 1 has specifier <5 0x3>, so `pin` is 5 and `flags` is 0x3
1558 * @param pha lowercase-and-underscores property with type `phandle-array`
1560 * @param cell lowercase-and-underscores cell name within the specifier
1583 * @param pha lowercase-and-underscores property with type `phandle-array`
1585 * @param cell lowercase-and-underscores cell name within the specifier
1596 * @param pha lowercase-and-underscores property with type `phandle-array`
1597 * @param cell lowercase-and-underscores cell name
1611 * @param pha lowercase-and-underscores property with type `phandle-array`
1612 * @param cell lowercase-and-underscores cell name
1620 * @brief Get a value within a phandle-array specifier by name
1626 * `node->phandle_struct.name.cell`. That is, the cell value is in the
1634 * io-channels = <&adc1 10>, <&adc2 20>;
1635 * io-channel-names = "SENSOR", "BANDGAP";
1642 * io-channel-cells:
1643 * - input
1654 * @param pha lowercase-and-underscores property with type `phandle-array`
1655 * @param name lowercase-and-underscores name of a specifier in @p pha
1656 * @param cell lowercase-and-underscores cell name in the named specifier
1677 * @param pha lowercase-and-underscores property with type `phandle-array`
1678 * @param name lowercase-and-underscores name of a specifier in @p pha
1679 * @param cell lowercase-and-underscores cell name in the named specifier
1690 * `node->phandle_struct.name.phandle`. That is, the phandle array is
1706 * io-channels = <&adc1 10>, <&adc2 20>;
1707 * io-channel-names = "SENSOR", "BANDGAP";
1711 * Above, "io-channels" has two elements:
1713 * - the element named `"SENSOR"` has phandle `&adc1`
1714 * - the element named `"BANDGAP"` has phandle `&adc2`
1726 * non-alphanumeric characters are converted to underscores.
1729 * @param pha lowercase-and-underscores property with type `phandle-array`
1730 * @param name lowercase-and-underscores name of an element in @p pha
1742 * Therefore, if @p prop has type `phandle`, @p idx must be zero. (A
1749 * n1: node-1 {
1753 * n2: node-2 { ... };
1754 * n3: node-3 { ... };
1759 * - index 0 has phandle `&n2`, which is `node-2`'s phandle
1760 * - index 1 has phandle `&n3`, which is `node-3`'s phandle
1767 * DT_PHANDLE_BY_IDX(N1, foo, 0) // node identifier for node-2
1768 * DT_PHANDLE_BY_IDX(N1, foo, 1) // node identifier for node-3
1771 * Behavior is analogous for phandle-arrays.
1780 * @param prop lowercase-and-underscores property name in @p node_id
1781 * with type `phandle`, `phandles` or `phandle-array`
1782 * @param idx index into @p prop
1785 #define DT_PHANDLE_BY_IDX(node_id, prop, idx) \ argument
1786 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1791 * This is equivalent to DT_PHANDLE_BY_IDX(node_id, prop, 0). Its primary
1792 * benefit is readability when @p prop has type `phandle`.
1795 * @param prop lowercase-and-underscores property of @p node_id
1799 #define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0) argument
1806 * @defgroup devicetree-ranges-prop ranges property
1820 * compatible = "pcie-controller";
1822 * #address-cells = <3>;
1823 * #size-cells = <2>;
1841 * DT_NUM_RANGES(DT_NODELABEL(pcie0)) // 3
1865 * compatible = "pcie-controller";
1867 * #address-cells = <3>;
1868 * #size-cells = <2>;
1889 * DT_RANGES_HAS_IDX(DT_NODELABEL(pcie0), 3) // 0
1893 * DT_RANGES_HAS_IDX(DT_NODELABEL(other), 3) // 0
1916 * #address-cells = <2>;
1919 * compatible = "pcie-controller";
1921 * #address-cells = <3>;
1922 * #size-cells = <2>;
1944 * DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(DT_NODELABEL(pcie0), 3) // 0
1948 * DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(DT_NODELABEL(other), 3) // 0
1969 * #address-cells = <2>;
1972 * compatible = "pcie-controller";
1974 * #address-cells = <3>;
1975 * #size-cells = <2>;
2009 * #address-cells = <2>;
2012 * compatible = "pcie-controller";
2014 * #address-cells = <3>;
2015 * #size-cells = <2>;
2058 * #address-cells = <2>;
2061 * compatible = "pcie-controller";
2063 * #address-cells = <3>;
2064 * #size-cells = <2>;
2107 * #address-cells = <2>;
2110 * compatible = "pcie-controller";
2112 * #address-cells = <3>;
2113 * #size-cells = <2>;
2193 * @defgroup devicetree-generic-vendor Vendor and model name helpers
2205 * Example vendor-prefixes.txt:
2207 * vnd A stand-in for a real vendor
2208 * zephyr Zephyr-specific binding
2213 * n1: node-1 {
2221 * DT_NODE_VENDOR_BY_IDX(DT_NODELABEL(n1), 0) // "A stand-in for a real vendor"
2222 * DT_NODE_VENDOR_BY_IDX(DT_NODELABEL(n1), 2) // "Zephyr-specific binding"
2231 * @return string literal of the idx-th vendor
2261 * @return string literal of the idx-th vendor
2263 * @return string literal of the idx-th vendor or "default_value"
2285 * Example vendor-prefixes.txt:
2287 * vnd A stand-in for a real vendor
2288 * zephyr Zephyr-specific binding
2292 * n1: node-1 {
2307 * @return string literal of the idx-th model
2337 * @return string literal of the idx-th model
2339 * @return string literal of the idx-th model or "default_value"
2361 * @defgroup devicetree-reg-prop reg property
2412 * @return address of the idx-th register block
2435 * @return address of the idx-th register block
2449 * @return size of the idx-th register block
2464 * @brief 64-bit version of DT_REG_ADDR()
2466 * This macro version adds the appropriate suffix for 64-bit unsigned
2487 * @param name lowercase-and-underscores register specifier name
2496 * @param name lowercase-and-underscores register specifier name
2506 * @brief 64-bit version of DT_REG_ADDR_BY_NAME()
2508 * This macro version adds the appropriate suffix for 64-bit unsigned
2514 * @param name lowercase-and-underscores register specifier name
2523 * @param name lowercase-and-underscores register specifier name
2532 * @param name lowercase-and-underscores register specifier name
2547 * @defgroup devicetree-interrupts-prop interrupts property
2636 * @param name lowercase-and-underscores interrupt specifier name
2647 * "node->interrupts[index].cell".
2655 * my-serial: serial@abcd1234 {
2660 * Assuming the node's interrupt domain has "#interrupt-cells = <2>;" and
2667 * ------------- -----
2685 * `node->interrupts.name.cell`.
2692 * @param name lowercase-and-underscores interrupt specifier name
2713 * interrupt-controller;
2714 * #interrupt-cells = <2>;
2718 * interrupt-parent = <&gpio0>;
2723 * interrupts-extended = <&gpio0 3 3>, <&pic0 4>;
2727 * interrupt-controller;
2728 * #interrupt-cells = <1>;
2732 * interrupt-names = "int1", "int2";
2758 * interrupt-controller;
2759 * #interrupt-cells = <2>;
2763 * interrupt-parent = <&gpio0>;
2765 * interrupt-names = "int1", "int2";
2769 * interrupts-extended = <&gpio0 3 3>, <&pic0 4>;
2770 * interrupt-names = "int1", "int2";
2774 * interrupt-controller;
2775 * #interrupt-cells = <1>;
2779 * interrupt-names = "int1", "int2";
2806 * interrupt-controller;
2807 * #interrupt-cells = <2>;
2811 * interrupt-parent = <&gpio0>;
2816 * interrupts-extended = <&gpio0 3 3>;
2820 * interrupt-controller;
2821 * #interrupt-cells = <1>;
2846 /* DT helper macro to encode a node's IRQN to level 1 according to the multi-level scheme */
2848 /* DT helper macro to encode a node's IRQN to level 2 according to the multi-level scheme */
2852 /* DT helper macro to encode a node's IRQN to level 3 according to the multi-level scheme */
2861 * DT helper macro to encode a node's interrupt number according to the Zephyr's multi-level scheme
2874 * multi-level encoded
2901 * @defgroup devicetree-generic-chosen Chosen nodes
2909 * This is only valid to call if `DT_HAS_CHOSEN(prop)` is 1.
2910 * @param prop lowercase-and-underscores property name for
2914 #define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop) argument
2918 * @param prop lowercase-and-underscores devicetree property
2922 #define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS)) argument
2929 * @defgroup devicetree-generic-foreach "For-each" macros
2933 * IMPORTANT: you can't use the DT for-each macros in their own expansions.
2979 * identifier for the node. The remaining are passed-in by the caller.
3007 * identifier for the node. The remaining are passed-in by the caller.
3080 * child-1 {
3083 * child-2 {
3123 * child-1 {
3126 * child-2 {
3144 * "child-1", "child-2"
3160 * identifier for the child node. The remaining are passed-in by the caller.
3179 * identifier for the child node. The remaining are passed-in by the caller.
3234 * identifier for the child node. The remaining are passed-in by the caller.
3256 * identifier for the child node. The remaining are passed-in by the caller.
3273 * @brief Invokes @p fn for each element in the value of property @p prop.
3275 * The macro @p fn must take three parameters: fn(node_id, prop, idx).
3276 * @p node_id and @p prop are the same as what is passed to
3280 * The @p prop argument must refer to a property that can be passed to
3287 * my-ints = <1 2 3>;
3294 * #define TIMES_TWO(node_id, prop, idx) \
3295 * (2 * DT_PROP_BY_IDX(node_id, prop, idx)),
3306 * (2 * 1), (2 * 2), (2 * 3),
3312 * fn(node_id, prop, 0) fn(node_id, prop, 1) [...] fn(node_id, prop, n-1)
3314 * where `n` is the number of elements in @p prop, as it would be
3315 * returned by `DT_PROP_LEN(node_id, prop)`.
3318 * @param prop lowercase-and-underscores property name
3322 #define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \ argument
3323 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
3326 * @brief Invokes @p fn for each element in the value of property @p prop with
3333 * my-gpios = <&gpioa 0 GPIO_ACTICE_HIGH>,
3356 * The @p prop parameter has the same restrictions as the same parameter
3360 * @param prop lowercase-and-underscores property name
3367 #define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \ argument
3368 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
3371 * @brief Invokes @p fn for each element in the value of property @p prop with
3375 * `fn(node_id, prop, idx, ...)`. @p node_id and @p prop are the same as what
3378 * remaining arguments are passed-in by the caller.
3380 * The @p prop parameter has the same restrictions as the same parameter
3384 * @param prop lowercase-and-underscores property name
3390 #define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \ argument
3391 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
3394 * @brief Invokes @p fn for each element in the value of property @p prop with
3397 * The @p prop parameter has the same restrictions as the same parameter
3401 * @param prop lowercase-and-underscores property name
3409 #define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \ argument
3410 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
3462 * @param compat lowercase-and-underscores devicetree compatible
3484 * val = <3>;
3503 * x = 3 + 4 + 0;
3504 * x = 4 + 3 + 0;
3510 * @param compat lowercase-and-underscores devicetree compatible
3526 * @param compat lowercase-and-underscores devicetree compatible
3549 * passed as tokens to @p fn as-is, without any lowercasing or
3563 * int FOO = 3;
3572 * int sum = 0 + 1 + 2 + 3;
3625 * @defgroup devicetree-generic-exist Existence checks
3658 * - exists in the devicetree, and
3659 * - has a status property matching the second argument
3681 * - exists in the devicetree, and
3682 * - has a status property as `okay`
3708 * @param compat lowercase-and-underscores compatible, without quotes
3717 * @param compat lowercase-and-underscores compatible, without quotes
3731 * compatible = "vnd,specific-device", "generic-device";
3747 * @param compat lowercase-and-underscores compatible, without quotes
3765 * @param compat lowercase-and-underscores compatible, without quotes
3778 * truth value, use DT_PROP(node_id, prop) instead.
3781 * @param prop lowercase-and-underscores property name
3784 #define DT_NODE_HAS_PROP(node_id, prop) \ argument
3785 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
3791 * If this returns 1, then the phandle-array property @p pha has a cell
3797 * @param pha lowercase-and-underscores property with type `phandle-array`
3799 * @param cell lowercase-and-underscores cell name whose existence to check
3811 * @param pha lowercase-and-underscores property with type `phandle-array`
3812 * @param cell lowercase-and-underscores cell name whose existence to check
3825 * @defgroup devicetree-generic-bus Bus helpers
3844 * clock-frequency = < 100000 >;
3870 * temp: temperature-sensor@76 {
3871 * compatible = "vnd,some-sensor";
3886 * @param bus lowercase-and-underscores bus type as a C token (i.e.
3898 * @defgroup devicetree-inst Instance-based devicetree APIs
3933 * @param child lowercase-and-underscores child node name
4021 * identifier for the child node. The remaining are passed-in by the caller.
4039 * identifier for the child node. The remaining are passed-in by the caller.
4088 * identifier for the child node. The remaining are passed-in by the caller.
4104 * identifier for the child node. The remaining are passed-in by the caller.
4120 * @param prop lowercase-and-underscores property name
4122 * @return zero-based index of the property's value in its enum: list
4124 #define DT_INST_ENUM_IDX_BY_IDX(inst, prop, idx) \ argument
4125 DT_ENUM_IDX_BY_IDX(DT_DRV_INST(inst), prop, idx)
4130 * @param prop lowercase-and-underscores property name
4131 * @return zero-based index of the property's value in its enum: list
4133 #define DT_INST_ENUM_IDX(inst, prop) \ argument
4134 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
4139 * @param prop lowercase-and-underscores property name
4142 * @return zero-based index of the property's value in its enum if present,
4145 #define DT_INST_ENUM_IDX_BY_IDX_OR(inst, prop, idx, default_idx_value) \ argument
4146 DT_ENUM_IDX_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_idx_value)
4151 * @param prop lowercase-and-underscores property name
4153 * @return zero-based index of the property's value in its enum if present,
4156 #define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \ argument
4157 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
4162 * @param prop lowercase-and-underscores property name
4164 * @param value lowercase-and-underscores enumeration value
4165 * @return zero-based index of the property's value in its enum
4167 #define DT_INST_ENUM_HAS_VALUE_BY_IDX(inst, prop, idx, value) \ argument
4168 DT_ENUM_HAS_VALUE_BY_IDX(DT_DRV_INST(inst), prop, idx, value)
4174 * @param prop lowercase-and-underscores property name
4175 * @param value lowercase-and-underscores enumeration value
4178 #define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \ argument
4179 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
4184 * @param prop lowercase-and-underscores property name
4187 #define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop) argument
4192 * @param prop lowercase-and-underscores property name
4195 #define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop) argument
4201 * @param prop lowercase-and-underscores property name
4206 #define DT_INST_PROP_HAS_IDX(inst, prop, idx) \ argument
4207 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
4210 * @brief Is name @p name available in a `foo-names` property?
4212 * @param prop a lowercase-and-underscores `prop-names` type property
4213 * @param name a lowercase-and-underscores name to check
4217 #define DT_INST_PROP_HAS_NAME(inst, prop, name) \ argument
4218 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
4223 * @param prop lowercase-and-underscores property name
4225 * @return a representation of the idx-th element of the property
4227 #define DT_INST_PROP_BY_IDX(inst, prop, idx) \ argument
4228 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
4233 * @param prop lowercase-and-underscores property name
4235 * @return DT_INST_PROP(inst, prop) or @p default_value
4237 #define DT_INST_PROP_OR(inst, prop, default_value) \ argument
4238 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
4243 * @param prop lowercase-and-underscores property name
4245 * @return DT_INST_PROP_LEN(inst, prop) or @p default_value
4247 #define DT_INST_PROP_LEN_OR(inst, prop, default_value) \ argument
4248 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
4255 * @param prop lowercase-and-underscores property name
4256 * @return the value of @p prop as a token, i.e. without any quotes
4259 #define DT_INST_STRING_TOKEN(inst, prop) \ argument
4260 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
4265 * @param prop lowercase-and-underscores property name
4266 * @return the value of @p prop as an uppercased token, i.e. without
4269 #define DT_INST_STRING_UPPER_TOKEN(inst, prop) \ argument
4270 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
4277 * @param prop lowercase-and-underscores property name
4278 * @return the value of @p prop as a sequence of tokens, with no quotes
4280 #define DT_INST_STRING_UNQUOTED(inst, prop) \ argument
4281 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
4284 * @brief Get an element out of string-array property as a token.
4286 * @param prop lowercase-and-underscores property name
4288 * @return the element in @p prop at index @p idx as a token
4290 #define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \ argument
4291 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4296 * @param prop lowercase-and-underscores property name
4298 * @return the element in @p prop at index @p idx as an uppercased token
4300 #define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \ argument
4301 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4304 * @brief Get an element out of string-array property as an unquoted sequence of tokens.
4306 * @param prop lowercase-and-underscores property name
4308 * @return the value of @p prop at index @p idx as a sequence of tokens, with no quotes
4310 #define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \ argument
4311 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
4316 * @param ph lowercase-and-underscores property of @p inst
4318 * @param prop lowercase-and-underscores property of the phandle's node
4319 * @return the value of @p prop as described in the DT_PROP() documentation
4321 #define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \ argument
4322 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
4328 * @param phs lowercase-and-underscores property with type `phandle`,
4329 * `phandles`, or `phandle-array`
4332 * @param prop lowercase-and-underscores property of the phandle's node
4333 * @return the value of @p prop as described in the DT_PROP() documentation
4335 #define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \ argument
4336 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
4339 * @brief Get a `DT_DRV_COMPAT` instance's phandle-array specifier value at an index
4341 * @param pha lowercase-and-underscores property with type `phandle-array`
4352 * @param pha lowercase-and-underscores property with type `phandle-array`
4362 * @brief Get a `DT_DRV_COMPAT` instance's phandle-array specifier value
4365 * @param pha lowercase-and-underscores property with type `phandle-array`
4374 * @param pha lowercase-and-underscores property with type `phandle-array`
4383 * @brief Get a `DT_DRV_COMPAT` instance's value within a phandle-array
4386 * @param pha lowercase-and-underscores property with type `phandle-array`
4387 * @param name lowercase-and-underscores name of a specifier in @p pha
4397 * @param pha lowercase-and-underscores property with type `phandle-array`
4398 * @param name lowercase-and-underscores name of a specifier in @p pha
4410 * @param pha lowercase-and-underscores property with type `phandle-array`
4411 * @param name lowercase-and-underscores name of an element in @p pha
4421 * @param prop lowercase-and-underscores property name in @p inst
4422 * with type `phandle`, `phandles` or `phandle-array`
4423 * @param idx index into @p prop
4424 * @return a node identifier for the phandle at index @p idx in @p prop
4426 #define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \ argument
4427 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
4433 * @param prop lowercase-and-underscores property of @p inst
4437 #define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0) argument
4458 * @brief Get a `DT_DRV_COMPAT` instance's idx-th register block's raw address
4461 * @return address of the instance's idx-th register block
4466 * @brief Get a `DT_DRV_COMPAT` instance's idx-th register block's address
4469 * @return address of the instance's idx-th register block
4474 * @brief Get a `DT_DRV_COMPAT` instance's idx-th register block's size
4477 * @return size of the instance's idx-th register block
4485 * @param name lowercase-and-underscores register specifier name
4494 * @param name lowercase-and-underscores register specifier name
4503 * @brief 64-bit version of DT_INST_REG_ADDR_BY_NAME()
4505 * This macro version adds the appropriate suffix for 64-bit unsigned
4511 * @param name lowercase-and-underscores register specifier name
4520 * @param name lowercase-and-underscores register specifier name
4529 * @param name lowercase-and-underscores register specifier name
4552 * @brief 64-bit version of DT_INST_REG_ADDR()
4554 * This macro version adds the appropriate suffix for 64-bit unsigned
4628 * @param name lowercase-and-underscores interrupt specifier name
4654 * @return the interrupt number for the node's idx-th interrupt
4677 * @param name lowercase-and-underscores property name
4679 * @return if @p prop exists, its value as a token, i.e. without any quotes and
4690 * @param name lowercase-and-underscores property name
4701 * @param name lowercase-and-underscores property name
4719 * temp: temperature-sensor@76 {
4720 * compatible = "vnd,some-sensor";
4733 * @param compat lowercase-and-underscores compatible, without quotes
4745 * This is a special-purpose macro which can be useful when writing
4753 * temp: temperature-sensor@76 {
4754 * compatible = "vnd,some-sensor";
4780 * @param prop lowercase-and-underscores property name
4787 * compatible = "vnd,some-sensor";
4795 * compatible = "vnd,some-sensor";
4802 * compatible = "vnd,some-sensor";
4820 #define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \ argument
4821 COND_CODE_1(IS_EMPTY(DT_ANY_INST_HAS_PROP_STATUS_OKAY_(prop)), (0), (1))
4827 * @param compat lowercase-and-underscores devicetree compatible
4828 * @param prop lowercase-and-underscores property name
4835 * compatible = "vnd,some-sensor";
4843 * compatible = "vnd,some-sensor";
4850 * compatible = "vnd,some-sensor";
4867 #define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \ argument
4868 (DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, DT_COMPAT_NODE_HAS_PROP_AND_OR, prop) 0)
4877 * @param prop lowercase-and-underscores property name
4884 * compatible = "vnd,some-sensor";
4892 * compatible = "vnd,some-sensor";
4899 * compatible = "vnd,some-sensor";
4917 #define DT_ANY_INST_HAS_BOOL_STATUS_OKAY(prop) \ argument
4918 COND_CODE_1(IS_EMPTY(DT_ANY_INST_HAS_BOOL_STATUS_OKAY_(prop)), (0), (1))
5036 * @brief Invokes @p fn for each element of property @p prop for
5039 * Equivalent to DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn).
5042 * @param prop lowercase-and-underscores property name
5045 #define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \ argument
5046 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
5049 * @brief Invokes @p fn for each element of property @p prop for
5052 * Equivalent to DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep).
5055 * @param prop lowercase-and-underscores property name
5060 #define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \ argument
5061 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
5064 * @brief Invokes @p fn for each element of property @p prop for
5068 * DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
5071 * @param prop lowercase-and-underscores property name
5077 #define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \ argument
5078 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
5081 * @brief Invokes @p fn for each element of property @p prop for
5085 * DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep,
5089 * @param prop lowercase-and-underscores property name
5097 #define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \ argument
5098 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
5104 * @param prop lowercase-and-underscores property name
5107 #define DT_INST_NODE_HAS_PROP(inst, prop) \ argument
5108 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
5113 * @param compat lowercase-and-underscores compatible, without quotes
5123 * @param pha lowercase-and-underscores property with type `phandle-array`
5136 * @param pha lowercase-and-underscores property with type `phandle-array`
5177 * @param name lowercase-and-underscores interrupt specifier name
5192 * identified by index @p idx, if instance has property @p prop.
5195 * @param prop property to check for
5200 #define DT_ANY_INST_HAS_PROP_STATUS_OKAY__(idx, prop) \ argument
5201 COND_CODE_1(DT_INST_NODE_HAS_PROP(idx, prop), (1,), ())
5207 * @p prop; the list may be empty, and the upper bound on number of
5210 * @param prop property to check
5214 #define DT_ANY_INST_HAS_PROP_STATUS_OKAY_(prop) \ argument
5215 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_PROP_STATUS_OKAY__, prop)
5221 * @p prop with value 1.
5224 * @param prop property to check for
5229 #define DT_ANY_INST_HAS_BOOL_STATUS_OKAY__(idx, prop) \ argument
5230 COND_CODE_1(DT_INST_PROP(idx, prop), (1,), ())
5236 * @p prop of value 1; the list may be empty, and the upper bound on number of
5239 * @param prop property to check
5243 #define DT_ANY_INST_HAS_BOOL_STATUS_OKAY_(prop) \ argument
5244 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_BOOL_STATUS_OKAY__, prop)
5264 * since its macro-based API is fiddly and can be hard to get right.
5270 /** @brief Concatenation helper, 3 arguments */
5300 #define DT_COMPAT_NODE_HAS_PROP_AND_OR(inst, compat, prop) \ argument
5301 DT_NODE_HAS_PROP(DT_INST(inst, compat), prop) ||
5333 #include <zephyr/devicetree/io-channels.h>
5339 #include <zephyr/devicetree/fixed-partitions.h>
5345 #include <zephyr/devicetree/port-endpoint.h>