Zephyr Project API  3.4.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_VAL_<val>_EXISTS property's value as a token exists
43 * _ENUM_TOKEN: property's value as a token into bindings enum (string
44 * enum values are identifiers) [deprecated, use _STRING_TOKEN]
45 * _ENUM_UPPER_TOKEN: like _ENUM_TOKEN, but uppercased [deprecated, use
46 * _STRING_UPPER_TOKEN]
47 * _EXISTS: property is defined
48 * _FOREACH_PROP_ELEM: helper for "iterating" over values in the property
49 * _FOREACH_PROP_ELEM_VARGS: foreach functions with variable number of arguments
50 * _IDX_<i>: logical index into property
51 * _IDX_<i>_EXISTS: logical index into property is defined
52 * _IDX_<i>_PH: phandle array's phandle by index (or phandle, phandles)
53 * _IDX_<i>_STRING_TOKEN: string array element value as a token
54 * _IDX_<i>_STRING_UPPER_TOKEN: string array element value as a uppercased token
55 * _IDX <i>_STRING_UNQUOTED: string array element value as a sequence of tokens, with no quotes
56 * _IDX_<i>_VAL_<val>: phandle array's specifier value by index
57 * _IDX_<i>_VAL_<val>_EXISTS: cell value exists, by index
58 * _LEN: property logical length
59 * _NAME_<name>_PH: phandle array's phandle by name
60 * _NAME_<name>_VAL_<val>: phandle array's property specifier by name
61 * _NAME_<name>_VAL_<val>_EXISTS: cell value exists, by name
62 * _STRING_TOKEN: string property's value as a token
63 * _STRING_UPPER_TOKEN: like _STRING_TOKEN, but uppercased
64 * _STRING_UNQUOTED: string property's value as a sequence of tokens, with no quotes
65 */
66
80#define DT_INVALID_NODE _
81
85#define DT_ROOT DT_N
86
137#define DT_PATH(...) DT_PATH_INTERNAL(__VA_ARGS__)
138
193#define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
194
233#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
234
329#define DT_INST(inst, compat) UTIL_CAT(DT_N_INST, DT_DASH(inst, compat))
330
354#define DT_PARENT(node_id) UTIL_CAT(node_id, _PARENT)
355
379#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
380
416#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
417
459#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
460 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
461 (DT_INST(0, compat)), \
462 (DT_INVALID_NODE))
463
491#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
492
517#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
518
545#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
546
567#define DT_SAME_NODE(node_id1, node_id2) \
568 (DT_DEP_ORD(node_id1) == (DT_DEP_ORD(node_id2)))
569
610#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
611
644#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
645
660#define DT_PROP_LEN_OR(node_id, prop, default_value) \
661 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
662 (DT_PROP_LEN(node_id, prop)), (default_value))
663
684#define DT_PROP_HAS_IDX(node_id, prop, idx) \
685 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
686
719#define DT_PROP_HAS_NAME(node_id, prop, name) \
720 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
721
756#define DT_PROP_BY_IDX(node_id, prop, idx) \
757 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
758
772#define DT_PROP_OR(node_id, prop, default_value) \
773 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
774 (DT_PROP(node_id, prop)), (default_value))
775
785#define DT_LABEL(node_id) DT_PROP(node_id, label) __DEPRECATED_MACRO
786
827#define DT_ENUM_IDX(node_id, prop) DT_CAT4(node_id, _P_, prop, _ENUM_IDX)
828
843#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
844 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
845 (DT_ENUM_IDX(node_id, prop)), (default_idx_value))
846
855#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
856 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
857
917#define DT_STRING_TOKEN(node_id, prop) \
918 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
919
933#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
934 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
935 (DT_STRING_TOKEN(node_id, prop)), (default_value))
936
994#define DT_STRING_UPPER_TOKEN(node_id, prop) \
995 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
996
1011#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
1012 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1013 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1014
1055#define DT_STRING_UNQUOTED(node_id, prop) \
1056 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1057
1072#define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \
1073 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1074 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1075
1123#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1124 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1125
1173#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1174 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1175
1216#define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \
1217 DT_CAT4(node_id, _P_, prop##_IDX_##idx, _STRING_UNQUOTED)
1218
1219/*
1220 * phandle properties
1221 *
1222 * These are special-cased to manage the impedance mismatch between
1223 * phandles, which are just uint32_t node properties that only make sense
1224 * within the tree itself, and C values.
1225 */
1226
1272#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1273 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1274
1294#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1295 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1296
1308#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1309 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1310
1365#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1366 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1367
1391#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1392 DT_PROP_OR(node_id, pha##_IDX_##idx##_VAL_##cell, default_value)
1393
1401#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1402
1417#define DT_PHA_OR(node_id, pha, cell, default_value) \
1418 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1419
1460#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1461 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1462
1484#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1485 DT_PROP_OR(node_id, pha##_NAME_##name##_VAL_##cell, default_value)
1486
1534#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1535 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1536
1586#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1587 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1588
1600#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1601
1648#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1649
1702#define DT_RANGES_HAS_IDX(node_id, idx) \
1703 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
1704
1757#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
1758 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
1759
1797#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
1798 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
1799
1846#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
1847 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
1848
1895#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
1896 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
1897
1944#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
1945 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
1946
1986#define DT_FOREACH_RANGE(node_id, fn) \
1987 DT_CAT(node_id, _FOREACH_RANGE)(fn)
1988
2034#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
2035 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
2036
2049#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
2050 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
2051
2066#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
2067 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
2068 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
2069
2078#define DT_NODE_VENDOR_OR(node_id, default_value) \
2079 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
2080
2110#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
2111 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
2112
2125#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
2126 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
2127
2142#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2143 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2144 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2145
2154#define DT_NODE_MODEL_OR(node_id, default_value) \
2155 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2156
2174#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2175
2187#define DT_REG_HAS_IDX(node_id, idx) \
2188 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2189
2196#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2197 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2198
2210#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2211 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE)
2212
2220#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2221
2229#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2230
2237#define DT_REG_ADDR_BY_NAME(node_id, name) \
2238 DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS)
2239
2246#define DT_REG_SIZE_BY_NAME(node_id, name) \
2247 DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE)
2248
2267#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2268
2279#define DT_IRQ_HAS_IDX(node_id, idx) \
2280 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2281
2292#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2293 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2294
2302#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2303
2313#define DT_IRQ_HAS_NAME(node_id, name) \
2314 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2315
2351#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2352 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2353
2369#define DT_IRQ_BY_NAME(node_id, name, cell) \
2370 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2371
2379#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2380
2391#define DT_IRQN(node_id) DT_IRQ(node_id, irq)
2392
2411#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
2412
2419#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
2420
2440#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
2441
2453#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
2454
2498#define DT_FOREACH_CHILD(node_id, fn) \
2499 DT_CAT(node_id, _FOREACH_CHILD)(fn)
2500
2541#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
2542 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
2543
2559#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
2560 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
2561
2577#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
2578 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
2579
2595#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
2596 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
2597
2614#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
2615 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
2616
2636#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
2637 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
2638
2657#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
2658 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
2659
2710#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
2711 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
2712
2756#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
2757 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
2758
2779#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
2780 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
2781
2798#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
2799 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
2800 fn, sep, __VA_ARGS__)
2801
2855#define DT_FOREACH_STATUS_OKAY(compat, fn) \
2856 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2857 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
2858 ())
2859
2904#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
2905 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2906 (UTIL_CAT(DT_FOREACH_OKAY_VARGS_, \
2907 compat)(fn, __VA_ARGS__)), \
2908 ())
2909
2934#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
2935
2957#define DT_NODE_HAS_STATUS(node_id, status) \
2958 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
2959
2979#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
2980 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
2981
2988#define DT_NUM_INST_STATUS_OKAY(compat) \
2989 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2990 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
2991
3019#define DT_NODE_HAS_COMPAT(node_id, compat) \
3020 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
3021
3036#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
3037 DT_NODE_HAS_COMPAT(node_id, compat) && DT_NODE_HAS_STATUS(node_id, status)
3038
3052#define DT_NODE_HAS_PROP(node_id, prop) \
3053 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
3054
3055
3072#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
3073 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
3074 _IDX_, idx, _VAL_, cell, _EXISTS))
3075
3085#define DT_PHA_HAS_CELL(node_id, pha, cell) \
3086 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
3087
3129#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
3130
3139#define DT_BUS_LABEL(node_id) DT_PROP(DT_BUS(node_id), label) __DEPRECATED_MACRO
3140
3169#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
3170
3187#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
3188
3196#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
3197
3205#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
3206
3216#define DT_INST_CHILD(inst, child) \
3217 DT_CHILD(DT_DRV_INST(inst), child)
3218
3233#define DT_INST_FOREACH_CHILD(inst, fn) \
3234 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
3235
3249#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
3250 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
3251
3267#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
3268 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
3269
3284#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
3285 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
3286
3298#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
3299 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
3300
3315#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
3316 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
3317
3331#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
3332 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
3333
3349#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
3350 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
3351
3358#define DT_INST_ENUM_IDX(inst, prop) \
3359 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
3360
3369#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
3370 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
3371
3380#define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \
3381 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
3382
3389#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
3390
3397#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
3398
3408#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
3409 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
3410
3419#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
3420 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
3421
3429#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
3430 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
3431
3439#define DT_INST_PROP_OR(inst, prop, default_value) \
3440 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
3441
3449#define DT_INST_PROP_LEN_OR(inst, prop, default_value) \
3450 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
3451
3458#define DT_INST_LABEL(inst) DT_INST_PROP(inst, label) __DEPRECATED_MACRO
3459
3469#define DT_INST_STRING_TOKEN(inst, prop) \
3470 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
3471
3479#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
3480 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
3481
3490#define DT_INST_STRING_UNQUOTED(inst, prop) \
3491 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
3492
3500#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
3501 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3502
3510#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
3511 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3512
3520#define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \
3521 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
3522
3531#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
3532 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
3533
3545#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
3546 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
3547
3556#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
3557 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
3558
3568#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
3569 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
3570
3579#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
3580
3589#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
3590 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
3591
3601#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
3602 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
3603
3613#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
3614 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
3615
3624#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
3625 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
3626
3636#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
3637 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
3638
3647#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
3648
3656#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
3657
3664#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
3665
3672#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
3673 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
3674
3681#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
3682 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
3683
3690#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
3691 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
3692
3698#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
3699
3705#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
3706
3714#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
3715 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
3716
3724#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
3725 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
3726
3733#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
3734
3740#define DT_INST_IRQN(inst) DT_INST_IRQ(inst, irq)
3741
3747#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
3748
3757#define DT_INST_BUS_LABEL(inst) DT_BUS_LABEL(DT_DRV_INST(inst)) __DEPRECATED_MACRO
3758
3766#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
3767
3777#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
3778 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3779
3788#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
3789 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3790
3799#define DT_INST_STRING_UNQUOTED_OR(inst, name, default_value) \
3800 DT_STRING_UNQUOTED_OR(DT_DRV_INST(inst), name, default_value)
3801
3834#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
3835 DT_COMPAT_ON_BUS_INTERNAL(DT_DRV_COMPAT, bus)
3836
3881#define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \
3882 (DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_INST_NODE_HAS_PROP_AND_OR, prop) 0)
3883
3949#define DT_INST_FOREACH_STATUS_OKAY(fn) \
3950 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3951 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
3952 DT_DRV_COMPAT)(fn)), \
3953 ())
3954
3966#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
3967 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3968 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3969 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
3970 ())
3971
3982#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
3983 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
3984
3997#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
3998 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
3999
4014#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
4015 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
4016
4034#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
4035 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
4036 __VA_ARGS__)
4037
4044#define DT_INST_NODE_HAS_PROP(inst, prop) \
4045 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
4046
4057#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
4058 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
4059
4069#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
4070 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
4071
4079#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
4080
4089#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
4090 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
4091
4099#define DT_INST_IRQ_HAS_CELL(inst, cell) \
4100 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
4101
4108#define DT_INST_IRQ_HAS_NAME(inst, name) \
4109 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
4110
4117#define DT_PATH_INTERNAL(...) \
4118 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
4124#define DT_S_PREFIX(name) _S_##name
4125
4140#define DT_CAT(a1, a2) a1 ## a2
4142#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
4144#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
4146#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
4148#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
4150#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
4151 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
4153#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
4154 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
4155/*
4156 * If you need to define a bigger DT_CATN(), do so here. Don't leave
4157 * any "holes" of undefined macros, please.
4158 */
4159
4161#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
4163#define DT_DASH_PREFIX(name) _##name
4165#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
4166 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
4168#define DT_COMPAT_ON_BUS_INTERNAL(compat, bus) \
4169 IS_ENABLED(UTIL_CAT(DT_CAT(DT_COMPAT_, compat), _BUS_##bus))
4170
4172#define DT_INST_NODE_HAS_PROP_AND_OR(inst, prop) \
4173 DT_INST_NODE_HAS_PROP(inst, prop) ||
4174
4177/* have these last so they have access to all previously defined macros */
4180#include <zephyr/devicetree/gpio.h>
4181#include <zephyr/devicetree/spi.h>
4182#include <zephyr/devicetree/dma.h>
4183#include <zephyr/devicetree/pwms.h>
4187#include <zephyr/devicetree/can.h>
4189#include <zephyr/devicetree/mbox.h>
4190
4191#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.