1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  */
4 #ifndef __HAL_GPIO_H__
5 #define __HAL_GPIO_H__
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 #include "plat_types.h"
12 #include "hal_iomux.h"
13 
14 enum HAL_GPIO_DIR_T {
15     HAL_GPIO_DIR_IN = 0,
16     HAL_GPIO_DIR_OUT = 1,
17 };
18 
19 enum HAL_GPIO_IRQ_TYPE_T {
20     HAL_GPIO_IRQ_TYPE_LEVEL_SENSITIVE = 0,
21     HAL_GPIO_IRQ_TYPE_EDGE_SENSITIVE,
22 };
23 
24 enum HAL_GPIO_IRQ_POLARITY_T {
25     HAL_GPIO_IRQ_POLARITY_LOW_FALLING = 0,
26     HAL_GPIO_IRQ_POLARITY_HIGH_RISING,
27 };
28 
29 typedef void (* HAL_GPIO_PIN_IRQ_HANDLER)(enum HAL_GPIO_PIN_T pin);
30 
31 struct HAL_GPIO_IRQ_CFG_T {
32     uint8_t irq_enable:1;
33     uint8_t irq_debounce:1;
34     enum HAL_GPIO_IRQ_TYPE_T irq_type;
35     enum HAL_GPIO_IRQ_POLARITY_T irq_polarity;
36     HAL_GPIO_PIN_IRQ_HANDLER irq_handler;
37 };
38 
39 enum HAL_GPIO_DIR_T hal_gpio_pin_get_dir(enum HAL_GPIO_PIN_T pin);
40 void hal_gpio_pin_set_dir(enum HAL_GPIO_PIN_T pin, enum HAL_GPIO_DIR_T dir, uint8_t val_for_out);
41 void hal_gpio_pin_set(enum HAL_GPIO_PIN_T pin);
42 void hal_gpio_pin_clr(enum HAL_GPIO_PIN_T pin);
43 uint8_t hal_gpio_pin_get_val(enum HAL_GPIO_PIN_T pin);
44 uint8_t hal_gpio_setup_irq(enum HAL_GPIO_PIN_T pin, const struct HAL_GPIO_IRQ_CFG_T *cfg);
45 
46 #ifdef __cplusplus
47 }
48 #endif
49 
50 #endif
51