Skip to content

Commit 574f939

Browse files
gmarullnashif
authored andcommitted
device: only define/initialize metadata for DT devices
Check if node identifier is valid to define and initialize device metadata. Without this patch, "software devices", ie, DEVICE_DEFINE, would fail to compile when enabling the device metadata feature. Signed-off-by: Gerard Marull-Paretas <[email protected]>
1 parent 91e16f1 commit 574f939

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

include/zephyr/device.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,10 +1008,11 @@ device_get_dt_nodelabels(const struct device *dev)
10081008
* @param api_ Reference to device API ops.
10091009
* @param state_ Reference to device state.
10101010
* @param deps_ Reference to device dependencies.
1011+
* @param node_id_ Devicetree node identifier
10111012
* @param dev_id_ Device identifier token, as passed to Z_DEVICE_BASE_DEFINE
10121013
*/
1013-
#define Z_DEVICE_INIT(name_, pm_, data_, config_, api_, state_, deps_, \
1014-
dev_id_) \
1014+
#define Z_DEVICE_INIT(name_, pm_, data_, config_, api_, state_, deps_, node_id_, \
1015+
dev_id_) \
10151016
{ \
10161017
.name = name_, \
10171018
.config = (config_), \
@@ -1021,7 +1022,9 @@ device_get_dt_nodelabels(const struct device *dev)
10211022
IF_ENABLED(CONFIG_DEVICE_DEPS, (.deps = (deps_),)) /**/ \
10221023
IF_ENABLED(CONFIG_PM_DEVICE, ({ .pm_base = (pm_),},)) /**/ \
10231024
IF_ENABLED(CONFIG_DEVICE_DT_METADATA, \
1024-
(.dt_meta = &Z_DEVICE_DT_METADATA_NAME_GET(dev_id_),)) \
1025+
(IF_ENABLED(DT_NODE_EXISTS(node_id_), \
1026+
(.dt_meta = &Z_DEVICE_DT_METADATA_NAME_GET( \
1027+
dev_id_),)))) \
10251028
}
10261029

10271030
/**
@@ -1056,7 +1059,7 @@ device_get_dt_nodelabels(const struct device *dev)
10561059
STRUCT_SECTION_ITERABLE_NAMED_ALTERNATE( \
10571060
device, COND_CODE_1(Z_DEVICE_IS_MUTABLE(node_id), (device_mutable), (device)), \
10581061
Z_DEVICE_SECTION_NAME(level, prio), DEVICE_NAME_GET(dev_id)) = \
1059-
Z_DEVICE_INIT(name, pm, data, config, api, state, deps, dev_id)
1062+
Z_DEVICE_INIT(name, pm, data, config, api, state, deps, node_id, dev_id)
10601063

10611064
/* deprecated device initialization levels */
10621065
#define Z_DEVICE_LEVEL_DEPRECATED_EARLY \
@@ -1142,7 +1145,8 @@ device_get_dt_nodelabels(const struct device *dev)
11421145
(Z_DEVICE_DEPS_DEFINE(node_id, dev_id, __VA_ARGS__);)) \
11431146
\
11441147
IF_ENABLED(CONFIG_DEVICE_DT_METADATA, \
1145-
(Z_DEVICE_DT_METADATA_DEFINE(node_id, dev_id);)) \
1148+
(IF_ENABLED(DT_NODE_EXISTS(node_id), \
1149+
(Z_DEVICE_DT_METADATA_DEFINE(node_id, dev_id);))))\
11461150
\
11471151
Z_DEVICE_BASE_DEFINE(node_id, dev_id, name, pm, data, config, level, \
11481152
prio, api, state, Z_DEVICE_DEPS_NAME(dev_id)); \

0 commit comments

Comments
 (0)