1 /*
2  * Copyright 2023 NXP
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @brief Driver for Pin interrupt and pattern match engine in NXP MCUs
9  *
10  * The Pin interrupt and pattern match engine (PINT) supports
11  * sourcing inputs from any pins on GPIO ports 0 and 1 of NXP MCUs
12  * featuring the module, and generating interrupts based on these inputs.
13  * Pin inputs can generate separate interrupts to the NVIC, or be combined
14  * using the PINT's boolean logic based pattern match engine.
15  * This driver currently only supports the pin interrupt feature of
16  * the PINT.
17  */
18 
19 #ifndef ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_NXP_PINT_H_
20 #define ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_NXP_PINT_H_
21 
22 #include <fsl_pint.h>
23 
24 /**
25  * @brief Pin interrupt sources
26  *
27  * Pin interrupt sources available for use.
28  */
29 enum nxp_pint_trigger {
30 	/* Do not generate Pin Interrupt */
31 	NXP_PINT_NONE = kPINT_PinIntEnableNone,
32 	/* Generate Pin Interrupt on rising edge */
33 	NXP_PINT_RISING  = kPINT_PinIntEnableRiseEdge,
34 	/* Generate Pin Interrupt on falling edge */
35 	NXP_PINT_FALLING  = kPINT_PinIntEnableFallEdge,
36 	/* Generate Pin Interrupt on both edges */
37 	NXP_PINT_BOTH = kPINT_PinIntEnableBothEdges,
38 	/* Generate Pin Interrupt on low level */
39 	NXP_PINT_LOW  = kPINT_PinIntEnableLowLevel,
40 	/* Generate Pin Interrupt on high level */
41 	NXP_PINT_HIGH = kPINT_PinIntEnableHighLevel
42 };
43 
44 /* Callback for NXP PINT interrupt */
45 typedef void (*nxp_pint_cb_t) (uint8_t pin, void *user);
46 
47 /**
48  * @brief Enable PINT interrupt source.
49  *
50  * @param pin: pin to use as interrupt source
51  *     0-64, corresponding to GPIO0 pin 1 - GPIO1 pin 31)
52  * @param trigger: one of nxp_pint_trigger flags
53  */
54 int nxp_pint_pin_enable(uint8_t pin, enum nxp_pint_trigger trigger);
55 
56 
57 /**
58  * @brief disable PINT interrupt source.
59  *
60  * @param pin: pin interrupt source to disable
61  */
62 void nxp_pint_pin_disable(uint8_t pin);
63 
64 /**
65  * @brief Install PINT callback
66  *
67  * @param pin: interrupt source to install callback for
68  * @param cb: callback to install
69  * @param data: user data to include in callback
70  * @return 0 on success, or negative value on error
71  */
72 int nxp_pint_pin_set_callback(uint8_t pin, nxp_pint_cb_t cb, void *data);
73 
74 /**
75  * @brief Remove PINT callback
76  *
77  * @param pin: interrupt source to remove callback for
78  */
79 void nxp_pint_pin_unset_callback(uint8_t pin);
80 
81 
82 #endif /* ZEPHYR_DRIVERS_INTERRUPT_CONTROLLER_INTC_NXP_PINT_H_ */
83