Zephyr Project API  3.3.0
A Scalable Open Source RTOS
devicetree.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: Apache-2.0
3 * Copyright (c) 2020 Nordic Semiconductor
4 * Copyright (c) 2020, Linaro Ltd.
5 *
6 * Not a generated file. Feel free to modify.
7 */
8
16#ifndef DEVICETREE_H
17#define DEVICETREE_H
18
19#include <devicetree_generated.h>
20
21#include <zephyr/sys/util.h>
22
30/*
31 * Property suffixes
32 * -----------------
33 *
34 * These are the optional parts that come after the _P_<property>
35 * part in DT_N_<path-id>_P_<property-id> macros, or the "prop-suf"
36 * nonterminal in the DT guide's macros.bnf file.
37 *
38 * Before adding new ones, check this list to avoid conflicts. If any
39 * are missing from this list, please add them. It should be complete.
40 *
41 * _ENUM_IDX: property's value as an index into bindings enum
42 * _ENUM_TOKEN: property's value as a token into bindings enum (string
43 * enum values are identifiers) [deprecated, use _STRING_TOKEN]
44 * _ENUM_UPPER_TOKEN: like _ENUM_TOKEN, but uppercased [deprecated, use
45 * _STRING_UPPER_TOKEN]
46 * _EXISTS: property is defined
47 * _FOREACH_PROP_ELEM: helper for "iterating" over values in the property
48 * _FOREACH_PROP_ELEM_VARGS: foreach functions with variable number of arguments
49 * _IDX_<i>: logical index into property
50 * _IDX_<i>_EXISTS: logical index into property is defined
51 * _IDX_<i>_PH: phandle array's phandle by index (or phandle, phandles)
52 * _IDX_<i>_STRING_TOKEN: string array element value as a token
53 * _IDX_<i>_STRING_UPPER_TOKEN: string array element value as a uppercased token
54 * _IDX_<i>_VAL_<val>: phandle array's specifier value by index
55 * _IDX_<i>_VAL_<val>_EXISTS: cell value exists, by index
56 * _LEN: property logical length
57 * _NAME_<name>_PH: phandle array's phandle by name
58 * _NAME_<name>_VAL_<val>: phandle array's property specifier by name
59 * _NAME_<name>_VAL_<val>_EXISTS: cell value exists, by name
60 * _STRING_TOKEN: string property's value as a token
61 * _STRING_UPPER_TOKEN: like _STRING_TOKEN, but uppercased
62 */
63
77#define DT_INVALID_NODE _
78
82#define DT_ROOT DT_N
83
134#define DT_PATH(...) DT_PATH_INTERNAL(__VA_ARGS__)
135
190#define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
191
230#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
231
326#define DT_INST(inst, compat) UTIL_CAT(DT_N_INST, DT_DASH(inst, compat))
327
351#define DT_PARENT(node_id) UTIL_CAT(node_id, _PARENT)
352
376#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
377
413#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
414
456#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
457 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
458 (DT_INST(0, compat)), \
459 (DT_INVALID_NODE))
460
488#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
489
514#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
515
542#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
543
564#define DT_SAME_NODE(node_id1, node_id2) \
565 (DT_DEP_ORD(node_id1) == (DT_DEP_ORD(node_id2)))
566
607#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
608
637#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
638
653#define DT_PROP_LEN_OR(node_id, prop, default_value) \
654 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
655 (DT_PROP_LEN(node_id, prop)), (default_value))
656
677#define DT_PROP_HAS_IDX(node_id, prop, idx) \
678 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
679
712#define DT_PROP_HAS_NAME(node_id, prop, name) \
713 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
714
737#define DT_PROP_BY_IDX(node_id, prop, idx) \
738 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
739
753#define DT_PROP_OR(node_id, prop, default_value) \
754 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
755 (DT_PROP(node_id, prop)), (default_value))
756
766#define DT_LABEL(node_id) DT_PROP(node_id, label) __DEPRECATED_MACRO
767
808#define DT_ENUM_IDX(node_id, prop) DT_CAT4(node_id, _P_, prop, _ENUM_IDX)
809
824#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
825 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
826 (DT_ENUM_IDX(node_id, prop)), (default_idx_value))
827
887#define DT_STRING_TOKEN(node_id, prop) \
888 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
889
903#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
904 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
905 (DT_STRING_TOKEN(node_id, prop)), (default_value))
906
964#define DT_STRING_UPPER_TOKEN(node_id, prop) \
965 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
966
981#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
982 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
983 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
984
1032#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1033 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1034
1082#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1083 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1084
1085/*
1086 * phandle properties
1087 *
1088 * These are special-cased to manage the impedance mismatch between
1089 * phandles, which are just uint32_t node properties that only make sense
1090 * within the tree itself, and C values.
1091 */
1092
1138#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1139 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1140
1160#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1161 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1162
1174#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1175 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1176
1231#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1232 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1233
1257#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1258 DT_PROP_OR(node_id, pha##_IDX_##idx##_VAL_##cell, default_value)
1259
1267#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1268
1283#define DT_PHA_OR(node_id, pha, cell, default_value) \
1284 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1285
1326#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1327 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1328
1350#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1351 DT_PROP_OR(node_id, pha##_NAME_##name##_VAL_##cell, default_value)
1352
1400#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1401 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1402
1452#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1453 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1454
1466#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1467
1514#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1515
1568#define DT_RANGES_HAS_IDX(node_id, idx) \
1569 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
1570
1623#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
1624 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
1625
1663#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
1664 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
1665
1712#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
1713 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
1714
1761#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
1762 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
1763
1810#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
1811 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
1812
1852#define DT_FOREACH_RANGE(node_id, fn) \
1853 DT_CAT(node_id, _FOREACH_RANGE)(fn)
1854
1900#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
1901 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
1902
1915#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
1916 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
1917
1932#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
1933 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
1934 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
1935
1944#define DT_NODE_VENDOR_OR(node_id, default_value) \
1945 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
1946
1976#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
1977 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
1978
1991#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
1992 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
1993
2008#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2009 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2010 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2011
2020#define DT_NODE_MODEL_OR(node_id, default_value) \
2021 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2022
2040#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2041
2053#define DT_REG_HAS_IDX(node_id, idx) \
2054 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2055
2062#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2063 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2064
2076#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2077 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE)
2078
2086#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2087
2095#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2096
2103#define DT_REG_ADDR_BY_NAME(node_id, name) \
2104 DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS)
2105
2112#define DT_REG_SIZE_BY_NAME(node_id, name) \
2113 DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE)
2114
2133#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2134
2145#define DT_IRQ_HAS_IDX(node_id, idx) \
2146 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2147
2158#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2159 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2160
2168#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2169
2179#define DT_IRQ_HAS_NAME(node_id, name) \
2180 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2181
2217#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2218 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2219
2235#define DT_IRQ_BY_NAME(node_id, name, cell) \
2236 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2237
2245#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2246
2257#define DT_IRQN(node_id) DT_IRQ(node_id, irq)
2258
2277#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
2278
2285#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
2286
2306#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
2307
2319#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
2320
2364#define DT_FOREACH_CHILD(node_id, fn) \
2365 DT_CAT(node_id, _FOREACH_CHILD)(fn)
2366
2407#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
2408 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
2409
2425#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
2426 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
2427
2443#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
2444 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
2445
2461#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
2462 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
2463
2480#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
2481 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
2482
2502#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
2503 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
2504
2523#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
2524 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
2525
2576#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
2577 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
2578
2623#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
2624 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
2625
2643#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
2644 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
2645
2659#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
2660 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
2661 fn, sep, __VA_ARGS__)
2662
2716#define DT_FOREACH_STATUS_OKAY(compat, fn) \
2717 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2718 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
2719 ())
2720
2765#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
2766 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2767 (UTIL_CAT(DT_FOREACH_OKAY_VARGS_, \
2768 compat)(fn, __VA_ARGS__)), \
2769 ())
2770
2795#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
2796
2818#define DT_NODE_HAS_STATUS(node_id, status) \
2819 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
2820
2840#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
2841 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
2842
2849#define DT_NUM_INST_STATUS_OKAY(compat) \
2850 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2851 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
2852
2880#define DT_NODE_HAS_COMPAT(node_id, compat) \
2881 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
2882
2897#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
2898 DT_NODE_HAS_COMPAT(node_id, compat) && DT_NODE_HAS_STATUS(node_id, status)
2899
2913#define DT_NODE_HAS_PROP(node_id, prop) \
2914 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
2915
2916
2933#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
2934 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
2935 _IDX_, idx, _VAL_, cell, _EXISTS))
2936
2946#define DT_PHA_HAS_CELL(node_id, pha, cell) \
2947 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
2948
2990#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
2991
3000#define DT_BUS_LABEL(node_id) DT_PROP(DT_BUS(node_id), label) __DEPRECATED_MACRO
3001
3030#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
3031
3048#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
3049
3057#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
3058
3066#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
3067
3077#define DT_INST_CHILD(inst, child) \
3078 DT_CHILD(DT_DRV_INST(inst), child)
3079
3094#define DT_INST_FOREACH_CHILD(inst, fn) \
3095 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
3096
3110#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
3111 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
3112
3128#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
3129 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
3130
3145#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
3146 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
3147
3159#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
3160 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
3161
3176#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
3177 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
3178
3192#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
3193 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
3194
3210#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
3211 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
3212
3219#define DT_INST_ENUM_IDX(inst, prop) \
3220 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
3221
3230#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
3231 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
3232
3239#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
3240
3247#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
3248
3258#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
3259 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
3260
3269#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
3270 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
3271
3279#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
3280 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
3281
3289#define DT_INST_PROP_OR(inst, prop, default_value) \
3290 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
3291
3298#define DT_INST_LABEL(inst) DT_INST_PROP(inst, label) __DEPRECATED_MACRO
3299
3309#define DT_INST_STRING_TOKEN(inst, prop) \
3310 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
3311
3319#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
3320 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
3321
3329#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
3330 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3331
3339#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
3340 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3341
3350#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
3351 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
3352
3364#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
3365 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
3366
3375#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
3376 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
3377
3387#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
3388 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
3389
3398#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
3399
3408#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
3409 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
3410
3420#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
3421 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
3422
3432#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
3433 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
3434
3443#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
3444 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
3445
3455#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
3456 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
3457
3466#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
3467
3475#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
3476
3483#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
3484
3491#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
3492 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
3493
3500#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
3501 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
3502
3509#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
3510 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
3511
3517#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
3518
3524#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
3525
3533#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
3534 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
3535
3543#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
3544 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
3545
3552#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
3553
3559#define DT_INST_IRQN(inst) DT_INST_IRQ(inst, irq)
3560
3566#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
3567
3576#define DT_INST_BUS_LABEL(inst) DT_BUS_LABEL(DT_DRV_INST(inst)) __DEPRECATED_MACRO
3577
3585#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
3586
3596#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
3597 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3598
3607#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
3608 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3609
3642#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
3643 DT_COMPAT_ON_BUS_INTERNAL(DT_DRV_COMPAT, bus)
3644
3710#define DT_INST_FOREACH_STATUS_OKAY(fn) \
3711 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3712 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
3713 DT_DRV_COMPAT)(fn)), \
3714 ())
3715
3727#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
3728 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3729 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3730 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
3731 ())
3732
3743#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
3744 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
3745
3758#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
3759 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
3760
3775#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
3776 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
3777
3795#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
3796 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
3797 __VA_ARGS__)
3798
3805#define DT_INST_NODE_HAS_PROP(inst, prop) \
3806 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
3807
3818#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
3819 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
3820
3830#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
3831 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
3832
3840#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
3841
3850#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
3851 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
3852
3860#define DT_INST_IRQ_HAS_CELL(inst, cell) \
3861 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
3862
3869#define DT_INST_IRQ_HAS_NAME(inst, name) \
3870 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
3871
3878#define DT_PATH_INTERNAL(...) \
3879 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
3885#define DT_S_PREFIX(name) _S_##name
3886
3901#define DT_CAT(a1, a2) a1 ## a2
3903#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
3905#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
3907#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
3909#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
3911#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
3912 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
3914#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
3915 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
3916/*
3917 * If you need to define a bigger DT_CATN(), do so here. Don't leave
3918 * any "holes" of undefined macros, please.
3919 */
3920
3922#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
3924#define DT_DASH_PREFIX(name) _##name
3926#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
3927 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
3929#define DT_COMPAT_ON_BUS_INTERNAL(compat, bus) \
3930 IS_ENABLED(UTIL_CAT(DT_CAT(DT_COMPAT_, compat), _BUS_##bus))
3931
3934/* have these last so they have access to all previously defined macros */
3937#include <zephyr/devicetree/gpio.h>
3938#include <zephyr/devicetree/spi.h>
3939#include <zephyr/devicetree/dma.h>
3940#include <zephyr/devicetree/pwms.h>
3944#include <zephyr/devicetree/can.h>
3946#include <zephyr/devicetree/mbox.h>
3947
3948#endif /* DEVICETREE_H */
Clocks Devicetree macro public API header file.
CAN devicetree macro public API header file.
DMA Devicetree macro public API header file.
GPIO Devicetree macro public API header file.
MBOX Devicetree macro public API header file.
Devicetree pin control helpers.
Reset Controller Devicetree macro public API header file.
SPI Devicetree macro public API header file.
Flash Devicetree macro public API header file.
IO channels devicetree macro public API header file.
Devicetree node dependency ordinals.
PWMs Devicetree macro public API header file.
Misc utilities.