Zephyr Project API  3.2.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
358#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
359
383#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
384
420#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
421
463#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
464 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
465 (DT_INST(0, compat)), \
466 (DT_INVALID_NODE))
467
495#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
496
521#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
522
549#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
550
571#define DT_SAME_NODE(node_id1, node_id2) \
572 (DT_DEP_ORD(node_id1) == (DT_DEP_ORD(node_id2)))
573
614#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
615
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
744#define DT_PROP_BY_IDX(node_id, prop, idx) \
745 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
746
760#define DT_PROP_OR(node_id, prop, default_value) \
761 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
762 (DT_PROP(node_id, prop)), (default_value))
763
773#define DT_LABEL(node_id) DT_PROP(node_id, label) __DEPRECATED_MACRO
774
815#define DT_ENUM_IDX(node_id, prop) DT_CAT4(node_id, _P_, prop, _ENUM_IDX)
816
831#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
832 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
833 (DT_ENUM_IDX(node_id, prop)), (default_idx_value))
834
894#define DT_STRING_TOKEN(node_id, prop) \
895 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
896
910#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
911 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
912 (DT_STRING_TOKEN(node_id, prop)), (default_value))
913
971#define DT_STRING_UPPER_TOKEN(node_id, prop) \
972 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
973
988#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
989 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
990 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
991
1039#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1040 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1041
1089#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1090 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1091
1092/*
1093 * phandle properties
1094 *
1095 * These are special-cased to manage the impedance mismatch between
1096 * phandles, which are just uint32_t node properties that only make sense
1097 * within the tree itself, and C values.
1098 */
1099
1145#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1146 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1147
1167#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1168 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1169
1181#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1182 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1183
1238#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1239 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1240
1264#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1265 DT_PROP_OR(node_id, pha##_IDX_##idx##_VAL_##cell, default_value)
1266
1274#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1275
1290#define DT_PHA_OR(node_id, pha, cell, default_value) \
1291 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1292
1333#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1334 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1335
1357#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1358 DT_PROP_OR(node_id, pha##_NAME_##name##_VAL_##cell, default_value)
1359
1407#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1408 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1409
1459#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1460 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1461
1473#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1474
1521#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1522
1575#define DT_RANGES_HAS_IDX(node_id, idx) \
1576 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
1577
1630#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
1631 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
1632
1670#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
1671 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
1672
1719#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
1720 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
1721
1768#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
1769 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
1770
1817#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
1818 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
1819
1859#define DT_FOREACH_RANGE(node_id, fn) \
1860 DT_CAT(node_id, _FOREACH_RANGE)(fn)
1861
1907#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
1908 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
1909
1922#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
1923 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
1924
1939#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
1940 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
1941 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
1942
1951#define DT_NODE_VENDOR_OR(node_id, default_value) \
1952 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
1953
1971#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
1972
1984#define DT_REG_HAS_IDX(node_id, idx) \
1985 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
1986
1993#define DT_REG_ADDR_BY_IDX(node_id, idx) \
1994 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
1995
2007#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2008 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE)
2009
2017#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2018
2026#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2027
2034#define DT_REG_ADDR_BY_NAME(node_id, name) \
2035 DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS)
2036
2043#define DT_REG_SIZE_BY_NAME(node_id, name) \
2044 DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE)
2045
2064#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2065
2076#define DT_IRQ_HAS_IDX(node_id, idx) \
2077 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2078
2089#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2090 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2091
2099#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2100
2110#define DT_IRQ_HAS_NAME(node_id, name) \
2111 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2112
2148#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2149 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2150
2166#define DT_IRQ_BY_NAME(node_id, name, cell) \
2167 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2168
2176#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2177
2188#define DT_IRQN(node_id) DT_IRQ(node_id, irq)
2189
2208#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
2209
2216#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
2217
2237#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
2238
2250#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
2251
2295#define DT_FOREACH_CHILD(node_id, fn) \
2296 DT_CAT(node_id, _FOREACH_CHILD)(fn)
2297
2338#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
2339 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
2340
2356#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
2357 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
2358
2374#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
2375 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
2376
2392#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
2393 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
2394
2411#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
2412 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
2413
2433#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
2434 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
2435
2454#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
2455 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
2456
2507#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
2508 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
2509
2527#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
2528 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
2529
2583#define DT_FOREACH_STATUS_OKAY(compat, fn) \
2584 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2585 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
2586 ())
2587
2632#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
2633 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2634 (UTIL_CAT(DT_FOREACH_OKAY_VARGS_, \
2635 compat)(fn, __VA_ARGS__)), \
2636 ())
2637
2662#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
2663
2685#define DT_NODE_HAS_STATUS(node_id, status) \
2686 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
2687
2707#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
2708 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
2709
2716#define DT_NUM_INST_STATUS_OKAY(compat) \
2717 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
2718 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
2719
2747#define DT_NODE_HAS_COMPAT(node_id, compat) \
2748 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
2749
2764#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
2765 DT_NODE_HAS_COMPAT(node_id, compat) && DT_NODE_HAS_STATUS(node_id, status)
2766
2780#define DT_NODE_HAS_PROP(node_id, prop) \
2781 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
2782
2783
2800#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
2801 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
2802 _IDX_, idx, _VAL_, cell, _EXISTS))
2803
2813#define DT_PHA_HAS_CELL(node_id, pha, cell) \
2814 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
2815
2857#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
2858
2867#define DT_BUS_LABEL(node_id) DT_PROP(DT_BUS(node_id), label) __DEPRECATED_MACRO
2868
2897#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
2898
2915#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
2916
2926#define DT_INST_CHILD(inst, child) \
2927 DT_CHILD(DT_DRV_INST(inst), child)
2928
2943#define DT_INST_FOREACH_CHILD(inst, fn) \
2944 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
2945
2959#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
2960 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
2961
2977#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
2978 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
2979
2994#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
2995 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
2996
3008#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
3009 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
3010
3025#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
3026 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
3027
3041#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
3042 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
3043
3059#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
3060 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
3061
3068#define DT_INST_ENUM_IDX(inst, prop) \
3069 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
3070
3079#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
3080 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
3081
3088#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
3089
3096#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
3097
3107#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
3108 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
3109
3118#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
3119 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
3120
3128#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
3129 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
3130
3138#define DT_INST_PROP_OR(inst, prop, default_value) \
3139 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
3140
3147#define DT_INST_LABEL(inst) DT_INST_PROP(inst, label) __DEPRECATED_MACRO
3148
3158#define DT_INST_STRING_TOKEN(inst, prop) \
3159 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
3160
3168#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
3169 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
3170
3178#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
3179 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3180
3188#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
3189 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
3190
3199#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
3200 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
3201
3213#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
3214 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
3215
3224#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
3225 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
3226
3236#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
3237 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
3238
3247#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
3248
3257#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
3258 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
3259
3269#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
3270 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
3271
3281#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
3282 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
3283
3292#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
3293 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
3294
3304#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
3305 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
3306
3315#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
3316
3324#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
3325
3332#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
3333
3340#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
3341 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
3342
3349#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
3350 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
3351
3358#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
3359 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
3360
3366#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
3367
3373#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
3374
3382#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
3383 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
3384
3392#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
3393 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
3394
3401#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
3402
3408#define DT_INST_IRQN(inst) DT_INST_IRQ(inst, irq)
3409
3415#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
3416
3425#define DT_INST_BUS_LABEL(inst) DT_BUS_LABEL(DT_DRV_INST(inst)) __DEPRECATED_MACRO
3426
3434#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
3435
3445#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
3446 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3447
3456#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
3457 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
3458
3491#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
3492 DT_COMPAT_ON_BUS_INTERNAL(DT_DRV_COMPAT, bus)
3493
3559#define DT_INST_FOREACH_STATUS_OKAY(fn) \
3560 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3561 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
3562 DT_DRV_COMPAT)(fn)), \
3563 ())
3564
3576#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
3577 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
3578 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3579 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
3580 ())
3581
3592#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
3593 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
3594
3609#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
3610 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
3611
3618#define DT_INST_NODE_HAS_PROP(inst, prop) \
3619 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
3620
3631#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
3632 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
3633
3643#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
3644 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
3645
3653#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
3654
3663#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
3664 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
3665
3673#define DT_INST_IRQ_HAS_CELL(inst, cell) \
3674 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
3675
3682#define DT_INST_IRQ_HAS_NAME(inst, name) \
3683 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
3684
3691#define DT_PATH_INTERNAL(...) \
3692 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
3698#define DT_S_PREFIX(name) _S_##name
3699
3714#define DT_CAT(a1, a2) a1 ## a2
3716#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
3718#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
3720#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
3722#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
3724#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
3725 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
3727#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
3728 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
3729/*
3730 * If you need to define a bigger DT_CATN(), do so here. Don't leave
3731 * any "holes" of undefined macros, please.
3732 */
3733
3735#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
3737#define DT_DASH_PREFIX(name) _##name
3739#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
3740 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
3742#define DT_COMPAT_ON_BUS_INTERNAL(compat, bus) \
3743 IS_ENABLED(UTIL_CAT(DT_CAT(DT_COMPAT_, compat), _BUS_##bus))
3744
3747/* have these last so they have access to all previously defined macros */
3750#include <zephyr/devicetree/gpio.h>
3751#include <zephyr/devicetree/spi.h>
3752#include <zephyr/devicetree/dma.h>
3753#include <zephyr/devicetree/pwms.h>
3758#include <zephyr/devicetree/can.h>
3760#include <zephyr/devicetree/mbox.h>
3761
3762#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.
Zephyr-specific devicetree /chosen properties.
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.