drivers: interrupt_controller: intc_shared: convert to multi instance
The intc_shared driver until now had the possibility to enable
up to two instances of the driver using the symbols SHARED_IRQ_0
and SHARED_IRQ_1.
This commit removes those Config options, and instead instantiates the
driver using DT_INST_FOREACH_STATUS_OKAY macro.
Signed-off-by: Thomas Stranger <thomas.stranger@outlook.com>
diff --git a/drivers/interrupt_controller/intc_shared_irq.c b/drivers/interrupt_controller/intc_shared_irq.c
index 712b602..4988ac4 100644
--- a/drivers/interrupt_controller/intc_shared_irq.c
+++ b/drivers/interrupt_controller/intc_shared_irq.c
@@ -143,54 +143,30 @@
return 0;
}
-#if CONFIG_SHARED_IRQ_0
-void shared_irq_config_0_irq(void);
-
-const struct shared_irq_config shared_irq_config_0 = {
- .irq_num = DT_INST_IRQN(0),
- .client_count = CONFIG_SHARED_IRQ_NUM_CLIENTS,
- .config = shared_irq_config_0_irq
-};
-
-struct shared_irq_runtime shared_irq_0_runtime;
-
-DEVICE_DT_INST_DEFINE(0, shared_irq_initialize,
- NULL, &shared_irq_0_runtime,
- &shared_irq_config_0, POST_KERNEL,
- CONFIG_SHARED_IRQ_INIT_PRIORITY, &api_funcs);
-
-void shared_irq_config_0_irq(void)
-{
- IRQ_CONNECT(DT_INST_IRQN(0),
- DT_INST_IRQ(0, priority),
- shared_irq_isr, DEVICE_DT_INST_GET(0),
- DT_INST_IRQ(0, sense));
+#define SHARED_IRQ_CONFIG_FUNC(n) \
+void shared_irq_config_func_##n(void) \
+{ \
+ IRQ_CONNECT(DT_INST_IRQN(n), \
+ DT_INST_IRQ(n, priority), \
+ shared_irq_isr, \
+ DEVICE_DT_INST_GET(n), \
+ DT_INST_IRQ(n, sense)); \
}
-#endif /* CONFIG_SHARED_IRQ_0 */
+#define SHARED_IRQ_INIT(n) \
+ SHARED_IRQ_CONFIG_FUNC(n) \
+ struct shared_irq_runtime shared_irq_data_##n; \
+ \
+ const struct shared_irq_config shared_irq_config_##n = { \
+ .irq_num = DT_INST_IRQN(n), \
+ .client_count = CONFIG_SHARED_IRQ_NUM_CLIENTS, \
+ .config = shared_irq_config_func_##n \
+ }; \
+ DEVICE_DT_INST_DEFINE(n, shared_irq_initialize, \
+ NULL, \
+ &shared_irq_data_##n, \
+ &shared_irq_config_##n, POST_KERNEL, \
+ CONFIG_SHARED_IRQ_INIT_PRIORITY, \
+ &api_funcs);
-#if CONFIG_SHARED_IRQ_1
-void shared_irq_config_1_irq(void);
-
-const struct shared_irq_config shared_irq_config_1 = {
- .irq_num = DT_INST_IRQN(1),
- .client_count = CONFIG_SHARED_IRQ_NUM_CLIENTS,
- .config = shared_irq_config_1_irq
-};
-
-struct shared_irq_runtime shared_irq_1_runtime;
-
-DEVICE_DT_INST_DEFINE(1, shared_irq_initialize,
- NULL, &shared_irq_1_runtime,
- &shared_irq_config_1, POST_KERNEL,
- CONFIG_SHARED_IRQ_INIT_PRIORITY, &api_funcs);
-
-void shared_irq_config_1_irq(void)
-{
- IRQ_CONNECT(DT_INST_IRQN(1),
- DT_INST_IRQ(1, priority),
- shared_irq_isr, DEVICE_DT_INST_GET(1),
- DT_INST_IRQ(1, sense));
-}
-
-#endif /* CONFIG_SHARED_IRQ_1 */
+DT_INST_FOREACH_STATUS_OKAY(SHARED_IRQ_INIT)