1 /*
2  * Copyright (c) 2021 Teslabs Engineering S.L.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_
8 #define ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_
9 
10 #include <stdint.h>
11 
12 #include <zephyr/sys/util_macro.h>
13 
14 /**
15  * @name EXTI trigger modes.
16  * @anchor GD32_EXTI_TRIG
17  * @{
18  */
19 
20 /** No trigger */
21 #define GD32_EXTI_TRIG_NONE 0U
22 /** Trigger on rising edge */
23 #define GD32_EXTI_TRIG_RISING BIT(0)
24 /** Trigger on falling edge */
25 #define GD32_EXTI_TRIG_FALLING BIT(1)
26 /** Trigger on rising and falling edge */
27 #define GD32_EXTI_TRIG_BOTH (GD32_EXTI_TRIG_RISING | GD32_EXTI_TRIG_FALLING)
28 
29 /** @} */
30 
31 /** Callback for EXTI interrupt. */
32 typedef void (*gd32_exti_cb_t)(uint8_t line, void *user);
33 
34 /**
35  * @brief Enable EXTI interrupt for the given line.
36  *
37  * @param line EXTI line.
38  */
39 void gd32_exti_enable(uint8_t line);
40 
41 /**
42  * @brief Disable EXTI interrupt for the given line.
43  *
44  * @param line EXTI line.
45  */
46 void gd32_exti_disable(uint8_t line);
47 
48 /**
49  * @brief Configure EXTI interrupt trigger mode for the given line.
50  *
51  * @param line EXTI line.
52  * @param trigger Trigger mode (see @ref GD32_EXTI_TRIG).
53  */
54 void gd32_exti_trigger(uint8_t line, uint8_t trigger);
55 
56 /**
57  * @brief Configure EXTI interrupt callback.
58  *
59  * @param line EXTI line.
60  * @param cb Callback (NULL to disable).
61  * @param user User data (optional).
62  *
63  * @retval 0 On success.
64  * @retval -EALREADY If callback is already set and @p cb is not NULL.
65  */
66 int gd32_exti_configure(uint8_t line, gd32_exti_cb_t cb, void *user);
67 
68 #endif /* ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_ */
69