1 /*
2  * Copyright 2024 NXP
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * Interrupt Narrow Band Unit. This is meant for a RCP radio device.
10  */
11 
12 /* -------------------------------------------------------------------------- */
13 /*                                  Includes                                  */
14 /* -------------------------------------------------------------------------- */
15 #include <zephyr/irq.h>
16 
17 /* -------------------------------------------------------------------------- */
18 /*                                  Definitions                               */
19 /* -------------------------------------------------------------------------- */
20 #define DT_DRV_COMPAT nxp_nbu
21 
22 #define NBU_RX_IRQ_N DT_IRQ_BY_NAME(DT_DRV_INST(0), nbu_rx_int, irq)
23 #define NBU_RX_IRQ_P DT_IRQ_BY_NAME(DT_DRV_INST(0), nbu_rx_int, priority)
24 #if DT_INST_IRQ_HAS_NAME(0, wakeup_int)
25 #define NBU_WAKE_UP_IRQ_N DT_IRQ_BY_NAME(DT_DRV_INST(0), wakeup_int, irq)
26 #define NBU_WAKE_UP_IRQ_P DT_IRQ_BY_NAME(DT_DRV_INST(0), wakeup_int, priority)
27 #endif
28 
29 /* -------------------------------------------------------------------------- */
30 /*                             Private prototypes                             */
31 /* -------------------------------------------------------------------------- */
32 extern int32_t nbu_handler(void);
33 extern int32_t nbu_wakeup_done_handler(void);
34 
35 /* -------------------------------------------------------------------------- */
36 /*                             Public function                                */
37 /* -------------------------------------------------------------------------- */
38 
nxp_nbu_init(void)39 void nxp_nbu_init(void)
40 {
41 #if defined(CONFIG_BT) || defined(CONFIG_IEEE802154)
42 	/* NBU interface Interrupt */
43 	IRQ_CONNECT(NBU_RX_IRQ_N, NBU_RX_IRQ_P, nbu_handler, 0, 0);
44 	irq_enable(NBU_RX_IRQ_N);
45 
46 #if DT_INST_IRQ_HAS_NAME(0, wakeup_int)
47 	/* Wake up done interrupt */
48 	IRQ_CONNECT(NBU_WAKE_UP_IRQ_N, NBU_WAKE_UP_IRQ_P, nbu_wakeup_done_handler, 0, 0);
49 	irq_enable(NBU_WAKE_UP_IRQ_N);
50 #endif
51 #if (DT_INST_PROP(0, wakeup_source)) && CONFIG_PM
52 	EnableDeepSleepIRQ(NBU_RX_IRQ_N);
53 #endif
54 
55 #endif
56 }
57