1 /*
2  * Copyright (C) 2020-2021 Alibaba Group Holding Limited
3  */
4 
5 #ifndef AOS_GPIO_H
6 #define AOS_GPIO_H
7 
8 #include <aos/device_core.h>
9 
10 #define AOS_GPIO_DIR_MASK               ((uint32_t)0xF << 0)
11 #define AOS_GPIO_DIR_NONE               ((uint32_t)0x0 << 0)
12 #define AOS_GPIO_DIR_INPUT              ((uint32_t)0x1 << 0)
13 #define AOS_GPIO_DIR_OUTPUT             ((uint32_t)0x2 << 0)
14 
15 #define AOS_GPIO_INPUT_CFG_MASK         ((uint32_t)0xF << 4)
16 #define AOS_GPIO_INPUT_CFG_DEFAULT      ((uint32_t)0x0 << 4)
17 #define AOS_GPIO_INPUT_CFG_HI           ((uint32_t)0x1 << 4)
18 #define AOS_GPIO_INPUT_CFG_PU           ((uint32_t)0x2 << 4)
19 #define AOS_GPIO_INPUT_CFG_PD           ((uint32_t)0x3 << 4)
20 
21 #define AOS_GPIO_ICFG_MASK              AOS_GPIO_INPUT_CFG_MASK
22 #define AOS_GPIO_ICFG_DEFAULT           AOS_GPIO_INPUT_CFG_DEFAULT
23 #define AOS_GPIO_ICFG_HI                AOS_GPIO_INPUT_CFG_HI
24 #define AOS_GPIO_ICFG_PU                AOS_GPIO_INPUT_CFG_PU
25 #define AOS_GPIO_ICFG_PD                AOS_GPIO_INPUT_CFG_PD
26 
27 #define AOS_GPIO_IRQ_TRIG_MASK          ((uint32_t)0xF << 8)
28 #define AOS_GPIO_IRQ_TRIG_NONE          ((uint32_t)0x0 << 8)
29 #define AOS_GPIO_IRQ_TRIG_EDGE_RISING   ((uint32_t)0x1 << 8)
30 #define AOS_GPIO_IRQ_TRIG_EDGE_FALLING  ((uint32_t)0x2 << 8)
31 #define AOS_GPIO_IRQ_TRIG_EDGE_BOTH     ((uint32_t)0x3 << 8)
32 #define AOS_GPIO_IRQ_TRIG_LEVEL_HIGH    ((uint32_t)0x4 << 8)
33 #define AOS_GPIO_IRQ_TRIG_LEVEL_LOW     ((uint32_t)0x5 << 8)
34 
35 #define AOS_GPIO_IRQT_MASK              AOS_GPIO_IRQ_TRIG_MASK
36 #define AOS_GPIO_IRQT_NONE              AOS_GPIO_IRQ_TRIG_NONE
37 #define AOS_GPIO_IRQT_EDGE_RISING       AOS_GPIO_IRQ_TRIG_EDGE_RISING
38 #define AOS_GPIO_IRQT_EDGE_FALLING      AOS_GPIO_IRQ_TRIG_EDGE_FALLING
39 #define AOS_GPIO_IRQT_EDGE_BOTH         AOS_GPIO_IRQ_TRIG_EDGE_BOTH
40 #define AOS_GPIO_IRQT_LEVEL_HIGH        AOS_GPIO_IRQ_TRIG_LEVEL_HIGH
41 #define AOS_GPIO_IRQT_LEVEL_LOW         AOS_GPIO_IRQ_TRIG_LEVEL_LOW
42 
43 #define AOS_GPIO_IRQ_PRIO_MASK          ((uint32_t)0xFF << 16)
44 #define AOS_GPIO_IRQ_PRIO(x)            (((uint32_t)(x) & 0xFF) << 16)
45 #define AOS_GPIO_IRQ_PRIO_DEFAULT       AOS_GPIO_IRQ_PRIO(0)
46 
47 #define AOS_GPIO_OUTPUT_CFG_MASK        ((uint32_t)0xF << 4)
48 #define AOS_GPIO_OUTPUT_CFG_DEFAULT     ((uint32_t)0x0 << 4)
49 #define AOS_GPIO_OUTPUT_CFG_PP          ((uint32_t)0x1 << 4)
50 #define AOS_GPIO_OUTPUT_CFG_ODNP        ((uint32_t)0x2 << 4)
51 #define AOS_GPIO_OUTPUT_CFG_ODPU        ((uint32_t)0x3 << 4)
52 
53 #define AOS_GPIO_OCFG_MASK              AOS_GPIO_OUTPUT_CFG_MASK
54 #define AOS_GPIO_OCFG_DEFAULT           AOS_GPIO_OUTPUT_CFG_DEFAULT
55 #define AOS_GPIO_OCFG_PP                AOS_GPIO_OUTPUT_CFG_PP
56 #define AOS_GPIO_OCFG_ODNP              AOS_GPIO_OUTPUT_CFG_ODNP
57 #define AOS_GPIO_OCFG_ODPU              AOS_GPIO_OUTPUT_CFG_ODPU
58 
59 #define AOS_GPIO_OUTPUT_INIT_MASK       ((uint32_t)0x1 << 8)
60 #define AOS_GPIO_OUTPUT_INIT_LOW        ((uint32_t)0x0 << 8)
61 #define AOS_GPIO_OUTPUT_INIT_HIGH       ((uint32_t)0x1 << 8)
62 
63 typedef void (*aos_gpio_irq_handler_t)(int polarity, void *arg);
64 
65 #endif /* AOS_GPIO_H */
66