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