• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _SOC_QUALCOMM_COMMON_GPIO_H_
4 #define _SOC_QUALCOMM_COMMON_GPIO_H_
5 
6 #include <soc/gpio.h>
7 #include <soc/addressmap.h>
8 
9 #define GPIO_FUNC_GPIO	0
10 #define TLMM_GPIO_OFF_DELTA	0x1000
11 
12 /* GPIO TLMM INTR: Mask */
13 enum gpio_tlmm_intr_bmsk {
14 	GPIO_INTR_STATUS_MASK = 0x1,
15 	GPIO_INTR_DECT_CTL_MASK = 0x3,
16 };
17 
18 /* GPIO TLMM: Mask */
19 enum gpio_tlmm_bmsk {
20 	GPIO_BMSK = 0x1,
21 	GPIO_CFG_PULL_BMSK = 0x3,
22 	GPIO_CFG_FUNC_BMSK = 0xF,
23 	GPIO_CFG_DRV_BMSK = 0x7,
24 	GPIO_CFG_EGPIO_BMSK = 0x800,
25 };
26 
27 /* GPIO TLMM INTR: Shift */
28 enum gpio_tlmm_intr_shft {
29 	GPIO_INTR_DECT_CTL_SHFT = 2,
30 	GPIO_INTR_RAW_STATUS_EN_SHFT = 4,
31 };
32 
33 /* GPIO TLMM: Shift */
34 enum gpio_tlmm_shft {
35 	GPIO_CFG_PULL_SHFT = 0,
36 	GPIO_CFG_FUNC_SHFT = 2,
37 	GPIO_CFG_DRV_SHFT = 6,
38 	GPIO_CFG_OE_SHFT = 9,
39 	GPIO_CFG_EGPIO_SHFT = 1,
40 };
41 
42 /* GPIO IO: Shift */
43 enum gpio_io_shft {
44 	GPIO_IO_IN_SHFT,
45 	GPIO_IO_OUT_SHFT,
46 };
47 
48 /* GPIO INTR STATUS */
49 enum gpio_irq_status {
50 	GPIO_INTR_STATUS_DISABLE,
51 	GPIO_INTR_STATUS_ENABLE,
52 };
53 
54 /* GPIO TLMM: Direction */
55 enum gpio_direction {
56 	GPIO_INPUT,
57 	GPIO_OUTPUT,
58 };
59 
60 /* GPIO TLMM: Pullup/Pulldown */
61 enum gpio_pull {
62 	GPIO_NO_PULL,
63 	GPIO_PULL_DOWN,
64 	GPIO_KEEPER,
65 	GPIO_PULL_UP,
66 };
67 
68 /* GPIO TLMM: Drive Strength */
69 enum gpio_drv_str {
70 	GPIO_2MA,
71 	GPIO_4MA,
72 	GPIO_6MA,
73 	GPIO_8MA,
74 	GPIO_10MA,
75 	GPIO_12MA,
76 	GPIO_14MA,
77 	GPIO_16MA,
78 };
79 
80 enum gpio_irq_type {
81 	IRQ_TYPE_LEVEL,
82 	IRQ_TYPE_RISING_EDGE,
83 	IRQ_TYPE_FALLING_EDGE,
84 	IRQ_TYPE_DUAL_EDGE,
85 };
86 
87 typedef struct {
88 	u32 addr;
89 } gpio_t;
90 
91 struct tlmm_gpio {
92 	uint32_t cfg;
93 	uint32_t in_out;
94 	uint32_t intr_cfg;
95 	uint32_t intr_status;
96 };
97 
98 #define GPIO(num) ((gpio_t){.addr = GPIO##num##_ADDR})
99 
100 void gpio_configure(gpio_t gpio, uint32_t func, uint32_t pull,
101 				uint32_t drive_str, uint32_t enable);
102 void gpio_input_irq(gpio_t gpio, enum gpio_irq_type type, uint32_t pull);
103 int gpio_irq_status(gpio_t gpio);
104 
105 #endif /* _SOC_QUALCOMM_COMMON_GPIO_H_ */
106