diff --git a/include/zephyr/init.h b/include/zephyr/init.h
index 9b0d299..3d936ce 100644
--- a/include/zephyr/init.h
+++ b/include/zephyr/init.h
@@ -42,81 +42,14 @@
  *   SMP.
  *
  * Initialization priority can take a value in the range of 0 to 99.
- *
- * @note The same infrastructure is used by devices.
  * @{
  */
 
-struct device;
-
-/**
- * @brief Initialization function for init entries.
- *
- * Init entries support both the system initialization and the device
- * APIs. Each API has its own init function signature; hence, we have a
- * union to cover both.
- */
-union init_function {
-	/**
-	 * System initialization function.
-	 *
-	 * @retval 0 On success
-	 * @retval -errno If init fails.
-	 */
-	int (*sys)(void);
-	/**
-	 * Device initialization function.
-	 *
-	 * @param dev Device instance.
-	 *
-	 * @retval 0 On success
-	 * @retval -errno If device initialization fails.
-	 */
-	int (*dev)(const struct device *dev);
-};
-
-/**
- * @brief Structure to store initialization entry information.
- *
- * @internal
- * Init entries need to be defined following these rules:
- *
- * - Their name must be set using Z_INIT_ENTRY_NAME().
- * - They must be placed in a special init section, given by
- *   Z_INIT_ENTRY_SECTION().
- * - They must be aligned, e.g. using Z_DECL_ALIGN().
- *
- * See SYS_INIT_NAMED() for an example.
- * @endinternal
- */
-struct init_entry {
-	/** Initialization function. */
-	union init_function init_fn;
-	/**
-	 * If the init entry belongs to a device, this fields stores a
-	 * reference to it, otherwise it is set to NULL.
-	 */
-	const struct device *dev;
-};
+/** System initialization function. */
+typedef int (*sys_init_fn_t)(void);
 
 /** @cond INTERNAL_HIDDEN */
 
-/* Helper definitions to evaluate level equality */
-#define Z_INIT_EARLY_EARLY		 1
-#define Z_INIT_PRE_KERNEL_1_PRE_KERNEL_1 1
-#define Z_INIT_PRE_KERNEL_2_PRE_KERNEL_2 1
-#define Z_INIT_POST_KERNEL_POST_KERNEL	 1
-#define Z_INIT_APPLICATION_APPLICATION	 1
-#define Z_INIT_SMP_SMP			 1
-
-/* Init level ordinals */
-#define Z_INIT_ORD_EARLY	0
-#define Z_INIT_ORD_PRE_KERNEL_1 1
-#define Z_INIT_ORD_PRE_KERNEL_2 2
-#define Z_INIT_ORD_POST_KERNEL	3
-#define Z_INIT_ORD_APPLICATION	4
-#define Z_INIT_ORD_SMP		5
-
 /**
  * @brief Obtain init entry name.
  *
@@ -131,30 +64,13 @@
  * linker scripts to sort them according to the specified
  * level/priority/sub-priority.
  */
-#define Z_INIT_ENTRY_SECTION(level, prio, sub_prio)                           \
-	__attribute__((__section__(                                           \
-		".z_init_" #level STRINGIFY(prio)"_" STRINGIFY(sub_prio)"_")))
+#define Z_INIT_ENTRY_SECTION(level, prio)                                      \
+	__attribute__(                                                         \
+		(__section__(".z_init_" #level STRINGIFY(prio)"_")))
 
 /** @endcond */
 
 /**
- * @brief Obtain the ordinal for an init level.
- *
- * @param level Init level (EARLY, PRE_KERNEL_1, PRE_KERNEL_2, POST_KERNEL,
- * APPLICATION, SMP).
- *
- * @return Init level ordinal.
- */
-#define INIT_LEVEL_ORD(level)                                                  \
-	COND_CODE_1(Z_INIT_EARLY_##level, (Z_INIT_ORD_EARLY),                  \
-	(COND_CODE_1(Z_INIT_PRE_KERNEL_1_##level, (Z_INIT_ORD_PRE_KERNEL_1),   \
-	(COND_CODE_1(Z_INIT_PRE_KERNEL_2_##level, (Z_INIT_ORD_PRE_KERNEL_2),   \
-	(COND_CODE_1(Z_INIT_POST_KERNEL_##level, (Z_INIT_ORD_POST_KERNEL),     \
-	(COND_CODE_1(Z_INIT_APPLICATION_##level, (Z_INIT_ORD_APPLICATION),     \
-	(COND_CODE_1(Z_INIT_SMP_##level, (Z_INIT_ORD_SMP),                     \
-	(ZERO_OR_COMPILE_ERROR(0)))))))))))))
-
-/**
  * @brief Register an initialization function.
  *
  * The function will be called during system initialization according to the
@@ -180,19 +96,16 @@
  * same init function.
  *
  * @param name Unique name for SYS_INIT entry.
- * @param init_fn_ See SYS_INIT().
+ * @param init_fn See SYS_INIT().
  * @param level See SYS_INIT().
  * @param prio See SYS_INIT().
  *
  * @see SYS_INIT()
  */
-#define SYS_INIT_NAMED(name, init_fn_, level, prio)                            \
-	static const Z_DECL_ALIGN(struct init_entry)                           \
-		Z_INIT_ENTRY_SECTION(level, prio, 0) __used __noasan           \
-		Z_INIT_ENTRY_NAME(name) = {                                    \
-			.init_fn = {.sys = (init_fn_)},                        \
-			.dev = NULL,                                           \
-	}
+#define SYS_INIT_NAMED(name, init_fn, level, prio)                             \
+	static const Z_DECL_ALIGN(sys_init_fn_t)                               \
+		Z_INIT_ENTRY_SECTION(level, prio) __used __noasan              \
+		Z_INIT_ENTRY_NAME(name) = init_fn
 
 /** @} */
 
diff --git a/kernel/init.c b/kernel/init.c
index e5e1fcf..78b7247 100644
--- a/kernel/init.c
+++ b/kernel/init.c
@@ -61,13 +61,13 @@
 					  CONFIG_IDLE_STACK_SIZE);
 #endif /* CONFIG_MULTITHREADING */
 
-extern const struct init_entry __init_start[];
-extern const struct init_entry __init_EARLY_start[];
-extern const struct init_entry __init_PRE_KERNEL_1_start[];
-extern const struct init_entry __init_PRE_KERNEL_2_start[];
-extern const struct init_entry __init_POST_KERNEL_start[];
-extern const struct init_entry __init_APPLICATION_start[];
-extern const struct init_entry __init_end[];
+extern const sys_init_fn_t __init_start[];
+extern const sys_init_fn_t __init_EARLY_start[];
+extern const sys_init_fn_t __init_PRE_KERNEL_1_start[];
+extern const sys_init_fn_t __init_PRE_KERNEL_2_start[];
+extern const sys_init_fn_t __init_POST_KERNEL_start[];
+extern const sys_init_fn_t __init_APPLICATION_start[];
+extern const sys_init_fn_t __init_end[];
 
 extern const struct device _device_list_EARLY_start[];
 extern const struct device _device_list_PRE_KERNEL_1_start[];
@@ -89,7 +89,7 @@
 };
 
 #ifdef CONFIG_SMP
-extern const struct init_entry __init_SMP_start[];
+extern const sys_init_fn_t __init_SMP_start[];
 
 extern const struct device _device_list_SMP_start[];
 #endif
@@ -266,7 +266,7 @@
 		_device_list_end,
 	};
 
-	static const struct init_entry *levels[] = {
+	static const sys_init_fn_t *levels[] = {
 		__init_EARLY_start,
 		__init_PRE_KERNEL_1_start,
 		__init_PRE_KERNEL_2_start,
@@ -306,8 +306,8 @@
 		}
 	}
 
-	for (const struct init_entry *entry = levels[level]; entry < levels[level+1]; entry++) {
-		(void)entry->init_fn.sys();
+	for (const sys_init_fn_t *entry = levels[level]; entry < levels[level+1]; entry++) {
+		(void)(*entry)();
 	}
 }
 
