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