diff --git a/include/zephyr/device.h b/include/zephyr/device.h index d8394ef75a6..e0ba141fac0 100644 --- a/include/zephyr/device.h +++ b/include/zephyr/device.h @@ -1156,18 +1156,14 @@ device_get_dt_nodelabels(const struct device *dev) static const Z_DECL_ALIGN(struct init_entry) __used __noasan Z_INIT_ENTRY_SECTION( \ level, prio, Z_DEVICE_INIT_SUB_PRIO(node_id)) \ Z_INIT_ENTRY_NAME(DEVICE_NAME_GET(dev_id)) = { \ - COND_CODE_1(Z_DEVICE_IS_MUTABLE(node_id), \ - (.dev = { .dev_rw = &DEVICE_NAME_GET(dev_id)}), \ - (.dev = { .dev = &DEVICE_NAME_GET(dev_id)})) \ + .dev = (const struct device *)&DEVICE_NAME_GET(dev_id) \ } #define Z_DEFER_DEVICE_INIT_ENTRY_DEFINE(node_id, dev_id) \ static const Z_DECL_ALIGN(struct init_entry) __used __noasan \ __attribute__((__section__(".z_deferred_init"))) \ Z_INIT_ENTRY_NAME(DEVICE_NAME_GET(dev_id)) = { \ - COND_CODE_1(Z_DEVICE_IS_MUTABLE(node_id), \ - (.dev = { .dev_rw = &DEVICE_NAME_GET(dev_id)}), \ - (.dev = { .dev = &DEVICE_NAME_GET(dev_id)})) \ + .dev = (const struct device *)&DEVICE_NAME_GET(dev_id) \ } /** diff --git a/include/zephyr/init.h b/include/zephyr/init.h index d071445a0aa..8d476e1a645 100644 --- a/include/zephyr/init.h +++ b/include/zephyr/init.h @@ -73,12 +73,7 @@ struct init_entry { * If the init entry belongs to a device, this fields stores a * reference to it, otherwise it is set to NULL. */ - union { - const struct device *dev; -#ifdef CONFIG_DEVICE_MUTABLE - struct device *dev_rw; -#endif - } dev; + const struct device *dev; }; /** @cond INTERNAL_HIDDEN */ diff --git a/kernel/init.c b/kernel/init.c index 6eeed757c6d..2c3b13deb35 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -360,7 +360,7 @@ static void z_sys_init_run_level(enum init_level level) const struct init_entry *entry; for (entry = levels[level]; entry < levels[level+1]; entry++) { - const struct device *dev = entry->dev.dev; + const struct device *dev = entry->dev; int result; sys_trace_sys_init_enter(entry, level); @@ -381,7 +381,7 @@ int z_impl_device_init(const struct device *dev) } STRUCT_SECTION_FOREACH_ALTERNATE(_deferred_init, init_entry, entry) { - if (entry->dev.dev == dev) { + if (entry->dev == dev) { return do_device_init(dev); } } diff --git a/tests/lib/devicetree/devices/src/main.c b/tests/lib/devicetree/devices/src/main.c index d40917077c6..6b4f700f82b 100644 --- a/tests/lib/devicetree/devices/src/main.c +++ b/tests/lib/devicetree/devices/src/main.c @@ -64,25 +64,25 @@ DEVICE_DT_DEFINE(TEST_NOLABEL, dev_init, NULL, ZTEST(devicetree_devices, test_init_get) { /* Check device pointers */ - zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIO)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIO)->dev, DEVICE_DT_GET(TEST_GPIO), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_I2C)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_I2C)->dev, DEVICE_DT_GET(TEST_I2C), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVA)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVA)->dev, DEVICE_DT_GET(TEST_DEVA), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVB)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVB)->dev, DEVICE_DT_GET(TEST_DEVB), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIOX)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIOX)->dev, DEVICE_DT_GET(TEST_GPIOX), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVC)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVC)->dev, DEVICE_DT_GET(TEST_DEVC), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION)->dev, DEVICE_DT_GET(TEST_PARTITION), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIO_INJECTED)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIO_INJECTED)->dev, DEVICE_DT_GET(TEST_GPIO_INJECTED), NULL); - zassert_equal(DEVICE_INIT_GET(manual_dev)->dev.dev, + zassert_equal(DEVICE_INIT_GET(manual_dev)->dev, DEVICE_GET(manual_dev), NULL); - zassert_equal(DEVICE_INIT_DT_GET(TEST_NOLABEL)->dev.dev, + zassert_equal(DEVICE_INIT_DT_GET(TEST_NOLABEL)->dev, DEVICE_DT_GET(TEST_NOLABEL), NULL); /* Check init functions */