1/* 2 * Copyright 2017, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11*/ 12 13#pragma once 14 15#include <stdint.h> 16#include <stdbool.h> 17#include <utils/util.h> 18 19#define GPIO_PADDR_BASE 0x6000D000 20#define TK1_GPIO_PADDR (GPIO_PADDR_BASE) 21#define TK1_GPIO_SIZE (0x1000) 22 23enum gpio_pad_mode { 24 GPIO_MODE = 0, 25 SFIO_MODE 26}; 27 28enum gpio_pin { 29 GPIO_PA0 = 0, /* pin 0 */ 30 GPIO_PA1, 31 GPIO_PA2, 32 GPIO_PA3, 33 GPIO_PA4, 34 GPIO_PA5, 35 GPIO_PA6, 36 GPIO_PA7, 37 GPIO_PB0 = 8, /* pin 8 */ 38 GPIO_PB1, 39 GPIO_PB2, 40 GPIO_PB3, 41 GPIO_PB4, 42 GPIO_PB5, 43 GPIO_PB6, 44 GPIO_PB7, 45 GPIO_PC0, /* pin 16 */ 46 GPIO_PC1, 47 GPIO_PC2, 48 GPIO_PC3, 49 GPIO_PC4, 50 GPIO_PC5, 51 GPIO_PC6, 52 GPIO_PC7, 53 GPIO_PD0, /* pin 24 */ 54 GPIO_PD1, 55 GPIO_PD2, 56 GPIO_PD3, 57 GPIO_PD4, 58 GPIO_PD5, 59 GPIO_PD6, 60 GPIO_PD7, 61 GPIO_PE0, /* pin 32 */ 62 GPIO_PE1, 63 GPIO_PE2, 64 GPIO_PE3, 65 GPIO_PE4, 66 GPIO_PE5, 67 GPIO_PE6, 68 GPIO_PE7, 69 GPIO_PF0, /* pin 40 */ 70 GPIO_PF1, 71 GPIO_PF2, 72 GPIO_PF3, 73 GPIO_PF4, 74 GPIO_PF5, 75 GPIO_PF6, 76 GPIO_PF7, 77 GPIO_PG0, /* pin 48 */ 78 GPIO_PG1, 79 GPIO_PG2, 80 GPIO_PG3, 81 GPIO_PG4, 82 GPIO_PG5, 83 GPIO_PG6, 84 GPIO_PG7, 85 GPIO_PH0, /* pin 56 */ 86 GPIO_PH1, 87 GPIO_PH2, 88 GPIO_PH3, 89 GPIO_PH4, 90 GPIO_PH5, 91 GPIO_PH6, 92 GPIO_PH7, 93 GPIO_PI0, /* pin 64 */ 94 GPIO_PI1, 95 GPIO_PI2, 96 GPIO_PI3, 97 GPIO_PI4, 98 GPIO_PI5, 99 GPIO_PI6, 100 GPIO_PI7, 101 GPIO_PJ0, /* pin 72 */ 102 GPIO_PJ1, 103 GPIO_PJ2, 104 GPIO_PJ3, 105 GPIO_PJ4, 106 GPIO_PJ5, 107 GPIO_PJ6, 108 GPIO_PJ7, 109 GPIO_PK0, /* pin 80 */ 110 GPIO_PK1, 111 GPIO_PK2, 112 GPIO_PK3, 113 GPIO_PK4, 114 GPIO_PK5, 115 GPIO_PK6, 116 GPIO_PK7, 117 GPIO_PL0, /* pin 88 */ 118 GPIO_PL1, 119 GPIO_PL2, 120 GPIO_PL3, 121 GPIO_PL4, 122 GPIO_PL5, 123 GPIO_PL6, 124 GPIO_PL7, 125 GPIO_PM0, /* pin 96 */ 126 GPIO_PM1, 127 GPIO_PM2, 128 GPIO_PM3, 129 GPIO_PM4, 130 GPIO_PM5, 131 GPIO_PM6, 132 GPIO_PM7, 133 GPIO_PN0, /* pin 104 */ 134 GPIO_PN1, 135 GPIO_PN2, 136 GPIO_PN3, 137 GPIO_PN4, 138 GPIO_PN5, 139 GPIO_PN6, 140 GPIO_PN7, 141 GPIO_PO0, /* pin 112 */ 142 GPIO_PO1, 143 GPIO_PO2, 144 GPIO_PO3, 145 GPIO_PO4, 146 GPIO_PO5, 147 GPIO_PO6, 148 GPIO_PO7, 149 GPIO_PP0, /* pin 120 */ 150 GPIO_PP1, 151 GPIO_PP2, 152 GPIO_PP3, 153 GPIO_PP4, 154 GPIO_PP5, 155 GPIO_PP6, 156 GPIO_PP7, 157 GPIO_PQ0, /* pin 128 */ 158 GPIO_PQ1, 159 GPIO_PQ2, 160 GPIO_PQ3, 161 GPIO_PQ4, 162 GPIO_PQ5, 163 GPIO_PQ6, 164 GPIO_PQ7, 165 GPIO_PR0, /* pin 136 */ 166 GPIO_PR1, 167 GPIO_PR2, 168 GPIO_PR3, 169 GPIO_PR4, 170 GPIO_PR5, 171 GPIO_PR6, 172 GPIO_PR7, 173 GPIO_PS0, /* pin 144 */ 174 GPIO_PS1, 175 GPIO_PS2, 176 GPIO_PS3, 177 GPIO_PS4, 178 GPIO_PS5, 179 GPIO_PS6, 180 GPIO_PS7, 181 GPIO_PT0, /* pin 152 */ 182 GPIO_PT1, 183 GPIO_PT2, 184 GPIO_PT3, 185 GPIO_PT4, 186 GPIO_PT5, 187 GPIO_PT6, 188 GPIO_PT7, 189 GPIO_PU0, /* pin 160 */ 190 GPIO_PU1, 191 GPIO_PU2, 192 GPIO_PU3, 193 GPIO_PU4, 194 GPIO_PU5, 195 GPIO_PU6, 196 GPIO_PU7, 197 GPIO_PV0, /* pin 168 */ 198 GPIO_PV1, 199 GPIO_PV2, 200 GPIO_PV3, 201 GPIO_PV4, 202 GPIO_PV5, 203 GPIO_PV6, 204 GPIO_PV7, 205 GPIO_PW0, /* pin 176 */ 206 GPIO_PW1, 207 GPIO_PW2, 208 GPIO_PW3, 209 GPIO_PW4, 210 GPIO_PW5, 211 GPIO_PW6, 212 GPIO_PW7, 213 GPIO_PX0, /* pin 184 */ 214 GPIO_PX1, 215 GPIO_PX2, 216 GPIO_PX3, 217 GPIO_PX4, 218 GPIO_PX5, 219 GPIO_PX6, 220 GPIO_PX7, 221 GPIO_PY0, /* pin 192 */ 222 GPIO_PY1, 223 GPIO_PY2, 224 GPIO_PY3, 225 GPIO_PY4, 226 GPIO_PY5, 227 GPIO_PY6, 228 GPIO_PY7, 229 GPIO_PZ0, /* pin 200 */ 230 GPIO_PZ1, 231 GPIO_PZ2, 232 GPIO_PZ3, 233 GPIO_PZ4, 234 GPIO_PZ5, 235 GPIO_PZ6, 236 GPIO_PZ7, 237 GPIO_PAA0, /* pin 208 */ 238 GPIO_PAA1, 239 GPIO_PAA2, 240 GPIO_PAA3, 241 GPIO_PAA4, 242 GPIO_PAA5, 243 GPIO_PAA6, 244 GPIO_PAA7, 245 GPIO_PBB0, /* pin 216 */ 246 GPIO_PBB1, 247 GPIO_PBB2, 248 GPIO_PBB3, 249 GPIO_PBB4, 250 GPIO_PBB5, 251 GPIO_PBB6, 252 GPIO_PBB7, 253 GPIO_PCC0, /* pin 224 */ 254 GPIO_PCC1, 255 GPIO_PCC2, 256 GPIO_PCC3, 257 GPIO_PCC4, 258 GPIO_PCC5, 259 GPIO_PCC6, 260 GPIO_PCC7, 261 GPIO_PDD0, /* pin 232 */ 262 GPIO_PDD1, 263 GPIO_PDD2, 264 GPIO_PDD3, 265 GPIO_PDD4, 266 GPIO_PDD5, 267 GPIO_PDD6, 268 GPIO_PDD7, 269 GPIO_PEE0, /* pin 240 */ 270 GPIO_PEE1, 271 GPIO_PEE2, 272 GPIO_PEE3, 273 GPIO_PEE4, 274 GPIO_PEE5, 275 GPIO_PEE6, 276 GPIO_PEE7, 277 GPIO_PFF0, /* pin 248 */ 278 GPIO_PFF1, 279 GPIO_PFF2, 280 GPIO_PFF3, 281 GPIO_PFF4, 282 GPIO_PFF5, 283 GPIO_PFF6, 284 GPIO_PFF7, /* pin 255 */ 285 GPIOPORT_NONE, 286}; 287 288#define MAX_GPIO_ID GPIO_PFF7 289 290/** Statically initializes a mux_sys for the TK1 SoC. 291 * 292 * Usually a GPIO driver would depend on a mux driver, but on the TK1, it is the 293 * other way around: curiously, on the TK1, the mux driver depends on the GPIO 294 * driver because the GPIO controller sets the pin mode (SFIO vs MPIO mode), 295 * and the GPIO controller also has the "lock" and "enable" bits for the pins. 296 */ 297int gpio_init(volatile void *vaddr, gpio_sys_t *gpio_sys); 298