yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame] | 1 | /* |
| 2 | * linux/arch/arm/mach-zx297520v2/gpio.c |
| 3 | * |
| 4 | * Copyright (C) 2013 ZTE-TSP |
| 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by |
| 8 | * the Free Software Foundation; either version 2 of the License, or |
| 9 | * (at your option) any later version. |
| 10 | */ |
| 11 | |
| 12 | #include <linux/clk.h> |
| 13 | #include <linux/errno.h> |
| 14 | #include <linux/interrupt.h> |
| 15 | #include <linux/irq.h> |
| 16 | #include <linux/debugfs.h> |
| 17 | #include <linux/seq_file.h> |
| 18 | #include <linux/kernel.h> |
| 19 | #include <linux/list.h> |
| 20 | #include <linux/module.h> |
| 21 | #include <linux/io.h> |
| 22 | |
| 23 | #include <mach/iomap.h> |
| 24 | #include <mach/gpio.h> |
| 25 | #include <mach/gpio_def.h> |
| 26 | #include <mach/pcu.h> |
| 27 | #include <mach/debug.h> |
| 28 | #include <mach/spinlock.h> |
| 29 | |
| 30 | #define GPIO0_NUM 128 |
| 31 | |
| 32 | #define gpio_write_reg_lock(a, v) \ |
| 33 | do { \ |
| 34 | reg_spin_lock(); \ |
| 35 | zx_write_reg(a, v); \ |
| 36 | reg_spin_unlock(); \ |
| 37 | } while (0) |
| 38 | |
| 39 | #define gpio_write_bits_lock(a, o, w, v) \ |
| 40 | do { \ |
| 41 | reg_spin_lock(); \ |
| 42 | zx_write_bits(a, o, w, v); \ |
| 43 | reg_spin_unlock(); \ |
| 44 | } while (0) |
| 45 | |
| 46 | /* |
| 47 | * select gpio multiplex function |
| 48 | * gpio: gpio number |
| 49 | * func: PIN_FUNC_SEL_AON/PIN_FUNC_SEL_PD |
| 50 | * according with register defination |
| 51 | */ |
| 52 | int zx29_gpio_function_sel(unsigned int gpio, gpio_func_id func ) |
| 53 | { |
| 54 | int i ; |
| 55 | unsigned int func_sel = (func>>12)&0x1; |
| 56 | unsigned int value = func&0x3ff; |
| 57 | |
| 58 | if((gpio != (func>>24))||(gpio > ZX29_GPIO_MAX)) |
| 59 | return -EINVAL; |
| 60 | |
| 61 | for(i=0; i<ARRAY_SIZE(pin_info); i++) |
| 62 | { |
| 63 | if(pin_info[i].gpio == gpio) |
| 64 | break; |
| 65 | |
| 66 | /* no support */ |
| 67 | if(pin_info[i].gpio == ZX29_GPIO_NULL) |
| 68 | return -ENODATA; |
| 69 | } |
| 70 | |
| 71 | /* no support */ |
| 72 | if(i >= ARRAY_SIZE(pin_info)) |
| 73 | return -ENODATA; |
| 74 | |
| 75 | /* top_func_sel */ |
| 76 | if(pin_info[i].top_func_sel_reg.reg_addr) |
| 77 | gpio_write_bits_lock(pin_info[i].top_func_sel_reg.reg_addr, |
| 78 | pin_info[i].top_func_sel_reg.reg_bit_offset, |
| 79 | pin_info[i].top_func_sel_reg.reg_bit_size, |
| 80 | func_sel); |
| 81 | |
| 82 | if(PIN_FUNC_SEL_AON == func_sel) |
| 83 | { |
| 84 | if(pin_info[i].aon_func_sel_reg.reg_addr) |
| 85 | gpio_write_bits_lock(pin_info[i].aon_func_sel_reg.reg_addr, |
| 86 | pin_info[i].aon_func_sel_reg.reg_bit_offset, |
| 87 | pin_info[i].aon_func_sel_reg.reg_bit_size, |
| 88 | value); |
| 89 | } |
| 90 | else |
| 91 | { |
| 92 | if(pin_info[i].pd_func_sel_reg.reg_addr) |
| 93 | gpio_write_bits_lock(pin_info[i].pd_func_sel_reg.reg_addr, |
| 94 | pin_info[i].pd_func_sel_reg.reg_bit_offset, |
| 95 | pin_info[i].pd_func_sel_reg.reg_bit_size, |
| 96 | value); |
| 97 | } |
| 98 | |
| 99 | return 0; |
| 100 | } |
| 101 | |
| 102 | static unsigned int get_gpio_by_name(const char *pin_name) |
| 103 | { |
| 104 | int i ; |
| 105 | |
| 106 | for(i=0; i<ARRAY_SIZE(pin_info); i++) |
| 107 | { |
| 108 | if (!strcmp(pin_name, pin_info[i].pin_name)) |
| 109 | { |
| 110 | return pin_info[i].gpio; |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | return ZX29_GPIO_NULL; |
| 115 | } |
| 116 | |
| 117 | int zx29_func_sel_by_name(const char *pin_name, gpio_func_id func) |
| 118 | { |
| 119 | unsigned int gpio = get_gpio_by_name(pin_name); |
| 120 | |
| 121 | if(gpio == ZX29_GPIO_NULL) |
| 122 | { |
| 123 | pr_err("zx29_func_sel_by_name(%s) failed. \n", pin_name); |
| 124 | return -ENODATA; |
| 125 | } |
| 126 | |
| 127 | return zx29_gpio_function_sel(gpio, func); |
| 128 | } |
| 129 | |
| 130 | int zx29_gpio_function_sel_get(unsigned int gpio) |
| 131 | { |
| 132 | int i=0; |
| 133 | unsigned int func_sel = 0; |
| 134 | unsigned int top_func = 0; |
| 135 | unsigned int value = 0; |
| 136 | unsigned int temp=0,mask=0; |
| 137 | |
| 138 | if(gpio > ZX29_GPIO_MAX) |
| 139 | return -EINVAL; |
| 140 | |
| 141 | for(i=0; i<ARRAY_SIZE(pin_info); i++) |
| 142 | { |
| 143 | if(pin_info[i].gpio == gpio) |
| 144 | break; |
| 145 | /* not support*/ |
| 146 | if(pin_info[i].gpio == ZX29_GPIO_NULL) |
| 147 | return -ENODATA; |
| 148 | } |
| 149 | |
| 150 | /* no support */ |
| 151 | if(i >= ARRAY_SIZE(pin_info)) |
| 152 | return -ENODATA; |
| 153 | |
| 154 | /*top_func*/ |
| 155 | if(pin_info[i].top_func_sel_reg.reg_addr) |
| 156 | { |
| 157 | temp=zx_read_reg(pin_info[i].top_func_sel_reg.reg_addr); |
| 158 | top_func = temp>>(pin_info[i].top_func_sel_reg.reg_bit_offset); |
| 159 | |
| 160 | top_func = top_func&0x01; |
| 161 | } |
| 162 | else |
| 163 | { |
| 164 | top_func = PIN_FUNC_SEL_AON; |
| 165 | } |
| 166 | |
| 167 | /*aon_func*/ |
| 168 | if(top_func == PIN_FUNC_SEL_AON) |
| 169 | { |
| 170 | if(pin_info[i].aon_func_sel_reg.reg_addr) |
| 171 | { |
| 172 | temp = zx_read_reg(pin_info[i].aon_func_sel_reg.reg_addr); |
| 173 | value = temp>>(pin_info[i].aon_func_sel_reg.reg_bit_offset); |
| 174 | mask =(1<<pin_info[i].aon_func_sel_reg.reg_bit_size)-1; |
| 175 | value = value&mask; |
| 176 | } |
| 177 | else |
| 178 | value = 0; |
| 179 | } |
| 180 | else/*pd_func*/ |
| 181 | { |
| 182 | if(pin_info[i].pd_func_sel_reg.reg_addr) |
| 183 | { |
| 184 | temp = zx_read_reg(pin_info[i].pd_func_sel_reg.reg_addr); |
| 185 | value = temp>>(pin_info[i].pd_func_sel_reg.reg_bit_offset); |
| 186 | mask =(1<<pin_info[i].pd_func_sel_reg.reg_bit_size)-1; |
| 187 | value =value&mask; |
| 188 | } |
| 189 | else |
| 190 | value = 0; |
| 191 | } |
| 192 | |
| 193 | func_sel = (gpio<<24)|(top_func<<12)|value; |
| 194 | |
| 195 | return func_sel; |
| 196 | } |
| 197 | |
| 198 | |
| 199 | /* |
| 200 | * set gpio resistance of pull-up and pull-down status |
| 201 | *@ gpio: gpio pin number |
| 202 | *@ config: IO_CFG enum |
| 203 | *@ |
| 204 | *@ This function is only for config pu/pd, if select driver capacity, |
| 205 | *@ use another interface. |
| 206 | */ |
| 207 | void zx29_gpio_pd_pu_set(unsigned int gpio, unsigned int config) |
| 208 | { |
| 209 | int i ; |
| 210 | int pull_val = 0; |
| 211 | |
| 212 | if(gpio > ZX29_GPIO_MAX) |
| 213 | return; |
| 214 | |
| 215 | for(i=0; i<ARRAY_SIZE(pin_info); i++) |
| 216 | { |
| 217 | if(pin_info[i].gpio == gpio) |
| 218 | break; |
| 219 | |
| 220 | /* no support */ |
| 221 | if(pin_info[i].gpio == ZX29_GPIO_NULL) |
| 222 | return; |
| 223 | } |
| 224 | |
| 225 | /* no support */ |
| 226 | if(i >= ARRAY_SIZE(pin_info)) |
| 227 | return; |
| 228 | |
| 229 | if(pin_info[i].io_cfg_reg.reg_addr == NULL) |
| 230 | return; |
| 231 | |
| 232 | if(pin_info[i].io_cfg_reg.reg_bit_size == 8) |
| 233 | { |
| 234 | /*bit6:PD bit5:PU*/ |
| 235 | pull_val = zx_read_reg(pin_info[i].io_cfg_reg.reg_addr); |
| 236 | |
| 237 | pull_val = pull_val>>(pin_info[i].io_cfg_reg.reg_bit_offset); |
| 238 | |
| 239 | pull_val &= 0xff; /*reg_bit_size 8*/ |
| 240 | pull_val &= ~(0x3<<5); /*bit5 bit6 clear*/ |
| 241 | if(config == IO_CFG_PULL_DOWN) |
| 242 | pull_val |= (0x1<<6); /*bit6 PD*/ |
| 243 | else if(config == IO_CFG_PULL_UP) |
| 244 | pull_val |= (0x1<<5); /*bit5 PU*/ |
| 245 | |
| 246 | } |
| 247 | else |
| 248 | { |
| 249 | /*bit0:PE bit1:PS*/ |
| 250 | pull_val = config; |
| 251 | } |
| 252 | |
| 253 | gpio_write_bits_lock(pin_info[i].io_cfg_reg.reg_addr, |
| 254 | pin_info[i].io_cfg_reg.reg_bit_offset, |
| 255 | pin_info[i].io_cfg_reg.reg_bit_size, |
| 256 | pull_val); |
| 257 | |
| 258 | } |
| 259 | EXPORT_SYMBOL(zx29_gpio_pd_pu_set); |
| 260 | |
| 261 | /**************************************************************** |
| 262 | ** gpio function |
| 263 | ** |
| 264 | ***************************************************************/ |
| 265 | /* |
| 266 | * set direction |
| 267 | * |
| 268 | * 0:input 1:out |
| 269 | */ |
| 270 | void zx29_gpio_set_direction(unsigned int gpio, unsigned int dir) |
| 271 | { |
| 272 | unsigned int temp=0; |
| 273 | void __iomem *regaddr = NULL; |
| 274 | |
| 275 | if(ZX29_GPIO_24 == gpio) |
| 276 | { |
| 277 | if(GPIO_IN == dir) |
| 278 | dir = GPIO_OUT; |
| 279 | else |
| 280 | dir = GPIO_IN; |
| 281 | } |
| 282 | |
| 283 | if(gpio < GPIO0_NUM) |
| 284 | regaddr = GPIOPDD_REG0(gpio); |
| 285 | else |
| 286 | { |
| 287 | gpio -= GPIO0_NUM; |
| 288 | regaddr = GPIOPDD_REG1(gpio); |
| 289 | } |
| 290 | |
| 291 | temp = zx_read_reg(regaddr); |
| 292 | if(dir == GPIO_IN) |
| 293 | temp &= ~(1 << (gpio % 16)); |
| 294 | else |
| 295 | temp |= (1 << (gpio % 16)); |
| 296 | |
| 297 | gpio_write_reg_lock(regaddr, temp); |
| 298 | } |
| 299 | |
| 300 | /* |
| 301 | * get direction |
| 302 | * |
| 303 | * 0:input 1:out |
| 304 | */ |
| 305 | unsigned int zx29_gpio_get_direction(unsigned int gpio) |
| 306 | { |
| 307 | unsigned int temp=0; |
| 308 | |
| 309 | if(gpio <GPIO0_NUM) |
| 310 | temp = zx_read_reg(GPIOPDD_REG0(gpio)); |
| 311 | else |
| 312 | { |
| 313 | gpio -= GPIO0_NUM; |
| 314 | temp = zx_read_reg(GPIOPDD_REG1(gpio)); |
| 315 | } |
| 316 | |
| 317 | temp = temp >> (gpio % 16); |
| 318 | temp &= 0x1; |
| 319 | |
| 320 | return temp; |
| 321 | } |
| 322 | |
| 323 | /* |
| 324 | * gpio out |
| 325 | * |
| 326 | * 0:low 1:high |
| 327 | */ |
| 328 | void zx29_gpio_output_data(unsigned int gpio, unsigned int value) |
| 329 | { |
| 330 | unsigned int temp=0; |
| 331 | |
| 332 | if(value == GPIO_LOW) |
| 333 | { |
| 334 | if(gpio <GPIO0_NUM) |
| 335 | { |
| 336 | temp = zx_read_reg(SET0_SEND_REG0(gpio)); |
| 337 | temp |= (1 << (gpio % 16)); |
| 338 | gpio_write_reg_lock(SET0_SEND_REG0(gpio), temp); |
| 339 | } |
| 340 | else{ |
| 341 | gpio -= GPIO0_NUM; |
| 342 | temp = zx_read_reg(SET0_SEND_REG1(gpio)); |
| 343 | temp |= (1 << (gpio % 16)); |
| 344 | gpio_write_reg_lock(SET0_SEND_REG1(gpio), temp); |
| 345 | } |
| 346 | }else if(value == GPIO_HIGH) |
| 347 | { |
| 348 | if(gpio <GPIO0_NUM) |
| 349 | { |
| 350 | temp = zx_read_reg(SET1_SEND_REG0(gpio)); |
| 351 | temp |= (1 << (gpio % 16)); |
| 352 | gpio_write_reg_lock(SET1_SEND_REG0(gpio), temp); |
| 353 | } |
| 354 | else{ |
| 355 | gpio -= GPIO0_NUM; |
| 356 | temp = zx_read_reg(SET1_SEND_REG1(gpio)); |
| 357 | temp |= (1 << (gpio % 16)); |
| 358 | gpio_write_reg_lock(SET1_SEND_REG1(gpio), temp); |
| 359 | } |
| 360 | } else { |
| 361 | pr_warn("gpio%d output %X ignored.", gpio, value); |
| 362 | } |
| 363 | } |
| 364 | |
| 365 | /* |
| 366 | * gpio input |
| 367 | * |
| 368 | * 0:low 1:high |
| 369 | */ |
| 370 | unsigned int zx29_gpio_input_data(unsigned int gpio) |
| 371 | { |
| 372 | unsigned int value=0; |
| 373 | |
| 374 | if(gpio < GPIO0_NUM) |
| 375 | value = zx_read_reg(RECV_REG0(gpio)); |
| 376 | else |
| 377 | { |
| 378 | gpio -= GPIO0_NUM; |
| 379 | value = zx_read_reg(RECV_REG1(gpio)); |
| 380 | } |
| 381 | |
| 382 | return (value >> (gpio % 16)) & 0x1; |
| 383 | } |
| 384 | |
| 385 | /* |
| 386 | * set extern int source type |
| 387 | * |
| 388 | * gpio: gpio number |
| 389 | * |
| 390 | * type: IRQ_TYPE_LEVEL_HIGH |
| 391 | * IRQ_TYPE_LEVEL_LOW |
| 392 | * IRQ_TYPE_EDGE_RISING |
| 393 | * IRQ_TYPE_EDGE_FALLING |
| 394 | */ |
| 395 | void zx29_gpio_set_inttype(unsigned int gpio, unsigned int type) |
| 396 | { |
| 397 | unsigned int index = 0; |
| 398 | |
| 399 | /***************************** |
| 400 | ** gpio47~~54 ---- ext0~~7 |
| 401 | ** gpio119~~126 ---- ext8~~15 |
| 402 | ** gpio127~~132 ---- ext8~~13 |
| 403 | *****************************/ |
| 404 | if ((gpio>=47) && (gpio<=54)) |
| 405 | index = gpio - 47 + (unsigned int)PCU_EX0_INT; |
| 406 | else if ((gpio>=119) && (gpio<=126)) |
| 407 | index = gpio - 119 + (unsigned int)PCU_EX8_INT; |
| 408 | else if ((gpio>=127) && (gpio<=132)) |
| 409 | index = gpio - 127 + (unsigned int)PCU_EX8_INT; |
| 410 | else |
| 411 | return; |
| 412 | |
| 413 | pcu_int_set_type((PCU_INT_INDEX)index,type); |
| 414 | } |
| 415 | EXPORT_SYMBOL(zx29_gpio_set_inttype); |
| 416 | |
| 417 | int zx29_gpio2irq(unsigned int gpio) |
| 418 | { |
| 419 | if ((gpio>=47) && (gpio<=54)) |
| 420 | return(gpio - 47 + EX0_INT); |
| 421 | else if ((gpio>=119) && (gpio<=126)) |
| 422 | return (gpio - 119 + EX8_INT); |
| 423 | else if ((gpio>=127) && (gpio<=132)) |
| 424 | return (gpio - 127 + EX8_INT); |
| 425 | |
| 426 | return -EINVAL; |
| 427 | } |
| 428 | |
| 429 | /********************************************************************************************* |
| 430 | *** jtag0: sd1_cmd/sd1_data0/sd1_data1/sd1_data2/sd1_data3 |
| 431 | *** pd_func: 0: sd1 1:ps_jtag 2:phy_jtag 3:ap_jtag aon_func: 0:gpio 1:m0_jtag |
| 432 | *** |
| 433 | *** jtag1: jtag_tck/jtag_tdi/jtag_tdo/jtag_tms/jtag_trst |
| 434 | *** pd_func: 0: ps_jtag 1:phy_jtag 2:ap_jtag aon_func: 0:m0_jtag 1:gpio |
| 435 | *** |
| 436 | *** jtag2: kbc_0/kbc_2/kbr_0/kbr_1/kbr_2 |
| 437 | *** pd_func: 0: ps_jtag 1:phy_jtag 2:ap_jtag aon_func: 0:key 1:gpio 2:ext_int 3:m0_jtag |
| 438 | *********************************************************************************************** |
| 439 | */ |
| 440 | void jtag_config(unsigned int jtag_num, unsigned int function) |
| 441 | { |
| 442 | //unsigned int tmp = 0; |
| 443 | |
| 444 | return ; |
| 445 | } |
| 446 | |
| 447 | unsigned int zx29_gpio_outputdata_get(unsigned int gpio) |
| 448 | { |
| 449 | unsigned int temp=0; |
| 450 | if(gpio <GPIO0_NUM) |
| 451 | temp = zx_read_reg(SEND_REG0(gpio)); |
| 452 | else |
| 453 | { |
| 454 | gpio -=GPIO0_NUM; |
| 455 | temp = zx_read_reg(SEND_REG1(gpio)); |
| 456 | } |
| 457 | return (temp>>(gpio%16))&0x01; |
| 458 | } |
| 459 | |
| 460 | #ifdef CONFIG_DEBUG_FS |
| 461 | |
| 462 | #include <linux/debugfs.h> |
| 463 | #include <linux/seq_file.h> |
| 464 | #include <asm/uaccess.h> |
| 465 | #include <asm/string.h> |
| 466 | |
| 467 | static char temp_buf[50],temp[30]; |
| 468 | unsigned char buf = 0; |
| 469 | |
| 470 | static struct gpio_status{ |
| 471 | char *function; |
| 472 | char *direction; |
| 473 | char *level; |
| 474 | }gpio_status_get; |
| 475 | |
| 476 | struct zx29_gpio_def |
| 477 | { |
| 478 | char * gpio_name; |
| 479 | unsigned int gpio_num; |
| 480 | unsigned int gpio_func; |
| 481 | }; |
| 482 | |
| 483 | static struct zx29_gpio_def gpio_def[] = |
| 484 | { |
| 485 | {"GPIO0_GPIO0", 0, GPIO0_GPIO0}, |
| 486 | {"GPIO0_NAND_WE", 0, GPIO0_NAND_WE}, |
| 487 | {"GPIO0_LCD_OE_N", 0, GPIO0_LCD_OE_N}, |
| 488 | {"GPIO1_GPIO1", 1, GPIO1_GPIO1}, |
| 489 | {"GPIO1_NAND_CS0", 1, GPIO1_NAND_CS0}, |
| 490 | {"GPIO1_LCD_CS_N", 1, GPIO1_LCD_CS_N}, |
| 491 | {"GPIO2_GPIO2", 2, GPIO2_GPIO2}, |
| 492 | {"GPIO2_NAND_READY", 2, GPIO2_NAND_READY}, |
| 493 | {"GPIO2_LCD_RS", 2, GPIO2_LCD_RS}, |
| 494 | {"GPIO3_GPIO3", 3, GPIO3_GPIO3}, |
| 495 | {"GPIO3_NAND_CLE", 3, GPIO3_NAND_CLE}, |
| 496 | {"GPIO3_LCD_RESET_N", 3, GPIO3_LCD_RESET_N}, |
| 497 | {"GPIO4_GPIO4", 4, GPIO4_GPIO4}, |
| 498 | {"GPIO4_NAND_ALE", 4, GPIO4_NAND_ALE}, |
| 499 | {"GPIO4_LCD_WE_N", 4, GPIO4_LCD_WE_N}, |
| 500 | {"GPIO5_GPIO5", 5, GPIO5_GPIO5}, |
| 501 | {"GPIO5_NAND_RE", 5, GPIO5_NAND_RE}, |
| 502 | {"GPIO5_LCD_TE", 5, GPIO5_LCD_TE}, |
| 503 | {"GPIO6_GPIO6", 6, GPIO6_GPIO6}, |
| 504 | {"GPIO6_NAND_WRITE_PROTECT",6,GPIO6_NAND_WRITE_PROTECT}, |
| 505 | {"GPIO6_LCD_D0", 6, GPIO6_LCD_D0}, |
| 506 | {"GPIO7_GPIO7", 7, GPIO7_GPIO7}, |
| 507 | {"GPIO7_NAND_DATA0", 7, GPIO7_NAND_DATA0}, |
| 508 | {"GPIO7_LCD_D1", 7, GPIO7_LCD_D1}, |
| 509 | {"GPIO8_GPIO8", 8, GPIO8_GPIO8}, |
| 510 | {"GPIO8_NAND_DATA1", 8, GPIO8_NAND_DATA1}, |
| 511 | {"GPIO8_LCD_D2", 8, GPIO8_LCD_D2}, |
| 512 | {"GPIO9_GPIO9", 9, GPIO9_GPIO9}, |
| 513 | {"GPIO9_NAND_DATA2", 9, GPIO9_NAND_DATA2}, |
| 514 | {"GPIO9_LCD_D3", 9, GPIO9_LCD_D3}, |
| 515 | {"GPIO10_GPIO10", 10, GPIO10_GPIO10}, |
| 516 | {"GPIO10_NAND_DATA3", 10, GPIO10_NAND_DATA3}, |
| 517 | {"GPIO10_LCD_D4", 10, GPIO10_LCD_D4}, |
| 518 | {"GPIO11_GPIO11", 11, GPIO11_GPIO11}, |
| 519 | {"GPIO11_NAND_DATA4", 11, GPIO11_NAND_DATA4}, |
| 520 | {"GPIO11_LCD_D5", 11, GPIO11_LCD_D5}, |
| 521 | {"GPIO12_GPIO12", 12, GPIO12_GPIO12}, |
| 522 | {"GPIO12_NAND_DATA5", 12, GPIO12_NAND_DATA5}, |
| 523 | {"GPIO12_LCD_D6", 12, GPIO12_LCD_D6}, |
| 524 | {"GPIO13_GPIO13", 13, GPIO13_GPIO13}, |
| 525 | {"GPIO13_NAND_DATA6", 13, GPIO13_NAND_DATA6}, |
| 526 | {"GPIO13_LCD_D7", 13, GPIO13_LCD_D7}, |
| 527 | {"GPIO14_GPIO14", 14, GPIO14_GPIO14}, |
| 528 | {"GPIO14_NAND_DATA7", 14, GPIO14_NAND_DATA7}, |
| 529 | {"GPIO14_LCD_D8", 14, GPIO14_LCD_D8}, |
| 530 | {"GPIO15_GPIO15", 15, GPIO15_GPIO15}, |
| 531 | {"GPIO15_CLK_OUT0", 15, GPIO15_CLK_OUT0}, |
| 532 | {"GPIO16_GPIO16", 16, GPIO16_GPIO16}, |
| 533 | {"GPIO16_CLK_OUT1", 16, GPIO16_CLK_OUT1}, |
| 534 | {"GPIO17_GPIO17", 17, GPIO17_GPIO17}, |
| 535 | {"GPIO17_CLK_OUT2", 17, GPIO17_CLK_OUT2}, |
| 536 | {"GPIO17_TEST_CLK_OUT", 17, GPIO17_TEST_CLK_OUT}, |
| 537 | {"GPIO17_TDM_MCLK_OUT", 17, GPIO17_TDM_MCLK_OUT}, |
| 538 | {"GPIO17_I2S0_MCLK_OUT", 17, GPIO17_I2S0_MCLK_OUT}, |
| 539 | {"GPIO17_I2S1_MCLK_OUT", 17, GPIO17_I2S1_MCLK_OUT}, |
| 540 | {"GPIO18_GPIO18", 18, GPIO18_GPIO18}, |
| 541 | {"GPIO18_CLK_32K_OUT", 18, GPIO18_CLK_32K_OUT}, |
| 542 | {"GPIO19_GPIO19", 19, GPIO19_GPIO19}, |
| 543 | {"GPIO19_RMII_CLK_I", 19, GPIO19_RMII_CLK_I}, |
| 544 | {"GPIO20_GPIO20", 20, GPIO20_GPIO20}, |
| 545 | {"GPIO20_RMII_CLK_O", 20, GPIO20_RMII_CLK_O}, |
| 546 | {"GPIO21_CLK_REQ0", 21, GPIO21_CLK_REQ0}, |
| 547 | {"GPIO21_GPIO21", 21, GPIO21_GPIO21}, |
| 548 | {"GPIO22_CLK_REQ1", 22, GPIO22_CLK_REQ1}, |
| 549 | {"GPIO22_GPIO22", 22, GPIO22_GPIO22}, |
| 550 | {"GPIO23_PWRCTRL", 23, GPIO23_PWRCTRL}, |
| 551 | {"GPIO23_GPIO23", 23, GPIO23_GPIO23}, |
| 552 | {"GPIO24_GPIO24", 24, GPIO24_GPIO24}, |
| 553 | {"GPIO25_GPIO25", 25, GPIO25_GPIO25}, |
| 554 | {"GPIO25_SSP0_CS", 25, GPIO25_SSP0_CS}, |
| 555 | {"GPIO26_GPIO26", 26, GPIO26_GPIO26}, |
| 556 | {"GPIO26_SSP0_CLK", 26, GPIO26_SSP0_CLK}, |
| 557 | {"GPIO27_SSP0_RXD", 27, GPIO27_SSP0_RXD}, |
| 558 | {"GPIO27_GPIO27", 27, GPIO27_GPIO27}, |
| 559 | {"GPIO28_GPIO28", 28, GPIO28_GPIO28}, |
| 560 | {"GPIO28_SSP0_TXD", 28, GPIO28_SSP0_TXD}, |
| 561 | |
| 562 | {"GPIO29_UART0_RXD", 29, GPIO29_UART0_RXD}, |
| 563 | {"GPIO29_GPIO29", 29, GPIO29_GPIO29}, |
| 564 | {"GPIO29_UART0_TXD", 29, GPIO29_UART0_TXD}, |
| 565 | {"GPIO29_FRAME_SYNC", 29, GPIO29_FRAME_SYNC}, |
| 566 | {"GPIO29_TEST_PIN10", 29, GPIO29_TEST_PIN10}, |
| 567 | |
| 568 | {"GPIO30_UART0_TXD", 30, GPIO30_UART0_TXD}, |
| 569 | {"GPIO30_GPIO30", 30, GPIO30_GPIO30}, |
| 570 | {"GPIO30_UART0_RXD", 30, GPIO30_UART0_RXD}, |
| 571 | {"GPIO30_LTE_PRE_TX", 30, GPIO30_LTE_PRE_TX}, |
| 572 | {"GPIO30_TEST_PIN11", 30, GPIO30_TEST_PIN11}, |
| 573 | |
| 574 | {"GPIO31_GPIO31", 31, GPIO31_GPIO31}, |
| 575 | {"GPIO31_UART0_CTS", 31, GPIO31_UART0_CTS}, |
| 576 | {"GPIO31_LTE_TPU_OUT3", 31, GPIO31_LTE_TPU_OUT3}, |
| 577 | {"GPIO31_UART1_TXD", 31, GPIO31_UART1_TXD}, |
| 578 | {"GPIO31_TEST_PIN12", 31, GPIO31_TEST_PIN12}, |
| 579 | |
| 580 | {"GPIO32_GPIO32", 32, GPIO32_GPIO32}, |
| 581 | {"GPIO32_UART0_RTS", 32, GPIO32_UART0_RTS}, |
| 582 | {"GPIO32_LTE_TPU_OUT4", 32, GPIO32_LTE_TPU_OUT4}, |
| 583 | {"GPIO32_UART1_RXD", 32, GPIO32_UART1_RXD}, |
| 584 | |
| 585 | {"GPIO33_GPIO33", 33, GPIO33_GPIO33}, |
| 586 | {"GPIO33_UART1_RXD", 33, GPIO33_UART1_RXD}, |
| 587 | {"GPIO33_UART2_TXD", 33, GPIO33_UART2_TXD}, |
| 588 | {"GPIO33_UART2_RXD", 33, GPIO33_UART2_RXD}, |
| 589 | |
| 590 | {"GPIO34_UART1_TXD", 34, GPIO34_UART1_TXD}, |
| 591 | {"GPIO34_GPIO34", 34, GPIO34_GPIO34}, |
| 592 | {"GPIO34_UART2_RXD", 34, GPIO34_UART2_RXD}, |
| 593 | {"GPIO34_UART2_TXD", 34, GPIO34_UART2_TXD}, |
| 594 | |
| 595 | {"GPIO35_GPIO35", 35, GPIO35_GPIO35}, |
| 596 | {"GPIO35_I2S0_WS", 35, GPIO35_I2S0_WS}, |
| 597 | {"GPIO35_TEST_PIN0", 35, GPIO35_TEST_PIN0}, |
| 598 | {"GPIO35_TDM_FS", 35, GPIO35_TDM_FS}, |
| 599 | |
| 600 | {"GPIO36_GPIO36", 36, GPIO36_GPIO36}, |
| 601 | {"GPIO36_I2S0_CLK", 36, GPIO36_I2S0_CLK}, |
| 602 | {"GPIO36_TEST_PIN1", 36, GPIO36_TEST_PIN1}, |
| 603 | {"GPIO36_TDM_CLK", 36, GPIO36_TDM_CLK}, |
| 604 | |
| 605 | {"GPIO37_GPIO37", 37, GPIO37_GPIO37}, |
| 606 | {"GPIO37_I2S0_DIN", 37, GPIO37_I2S0_DIN}, |
| 607 | {"GPIO37_TEST_PIN2", 37, GPIO37_TEST_PIN2}, |
| 608 | {"GPIO37_TDM_DATA_IN", 37, GPIO37_TDM_DATA_IN}, |
| 609 | |
| 610 | {"GPIO38_GPIO38", 38, GPIO38_GPIO38}, |
| 611 | {"GPIO38_I2S0_DOUT", 38, GPIO38_I2S0_DOUT}, |
| 612 | {"GPIO38_TEST_PIN3", 38, GPIO38_TEST_PIN3}, |
| 613 | {"GPIO38_TDM_DATA_OUT", 38, GPIO38_TDM_DATA_OUT}, |
| 614 | |
| 615 | {"GPIO39_GPIO39", 39, GPIO39_GPIO39}, |
| 616 | {"GPIO39_I2S1_WS", 39, GPIO39_I2S1_WS}, |
| 617 | {"GPIO39_TEST_PIN4", 39, GPIO39_TEST_PIN4}, |
| 618 | {"GPIO39_TDM_FS", 39, GPIO39_TDM_FS}, |
| 619 | {"GPIO39_PWM0", 39, GPIO39_PWM0}, |
| 620 | {"GPIO40_GPIO40", 40, GPIO40_GPIO40}, |
| 621 | {"GPIO40_I2S1_CLK", 40, GPIO40_I2S1_CLK}, |
| 622 | {"GPIO40_TEST_PIN5", 40, GPIO40_TEST_PIN5}, |
| 623 | {"GPIO40_TDM_CLK", 40, GPIO40_TDM_CLK}, |
| 624 | {"GPIO40_PWM1", 40, GPIO40_PWM1}, |
| 625 | {"GPIO41_GPIO41", 41, GPIO41_GPIO41}, |
| 626 | {"GPIO41_I2S1_DIN", 41, GPIO41_I2S1_DIN}, |
| 627 | {"GPIO41_TEST_PIN6", 41, GPIO41_TEST_PIN6}, |
| 628 | {"GPIO41_TDM_DATA_IN", 41, GPIO41_TDM_DATA_IN}, |
| 629 | |
| 630 | {"GPIO42_GPIO42", 42, GPIO42_GPIO42}, |
| 631 | {"GPIO42_I2S1_DOUT", 42, GPIO42_I2S1_DOUT}, |
| 632 | {"GPIO42_TEST_PIN7", 42, GPIO42_TEST_PIN7}, |
| 633 | {"GPIO42_TDM_DATA_OUT", 42, GPIO42_TDM_DATA_OUT}, |
| 634 | |
| 635 | {"GPIO43_GPIO43", 43, GPIO43_GPIO43}, |
| 636 | {"GPIO43_SCL0", 43, GPIO43_SCL0}, |
| 637 | |
| 638 | {"GPIO44_GPIO44", 44, GPIO44_GPIO44}, |
| 639 | {"GPIO44_SDA0", 44, GPIO44_SDA0}, |
| 640 | |
| 641 | {"GPIO45_GPIO45", 45, GPIO45_GPIO45}, |
| 642 | {"GPIO45_SCL1", 45, GPIO45_SCL1}, |
| 643 | |
| 644 | {"GPIO46_GPIO46", 46, GPIO46_GPIO46}, |
| 645 | {"GPIO46_SDA1", 46, GPIO46_SDA1}, |
| 646 | |
| 647 | {"GPIO47_GPIO47", 47, GPIO47_GPIO47}, |
| 648 | {"GPIO47_EXT_INT0", 47, GPIO47_EXT_INT0}, |
| 649 | |
| 650 | {"GPIO48_GPIO48", 48, GPIO48_GPIO48}, |
| 651 | {"GPIO48_EXT_INT1", 48, GPIO48_EXT_INT1}, |
| 652 | {"GPIO49_GPIO49", 49, GPIO49_GPIO49}, |
| 653 | {"GPIO49_EXT_INT2", 49, GPIO49_EXT_INT2}, |
| 654 | {"GPIO50_GPIO50", 50, GPIO50_GPIO50}, |
| 655 | {"GPIO50_EXT_INT3", 50, GPIO50_EXT_INT3}, |
| 656 | {"GPIO50_TEST_PIN8", 50, GPIO50_TEST_PIN8}, |
| 657 | {"GPIO51_GPIO51", 51, GPIO51_GPIO51}, |
| 658 | {"GPIO51_EXT_INT4", 51, GPIO51_EXT_INT4}, |
| 659 | {"GPIO51_TEST_PIN9", 51, GPIO51_TEST_PIN9}, |
| 660 | {"GPIO52_GPIO52", 52, GPIO52_GPIO52}, |
| 661 | {"GPIO52_EXT_INT5", 52, GPIO52_EXT_INT5}, |
| 662 | {"GPIO52_TEST_PIN13", 52, GPIO52_TEST_PIN13}, |
| 663 | |
| 664 | {"GPIO53_GPIO53", 53, GPIO53_GPIO53}, |
| 665 | {"GPIO53_EXT_INT6", 53, GPIO53_EXT_INT6}, |
| 666 | {"GPIO53_TEST_PIN14", 53, GPIO53_TEST_PIN14}, |
| 667 | {"GPIO54_GPIO54", 54, GPIO54_GPIO54}, |
| 668 | {"GPIO54_EXT_INT7", 54, GPIO54_EXT_INT7}, |
| 669 | {"GPIO54_TEST_PIN15", 54, GPIO54_TEST_PIN15}, |
| 670 | {"GPIO55_GPIO55", 55, GPIO55_GPIO55}, |
| 671 | {"GPIO55_RMII_TXEN", 55, GPIO55_RMII_TXEN}, |
| 672 | |
| 673 | {"GPIO56_GPIO56", 56, GPIO56_GPIO56}, |
| 674 | {"GPIO56_RMII_RXEN", 56, GPIO56_RMII_RXEN}, |
| 675 | |
| 676 | {"GPIO57_GPIO57", 57, GPIO57_GPIO57}, |
| 677 | {"GPIO57_RMII_RXD0", 57, GPIO57_RMII_RXD0}, |
| 678 | |
| 679 | {"GPIO58_GPIO58", 58, GPIO58_GPIO58}, |
| 680 | {"GPIO58_RMII_RXD1", 58, GPIO58_RMII_RXD1}, |
| 681 | {"GPIO59_GPIO59", 59, GPIO59_GPIO59}, |
| 682 | {"GPIO59_RMII_TXD0", 59, GPIO59_RMII_TXD0}, |
| 683 | |
| 684 | {"GPIO60_GPIO60", 60, GPIO60_GPIO60}, |
| 685 | {"GPIO60_RMII_TXD1", 60, GPIO60_RMII_TXD1}, |
| 686 | |
| 687 | {"GPIO61_GPIO61", 61, GPIO61_GPIO61}, |
| 688 | {"GPIO61_MDC_SCLK", 61, GPIO61_MDC_SCLK}, |
| 689 | |
| 690 | {"GPIO62_GPIO62", 62, GPIO62_GPIO62}, |
| 691 | {"GPIO62_MDC_SDIO", 62, GPIO62_MDC_SDIO}, |
| 692 | |
| 693 | {"GPIO63_GPIO63", 63, GPIO63_GPIO63}, |
| 694 | {"GPIO63_PHY_RST", 63, GPIO63_PHY_RST}, |
| 695 | |
| 696 | {"GPIO64_GPIO64", 64, GPIO64_GPIO64}, |
| 697 | {"GPIO64_PHY_INT", 64, GPIO64_PHY_INT}, |
| 698 | |
| 699 | {"GPIO65_GPIO65", 65, GPIO65_GPIO65}, |
| 700 | |
| 701 | {"GPIO66_GPIO66", 66, GPIO66_GPIO66}, |
| 702 | {"GPIO66_KEY_COL2", 66, GPIO66_KEY_COL2}, |
| 703 | {"GPIO66_EMMC_CLK", 66, GPIO66_EMMC_CLK}, |
| 704 | |
| 705 | {"GPIO67_GPIO67", 67, GPIO67_GPIO67}, |
| 706 | {"GPIO67_KEY_COL3", 67, GPIO67_KEY_COL3}, |
| 707 | {"GPIO67_EMMC_CMD", 67, GPIO67_EMMC_CMD}, |
| 708 | |
| 709 | {"GPIO68_GPIO68", 68, GPIO68_GPIO68}, |
| 710 | {"GPIO68_KEY_COL4", 68, GPIO68_KEY_COL4}, |
| 711 | {"GPIO68_EMMC_DATA0", 68, GPIO68_EMMC_DATA0}, |
| 712 | |
| 713 | {"GPIO69_GPIO69", 69, GPIO69_GPIO69}, |
| 714 | {"GPIO69_KEY_ROW2", 69, GPIO69_KEY_ROW2}, |
| 715 | {"GPIO69_EMMC_DATA1", 69, GPIO69_EMMC_DATA1}, |
| 716 | |
| 717 | {"GPIO70_GPIO70", 70, GPIO70_GPIO70}, |
| 718 | {"GPIO70_KEY_ROW3", 70, GPIO70_KEY_ROW3}, |
| 719 | {"GPIO70_EMMC_DATA2", 70, GPIO70_EMMC_DATA2}, |
| 720 | |
| 721 | {"GPIO71_GPIO71", 71, GPIO71_GPIO71}, |
| 722 | {"GPIO71_KEY_ROW4", 71, GPIO71_KEY_ROW4}, |
| 723 | {"GPIO71_EMMC_DATA3", 71, GPIO71_EMMC_DATA3}, |
| 724 | {"GPIO72_GPIO72", 72, GPIO72_GPIO72}, |
| 725 | {"GPIO72_SD1_HOST_SDCLK", 72, GPIO72_SD1_HOST_SDCLK}, |
| 726 | |
| 727 | {"GPIO73_GPIO73", 73, GPIO73_GPIO73}, |
| 728 | {"GPIO73_M_JTAG_TDO", 73, GPIO73_M_JTAG_TDO}, |
| 729 | {"GPIO73_SD1_CMD", 73, GPIO73_SD1_CMD}, |
| 730 | {"GPIO73_PS_JTAG_TDO", 73, GPIO73_PS_JTAG_TDO}, |
| 731 | {"GPIO73_PHY_JTAG_TDO", 73, GPIO73_PHY_JTAG_TDO}, |
| 732 | {"GPIO73_AP_JTAG_TDO", 73, GPIO73_AP_JTAG_TDO}, |
| 733 | |
| 734 | {"GPIO74_GPIO74", 74, GPIO74_GPIO74}, |
| 735 | {"GPIO74_M_JTAG_TCK", 74, GPIO74_M_JTAG_TCK}, |
| 736 | {"GPIO74_SD1_DATA0", 74, GPIO74_SD1_DATA0}, |
| 737 | {"GPIO74_PS_JTAG_TCK", 74, GPIO74_PS_JTAG_TCK}, |
| 738 | {"GPIO74_PHY_JTAG_TCK", 74, GPIO74_PHY_JTAG_TCK}, |
| 739 | {"GPIO74_AP_JTAG_TCK", 74, GPIO74_AP_JTAG_TCK}, |
| 740 | |
| 741 | {"GPIO75_GPIO75", 75, GPIO75_GPIO75}, |
| 742 | {"GPIO75_M_JTAG_TRST", 75, GPIO75_M_JTAG_TRST}, |
| 743 | {"GPIO75_SD1_DATA1", 75, GPIO75_SD1_DATA1}, |
| 744 | {"GPIO75_PS_JTAG_TRST", 75, GPIO75_PS_JTAG_TRST}, |
| 745 | {"GPIO75_PHY_JTAG_TRST", 75, GPIO75_PHY_JTAG_TRST}, |
| 746 | {"GPIO75_AP_JTAG_TRST", 75, GPIO75_AP_JTAG_TRST}, |
| 747 | |
| 748 | {"GPIO76_GPIO76", 76, GPIO76_GPIO76}, |
| 749 | {"GPIO76_M_JTAG_TMS", 76, GPIO76_M_JTAG_TMS}, |
| 750 | {"GPIO76_SD1_DATA2", 76, GPIO76_SD1_DATA2}, |
| 751 | {"GPIO76_PS_JTAG_TMS", 76, GPIO76_PS_JTAG_TMS}, |
| 752 | {"GPIO76_PHY_JTAG_TMS", 76, GPIO76_PHY_JTAG_TMS}, |
| 753 | {"GPIO76_AP_JTAG_TMS", 76, GPIO76_AP_JTAG_TMS}, |
| 754 | |
| 755 | {"GPIO77_GPIO77", 77, GPIO77_GPIO77}, |
| 756 | {"GPIO77_M_JTAG_TDI", 77, GPIO77_M_JTAG_TDI}, |
| 757 | {"GPIO77_SD1_DATA2", 77, GPIO77_SD1_DATA3}, |
| 758 | {"GPIO77_PS_JTAG_TDI", 77, GPIO77_PS_JTAG_TDI}, |
| 759 | {"GPIO77_PHY_JTAG_TDI", 77, GPIO77_PHY_JTAG_TDI}, |
| 760 | {"GPIO77_AP_JTAG_TDI", 77, GPIO77_AP_JTAG_TDI}, |
| 761 | |
| 762 | {"GPIO78_GPIO78", 78, GPIO78_GPIO78}, |
| 763 | {"GPIO78_M_JTAG_TCK", 78, GPIO78_M_JTAG_TCK}, |
| 764 | {"GPIO78_PS_JTAG_TCK", 78, GPIO78_PS_JTAG_TCK}, |
| 765 | {"GPIO78_PHY_JTAG_TCK", 78, GPIO78_PHY_JTAG_TCK}, |
| 766 | {"GPIO78_AP_JTAG_TCK", 78, GPIO78_AP_JTAG_TCK}, |
| 767 | |
| 768 | {"GPIO79_GPIO79", 79, GPIO79_GPIO79}, |
| 769 | {"GPIO79_M_JTAG_TDI", 79, GPIO79_M_JTAG_TDI}, |
| 770 | {"GPIO79_PS_JTAG_TDI", 79, GPIO79_PS_JTAG_TDI}, |
| 771 | {"GPIO79_PHY_JTAG_TDI", 79, GPIO79_PHY_JTAG_TDI}, |
| 772 | {"GPIO79_AP_JTAG_TDI", 79, GPIO79_AP_JTAG_TDI}, |
| 773 | |
| 774 | {"GPIO80_GPIO80", 80, GPIO80_GPIO80}, |
| 775 | {"GPIO80_M_JTAG_TDO", 80, GPIO80_M_JTAG_TDO}, |
| 776 | {"GPIO80_PS_JTAG_TDO", 80, GPIO80_PS_JTAG_TDO}, |
| 777 | {"GPIO80_PHY_JTAG_TDO", 80, GPIO80_PHY_JTAG_TDO}, |
| 778 | {"GPIO80_AP_JTAG_TDO", 80, GPIO80_AP_JTAG_TDO}, |
| 779 | |
| 780 | {"GPIO81_GPIO81", 81, GPIO81_GPIO81}, |
| 781 | {"GPIO81_M_JTAG_TMS", 81, GPIO81_M_JTAG_TMS}, |
| 782 | {"GPIO81_PS_JTAG_TMS", 81, GPIO81_PS_JTAG_TMS}, |
| 783 | {"GPIO81_PHY_JTAG_TMS", 81, GPIO81_PHY_JTAG_TMS}, |
| 784 | {"GPIO81_AP_JTAG_TMS", 81, GPIO81_AP_JTAG_TMS}, |
| 785 | |
| 786 | {"GPIO82_GPIO82", 82, GPIO82_GPIO82}, |
| 787 | {"GPIO82_M_JTAG_TRST", 82, GPIO82_M_JTAG_TRST}, |
| 788 | {"GPIO82_PS_JTAG_TRST", 82, GPIO82_PS_JTAG_TRST}, |
| 789 | {"GPIO82_PHY_JTAG_TRST", 82, GPIO82_PHY_JTAG_TRST}, |
| 790 | {"GPIO82_AP_JTAG_TRST", 82, GPIO82_AP_JTAG_TRST}, |
| 791 | |
| 792 | {"GPIO83_GPIO83", 83, GPIO83_GPIO83}, |
| 793 | {"GPIO83_KEY_COL0", 83, GPIO83_KEY_COL0}, |
| 794 | {"GPIO84_GPIO84", 84, GPIO84_GPIO84}, |
| 795 | {"GPIO84_KEY_COL1", 84, GPIO84_KEY_COL1}, |
| 796 | {"GPIO85_GPIO85", 85, GPIO85_GPIO85}, |
| 797 | {"GPIO85_KEY_ROW0", 85, GPIO85_KEY_ROW0}, |
| 798 | {"GPIO86_GPIO86", 86, GPIO86_GPIO86}, |
| 799 | {"GPIO86_KEY_ROW1", 86, GPIO86_KEY_ROW1}, |
| 800 | {"GPIO87_GPIO87", 87, GPIO87_GPIO87}, |
| 801 | {"GPIO87_CAM_SPI_CS", 87, GPIO87_CAM_SPI_CS}, |
| 802 | {"GPIO88_GPIO88", 88, GPIO88_GPIO88}, |
| 803 | {"GPIO88_CAM_SPI_CLK", 88, GPIO88_CAM_SPI_CLK}, |
| 804 | {"GPIO89_GPIO89", 89, GPIO89_GPIO89}, |
| 805 | {"GPIO89_CAM_SPI_DATA0", 89, GPIO89_CAM_SPI_DATA0}, |
| 806 | {"GPIO90_GPIO90", 90, GPIO90_GPIO90}, |
| 807 | {"GPIO90_CAM_SPI_DATA1", 90, GPIO90_CAM_SPI_DATA1}, |
| 808 | {"GPIO90_CAM_SPI_TXD", 90, GPIO90_CAM_SPI_TXD}, |
| 809 | {"GPIO91_GPIO91", 91, GPIO91_GPIO91}, |
| 810 | {"GPIO91_CAM_SPI_DATA2", 91, GPIO91_CAM_SPI_DATA2}, |
| 811 | {"GPIO92_GPIO92", 92, GPIO92_GPIO92}, |
| 812 | {"GPIO92_CAM_SPI_DATA3", 92, GPIO92_CAM_SPI_DATA3}, |
| 813 | {"GPIO93_GPIO93", 93, GPIO93_GPIO93}, |
| 814 | {"GPIO93_SPIFC_CS", 93, GPIO93_SPIFC_CS}, |
| 815 | {"GPIO94_GPIO94", 94, GPIO94_GPIO94}, |
| 816 | {"GPIO94_SPIFC_CLK", 94, GPIO94_SPIFC_CLK}, |
| 817 | {"GPIO95_GPIO95", 95, GPIO95_GPIO95}, |
| 818 | {"GPIO95_SPIFC_DATA0", 95, GPIO95_SPIFC_DATA0}, |
| 819 | {"GPIO96_GPIO96", 96, GPIO96_GPIO96}, |
| 820 | {"GPIO96_SPIFC_DATA1", 96, GPIO96_SPIFC_DATA1}, |
| 821 | {"GPIO97_GPIO97", 97, GPIO97_GPIO97}, |
| 822 | {"GPIO97_SPIFC_DATA2", 97, GPIO97_SPIFC_DATA2}, |
| 823 | {"GPIO98_GPIO98", 98, GPIO98_GPIO98}, |
| 824 | {"GPIO98_SPIFC_DATA3", 98, GPIO98_SPIFC_DATA3}, |
| 825 | {"GPIO99_GPIO99", 99, GPIO99_GPIO99}, |
| 826 | |
| 827 | {"GPIO100_GPIO100", 100, GPIO100_GPIO100}, |
| 828 | {"GPIO100_RF_SPI_STR", 100, GPIO100_RF_SPI_STR}, |
| 829 | {"GPIO101_GPIO101", 101, GPIO101_GPIO101}, |
| 830 | {"GPIO101_RF_SPI_CLK", 101, GPIO101_RF_SPI_CLK}, |
| 831 | {"GPIO102_GPIO102", 102, GPIO102_GPIO102}, |
| 832 | {"GPIO102_RF_SPI_DATA", 102, GPIO102_RF_SPI_DATA}, |
| 833 | {"GPIO103_GPIO103", 103, GPIO103_GPIO103}, |
| 834 | |
| 835 | {"GPIO104_GPIO104", 104, GPIO104_GPIO104}, |
| 836 | {"GPIO104_TD_G0_GPIO2", 104, GPIO104_TD_G0_GPIO2}, |
| 837 | {"GPIO104_LTE_TPU_OUT0_5", 104, GPIO104_LTE_TPU_OUT0_5}, |
| 838 | {"GPIO104_W_G0_GPIO2", 104, GPIO104_W_G0_GPIO2}, |
| 839 | {"GPIO104_GSM_T_OUT_O_0", 104, GPIO104_GSM_T_OUT_O_0}, |
| 840 | |
| 841 | {"GPIO105_GPIO105", 105, GPIO105_GPIO105}, |
| 842 | {"GPIO105_TD_G0_GPIO3", 105, GPIO105_TD_G0_GPIO3}, |
| 843 | {"GPIO105_LTE_TPU_OUT0_6", 105, GPIO105_LTE_TPU_OUT0_6}, |
| 844 | {"GPIO105_W_G0_GPIO3", 105, GPIO105_W_G0_GPIO3}, |
| 845 | {"GPIO105_GSM_T_OUT_O_1", 105, GPIO105_GSM_T_OUT_O_1}, |
| 846 | |
| 847 | {"GPIO106_GPIO106", 106, GPIO106_GPIO106}, |
| 848 | {"GPIO106_TD_G0_GPIO4", 106, GPIO106_TD_G0_GPIO4}, |
| 849 | {"GPIO106_LTE_TPU_OUT0_7", 106, GPIO106_LTE_TPU_OUT0_7}, |
| 850 | {"GPIO106_W_G0_GPIO4", 106, GPIO106_W_G0_GPIO4}, |
| 851 | {"GPIO106_GSM_T_OUT_O_2", 106, GPIO106_GSM_T_OUT_O_2}, |
| 852 | |
| 853 | {"GPIO107_GPIO107", 107, GPIO107_GPIO107}, |
| 854 | {"GPIO107_TD_G0_GPIO5", 107, GPIO107_TD_G0_GPIO5}, |
| 855 | {"GPIO107_LTE_TPU_OUT0_8", 107, GPIO107_LTE_TPU_OUT0_8}, |
| 856 | {"GPIO107_W_G0_GPIO5", 107, GPIO107_W_G0_GPIO5}, |
| 857 | {"GPIO107_GSM_T_OUT_O_3", 107, GPIO107_GSM_T_OUT_O_3}, |
| 858 | |
| 859 | {"GPIO108_GPIO108", 108, GPIO108_GPIO108}, |
| 860 | {"GPIO108_TD_G0_GPIO6", 108, GPIO108_TD_G0_GPIO6}, |
| 861 | {"GPIO108_LTE_TPU_OUT0_9", 108, GPIO108_LTE_TPU_OUT0_9}, |
| 862 | {"GPIO108_W_G0_GPIO6", 108, GPIO108_W_G0_GPIO6}, |
| 863 | {"GPIO108_GSM_T_OUT_O_4", 108, GPIO108_GSM_T_OUT_O_4}, |
| 864 | |
| 865 | {"GPIO109_GPIO109", 109, GPIO109_GPIO109}, |
| 866 | {"GPIO109_TD_G0_GPIO7", 109, GPIO109_TD_G0_GPIO7}, |
| 867 | {"GPIO109_LTE_TPU_OUT0_10", 109, GPIO109_LTE_TPU_OUT0_10}, |
| 868 | {"GPIO109_W_G0_GPIO7", 109, GPIO109_W_G0_GPIO7}, |
| 869 | {"GPIO109_GSM_T_OUT_O_5", 109, GPIO109_GSM_T_OUT_O_5}, |
| 870 | |
| 871 | {"GPIO110_GPIO110", 110, GPIO110_GPIO110}, |
| 872 | {"GPIO110_TD_G0_GPIO8", 110, GPIO110_TD_G0_GPIO8}, |
| 873 | {"GPIO110_LTE_TPU_OUT0_11", 110, GPIO110_LTE_TPU_OUT0_11}, |
| 874 | {"GPIO110_W_G0_GPIO8", 110, GPIO110_W_G0_GPIO8}, |
| 875 | {"GPIO110_GSM_T_OUT_O_6", 110, GPIO110_GSM_T_OUT_O_6}, |
| 876 | |
| 877 | {"GPIO111_GPIO111", 111, GPIO111_GPIO111}, |
| 878 | {"GPIO111_TD_G0_GPIO9", 111, GPIO111_TD_G0_GPIO9}, |
| 879 | {"GPIO111_LTE_TPU_OUT0_12", 111, GPIO111_LTE_TPU_OUT0_12}, |
| 880 | {"GPIO111_W_G0_GPIO9", 111, GPIO111_W_G0_GPIO9}, |
| 881 | {"GPIO111_GSM_T_OUT_O_7", 111, GPIO111_GSM_T_OUT_O_7}, |
| 882 | |
| 883 | {"GPIO112_GPIO112", 112, GPIO112_GPIO112}, |
| 884 | {"GPIO112_MIPI_RFFE_CLK0", 112, GPIO112_MIPI_RFFE_CLK0}, |
| 885 | {"GPIO112_TD_G0_GPIO10", 112, GPIO112_TD_G0_GPIO10}, |
| 886 | {"GPIO112_LTE_TPU_OUT0_13", 112, GPIO112_LTE_TPU_OUT0_13}, |
| 887 | {"GPIO112_W_G0_GPIO10", 112, GPIO112_W_G0_GPIO10}, |
| 888 | {"GPIO112_GSM_T_OUT_O_8", 112, GPIO112_GSM_T_OUT_O_8}, |
| 889 | |
| 890 | {"GPIO113_GPIO113", 113, GPIO113_GPIO113}, |
| 891 | {"GPIO113_MIPI_RFFE_DATA0", 113, GPIO113_MIPI_RFFE_DATA0}, |
| 892 | {"GPIO113_TD_G0_GPIO11", 113, GPIO113_TD_G0_GPIO11}, |
| 893 | {"GPIO113_LTE_TPU_OUT0_14", 113, GPIO113_LTE_TPU_OUT0_14}, |
| 894 | {"GPIO113_W_G0_GPIO11", 113, GPIO113_W_G0_GPIO11}, |
| 895 | {"GPIO113_GSM_T_OUT_O_9", 113, GPIO113_GSM_T_OUT_O_9}, |
| 896 | |
| 897 | {"GPIO114_GPIO114", 114, GPIO114_GPIO114}, |
| 898 | {"GPIO114_MIPI_RFFE_CLK1", 114, GPIO114_MIPI_RFFE_CLK1}, |
| 899 | {"GPIO114_ABB_I2C_SEL_PINMUX", 114, GPIO114_ABB_I2C_SEL_PINMUX}, |
| 900 | {"GPIO114_TD_G0_GPIO12", 114, GPIO114_TD_G0_GPIO12}, |
| 901 | {"GPIO114_LTE_TPU_OUT0_15", 114, GPIO114_LTE_TPU_OUT0_15}, |
| 902 | {"GPIO114_W_G0_GPIO12", 114, GPIO114_W_G0_GPIO12}, |
| 903 | {"GPIO114_GSM_T_OUT_O_10", 114, GPIO114_GSM_T_OUT_O_10}, |
| 904 | |
| 905 | {"GPIO115_GPIO115", 115, GPIO115_GPIO115}, |
| 906 | {"GPIO115_MIPI_RFFE_DATA1", 115, GPIO115_MIPI_RFFE_DATA1}, |
| 907 | {"GPIO115_ABB_I2C_SDA_PINMUX", 115, GPIO115_ABB_I2C_SDA_PINMUX}, |
| 908 | {"GPIO115_TD_G1_GPIO0", 115, GPIO115_TD_G1_GPIO0}, |
| 909 | {"GPIO115_LTE_TPU_OUT1_0", 115, GPIO115_LTE_TPU_OUT1_0}, |
| 910 | {"GPIO115_W_G1_GPIO0", 115, GPIO115_W_G1_GPIO0}, |
| 911 | {"GPIO115_GSM_T_OUT_O_11", 115, GPIO115_GSM_T_OUT_O_11}, |
| 912 | |
| 913 | {"GPIO116_GPIO116", 116, GPIO116_GPIO116}, |
| 914 | {"GPIO116_SIM_RST", 116, GPIO116_SIM_RST}, |
| 915 | {"GPIO117_GPIO117", 117, GPIO117_GPIO117}, |
| 916 | {"GPIO117_SIM_CLK", 117, GPIO117_SIM_CLK}, |
| 917 | {"GPIO118_GPIO118", 118, GPIO118_GPIO118}, |
| 918 | {"GPIO118_SIM_DATA", 118, GPIO118_SIM_DATA}, |
| 919 | {"GPIO119_GPIO119", 119, GPIO119_GPIO119}, |
| 920 | {"GPIO119_EXT_INT8", 119, GPIO119_EXT_INT8}, |
| 921 | {"GPIO119_M_JTAG_TDO", 119, GPIO119_M_JTAG_TDO}, |
| 922 | {"GPIO119_URAT0_RTS", 119, GPIO119_URAT0_RTS}, |
| 923 | {"GPIO119_PSJTAG_TDO", 119, GPIO119_PSJTAG_TDO}, |
| 924 | {"GPIO119_PHYJTAG_TDO", 119, GPIO119_PHYJTAG_TDO}, |
| 925 | {"GPIO119_APJTAG_TDO", 119, GPIO119_APJTAG_TDO}, |
| 926 | {"GPIO119_PWM0", 119, GPIO119_PWM0}, |
| 927 | |
| 928 | {"GPIO120_GPIO120", 120, GPIO120_GPIO120}, |
| 929 | {"GPIO120_EXT_INT9", 120, GPIO120_EXT_INT9}, |
| 930 | {"GPIO120_M_JTAG_TCK", 120, GPIO120_M_JTAG_TCK}, |
| 931 | {"GPIO120_UART0_CTS", 120, GPIO120_UART0_CTS}, |
| 932 | {"GPIO120_PSJTAG_TCK", 120, GPIO120_PSJTAG_TCK}, |
| 933 | {"GPIO120_PHYJTAG_TCK", 120, GPIO120_PHYJTAG_TCK}, |
| 934 | {"GPIO120_APJTAG_TCK", 120, GPIO120_APJTAG_TCK}, |
| 935 | {"GPIO120_PWM1", 120, GPIO120_PWM1}, |
| 936 | |
| 937 | {"GPIO121_GPIO121", 121, GPIO121_GPIO121}, |
| 938 | {"GPIO121_EXT_INT10", 121, GPIO121_EXT_INT10}, |
| 939 | {"GPIO121_M_JTAG_TRST", 121, GPIO121_M_JTAG_TRST}, |
| 940 | {"GPIO121_PSJTAG_TRST", 121, GPIO121_PSJTAG_TRST}, |
| 941 | {"GPIO121_PHYJTAG_TRST", 121, GPIO121_PHYJTAG_TRST}, |
| 942 | {"GPIO121_APJTAG_TRST", 121, GPIO121_APJTAG_TRST}, |
| 943 | {"GPIO121_UART2_RXD", 121, GPIO121_UART2_RXD}, |
| 944 | |
| 945 | {"GPIO122_GPIO122", 122, GPIO122_GPIO122}, |
| 946 | {"GPIO122_EXT_INT11", 122, GPIO122_EXT_INT11}, |
| 947 | {"GPIO122_M_JTAG_TMS", 122, GPIO122_M_JTAG_TMS}, |
| 948 | {"GPIO122_PSJTAG_TMS", 122, GPIO122_PSJTAG_TMS}, |
| 949 | {"GPIO122_PHYJTAG_TMS", 122, GPIO122_PHYJTAG_TMS}, |
| 950 | {"GPIO122_APJTAG_TMS", 122, GPIO122_APJTAG_TMS}, |
| 951 | {"GPIO122_UART2_TXD", 122, GPIO122_UART2_TXD}, |
| 952 | |
| 953 | {"GPIO123_GPIO123", 123, GPIO123_GPIO123}, |
| 954 | {"GPIO123_EXT_INT12", 123, GPIO123_EXT_INT12}, |
| 955 | {"GPIO123_M_JTAG_TDI", 123, GPIO123_M_JTAG_TDI}, |
| 956 | {"GPIO123_PSJTAG_TDI", 123, GPIO123_PSJTAG_TDI}, |
| 957 | {"GPIO123_PHYJTAG_TDI", 123, GPIO123_PHYJTAG_TDI}, |
| 958 | {"GPIO123_APJTAG_TDI", 123, GPIO123_APJTAG_TDI}, |
| 959 | {"GPIO123_UART2_RTS", 123, GPIO123_UART2_RTS}, |
| 960 | |
| 961 | {"GPIO124_GPIO124", 124, GPIO124_GPIO124}, |
| 962 | {"GPIO124_EXT_INT13", 124, GPIO124_EXT_INT13}, |
| 963 | {"GPIO124_UART2_CTS", 124, GPIO124_UART2_CTS}, |
| 964 | |
| 965 | {"GPIO125_GPIO125", 125, GPIO125_GPIO125}, |
| 966 | {"GPIO125_EXT_INT14", 125, GPIO125_EXT_INT14}, |
| 967 | {"GPIO125_UART1_RTS", 125, GPIO125_UART1_RTS}, |
| 968 | |
| 969 | {"GPIO126_GPIO126", 126, GPIO126_GPIO126}, |
| 970 | {"GPIO126_EXT_INT15", 126, GPIO126_EXT_INT15}, |
| 971 | {"GPIO126_KEY_COL2", 126, GPIO126_KEY_COL2}, |
| 972 | {"GPIO126_UART1_CTS", 126, GPIO126_UART1_CTS}, |
| 973 | |
| 974 | {"GPIO127_GPIO127", 127, GPIO127_GPIO127}, |
| 975 | {"GPIO127_EXT_INT8", 127, GPIO127_EXT_INT8}, |
| 976 | {"GPIO127_KEY_COL3", 127, GPIO127_KEY_COL3}, |
| 977 | |
| 978 | {"GPIO128_GPIO128", 128, GPIO128_GPIO128}, |
| 979 | {"GPIO128_EXT_INT9", 128, GPIO128_EXT_INT9}, |
| 980 | {"GPIO128_KEY_COL4", 128, GPIO128_KEY_COL4}, |
| 981 | |
| 982 | {"GPIO129_GPIO129", 129, GPIO129_GPIO129}, |
| 983 | {"GPIO129_EXT_INT10", 129, GPIO129_EXT_INT10}, |
| 984 | {"GPIO129_KEY_COL5", 129, GPIO129_KEY_COL5}, |
| 985 | |
| 986 | {"GPIO130_GPIO130", 130, GPIO130_GPIO130}, |
| 987 | {"GPIO130_EXT_INT11", 130, GPIO130_EXT_INT11}, |
| 988 | {"GPIO130_KEY_ROW2", 130, GPIO130_KEY_ROW2}, |
| 989 | |
| 990 | {"GPIO131_GPIO131", 131, GPIO131_GPIO131}, |
| 991 | {"GPIO131_EXT_INT12", 131, GPIO131_EXT_INT12}, |
| 992 | {"GPIO131_KEY_ROW3", 131, GPIO131_KEY_ROW3}, |
| 993 | |
| 994 | {"GPIO132_GPIO132", 132, GPIO132_GPIO132}, |
| 995 | {"GPIO132_EXT_INT13", 132, GPIO132_EXT_INT13}, |
| 996 | {"GPIO132_KEY_ROW4", 132, GPIO132_KEY_ROW4}, |
| 997 | |
| 998 | {"GPIO133_GPIO133", 133, GPIO133_GPIO133}, |
| 999 | {"GPIO133_SIM1_RST", 133, GPIO133_SIM1_RST}, |
| 1000 | {"GPIO133_TD_G1_GPIO1", 133, GPIO133_TD_G1_GPIO1}, |
| 1001 | {"GPIO133_LTE_TPU_OUT1_1", 133, GPIO133_LTE_TPU_OUT1_1}, |
| 1002 | {"GPIO133_W_G1_GPIO1", 133, GPIO133_W_G1_GPIO1}, |
| 1003 | {"GPIO133_GSM_T_OUT_O_12", 133, GPIO133_GSM_T_OUT_O_12}, |
| 1004 | |
| 1005 | {"GPIO134_GPIO134", 134, GPIO134_GPIO134}, |
| 1006 | {"GPIO134_SIM1_CLK", 134, GPIO134_SIM1_CLK}, |
| 1007 | {"GPIO134_TD_G1_GPIO2", 134, GPIO134_TD_G1_GPIO2}, |
| 1008 | {"GPIO134_LTE_TPU_OUT1_2", 134, GPIO134_LTE_TPU_OUT1_2}, |
| 1009 | {"GPIO134_W_G1_GPIO2", 134, GPIO134_W_G1_GPIO2}, |
| 1010 | {"GPIO134_GSM_T_OUT_O_13", 134, GPIO134_GSM_T_OUT_O_13}, |
| 1011 | |
| 1012 | {"GPIO135_GPIO135", 135, GPIO135_GPIO135}, |
| 1013 | {"GPIO135_SIM1_DATA", 135, GPIO135_SIM1_DATA}, |
| 1014 | {"GPIO135_TD_G1_GPIO3", 135, GPIO135_TD_G1_GPIO3}, |
| 1015 | {"GPIO135_LTE_TPU_OUT1_3", 135, GPIO135_LTE_TPU_OUT1_3}, |
| 1016 | {"GPIO135_W_G1_GPIO3", 135, GPIO135_W_G1_GPIO3}, |
| 1017 | {"GPIO135_GSM_T_OUT_O_14", 135, GPIO135_GSM_T_OUT_O_14}, |
| 1018 | |
| 1019 | {"GPIO FUNCTION NOT EXIST", ZX29_GPIO_NULL, ZX29_GPIO_NULL}, |
| 1020 | }; |
| 1021 | void zx29_gpio_status_get(unsigned int gpio) |
| 1022 | { |
| 1023 | int temp = 0, n = 0; |
| 1024 | |
| 1025 | temp = zx29_gpio_function_sel_get(gpio); |
| 1026 | |
| 1027 | for(n=0; n<ARRAY_SIZE(gpio_def); n++) |
| 1028 | { |
| 1029 | if(gpio_def[n].gpio_func == temp) |
| 1030 | { |
| 1031 | gpio_status_get.function = gpio_def[n].gpio_name; |
| 1032 | break; |
| 1033 | } |
| 1034 | if(gpio_def[n].gpio_num == ZX29_GPIO_NULL) |
| 1035 | { |
| 1036 | printk("GPIO%d function not exist, func[%d]\n",gpio,temp); |
| 1037 | gpio_status_get.function = gpio_def[n].gpio_name; |
| 1038 | } |
| 1039 | } |
| 1040 | |
| 1041 | temp=zx29_gpio_get_direction(gpio); |
| 1042 | |
| 1043 | if(temp==GPIO_IN) |
| 1044 | { |
| 1045 | gpio_status_get.direction = "GPIO_IN"; |
| 1046 | temp=zx29_gpio_input_data(gpio); |
| 1047 | if(temp) |
| 1048 | gpio_status_get.level = "GPIO_HIGH"; |
| 1049 | else |
| 1050 | gpio_status_get.level = "GPIO_LOW"; |
| 1051 | } |
| 1052 | else |
| 1053 | { |
| 1054 | gpio_status_get.direction = "GPIO_OUT"; |
| 1055 | temp=zx29_gpio_outputdata_get(gpio); |
| 1056 | if(temp) |
| 1057 | gpio_status_get.level = "GPIO_HIGH"; |
| 1058 | else |
| 1059 | gpio_status_get.level = "GPIO_LOW"; |
| 1060 | } |
| 1061 | } |
| 1062 | |
| 1063 | /*sectionally get gpio seting parameters in temp_buf[50] */ |
| 1064 | static void temp_buf_get(void) |
| 1065 | { |
| 1066 | unsigned char n = 0; |
| 1067 | while((temp_buf[buf] != ' ')&&(temp_buf[buf] != '#')&&(temp_buf[buf] != '\0')) |
| 1068 | { |
| 1069 | temp[n++] = temp_buf[buf++]; |
| 1070 | } |
| 1071 | temp[n] = '\0'; |
| 1072 | buf++; |
| 1073 | } |
| 1074 | |
| 1075 | /* analysis seting parameters in temp_buf[50] to get setting parameters of gpio_num,gpio_function, gpio_dir and gpio_level */ |
| 1076 | static int parse_temp_buf(char *tempbuf) |
| 1077 | { |
| 1078 | unsigned gpio_num = 0, gpio_dir = 0,gpio_level = 0; |
| 1079 | unsigned int gpio_func = 0,n = 0; |
| 1080 | unsigned char temp_k = 0, gpio_flag = 1; |
| 1081 | int ret = 0; |
| 1082 | |
| 1083 | buf = 0; |
| 1084 | /* get function setting parameters in"GPIO40_LTE_DATA_DONGLE0 OUT HIGH#"*/ |
| 1085 | temp_buf_get(); |
| 1086 | |
| 1087 | for(n=0; n<ARRAY_SIZE(gpio_def); n++) |
| 1088 | { |
| 1089 | if(!strcmp(gpio_def[n].gpio_name,temp)) |
| 1090 | { |
| 1091 | gpio_num = gpio_def[n].gpio_num; |
| 1092 | gpio_func = gpio_def[n].gpio_func; |
| 1093 | break; |
| 1094 | } |
| 1095 | if(!strcmp(gpio_def[n].gpio_name ,"GPIO FUNCTION NOT EXIST")) |
| 1096 | { |
| 1097 | printk("gpio_func INVALID INPUT\n"); |
| 1098 | return -EINVAL; |
| 1099 | } |
| 1100 | } |
| 1101 | |
| 1102 | ret = zx29_gpio_function_sel(gpio_num, gpio_func); |
| 1103 | if(ret) |
| 1104 | return ret; |
| 1105 | |
| 1106 | /*juge gpio is used as GPIO (GPIO40_GPIO40,the two strings besides the '_' are same) or multiplex function */ |
| 1107 | temp_k = (strlen(temp)-1)/2; |
| 1108 | for(n=0;n<temp_k;n++) |
| 1109 | { |
| 1110 | if(temp[n] != temp[temp_k+1+n]) |
| 1111 | { |
| 1112 | gpio_flag = 0; |
| 1113 | break; |
| 1114 | } |
| 1115 | } |
| 1116 | |
| 1117 | if(!gpio_flag) |
| 1118 | return 0; |
| 1119 | |
| 1120 | /* get direction setting parameters in"GPIO40_LTE_DATA_DONGLE0 OUT HIGH#"*/ |
| 1121 | |
| 1122 | temp_buf_get(); |
| 1123 | |
| 1124 | if(!strcmp(temp,""))/*just set GPIO function*/ |
| 1125 | return 0; |
| 1126 | else if(!strcmp(temp,"IN")) |
| 1127 | gpio_dir = GPIO_IN; |
| 1128 | else if(!strcmp(temp,"OUT")) |
| 1129 | gpio_dir = GPIO_OUT; |
| 1130 | else |
| 1131 | { |
| 1132 | printk("gpio_dir INVALID INPUT\n"); |
| 1133 | return -EINVAL; |
| 1134 | } |
| 1135 | |
| 1136 | zx29_gpio_set_direction(gpio_num,gpio_dir); |
| 1137 | |
| 1138 | if(gpio_dir == GPIO_IN) |
| 1139 | return 0; |
| 1140 | |
| 1141 | /* get level setting parameters in"GPIO40_LTE_DATA_DONGLE0 OUT HIGH#"*/ |
| 1142 | temp_buf_get(); |
| 1143 | |
| 1144 | if(!strcmp(temp,"HIGH")) |
| 1145 | gpio_level = GPIO_HIGH; |
| 1146 | else if(!strcmp(temp,"LOW")) |
| 1147 | gpio_level = GPIO_LOW; |
| 1148 | else |
| 1149 | { |
| 1150 | printk("gpio_level INVALID INPUT\n"); |
| 1151 | return -EINVAL; |
| 1152 | } |
| 1153 | |
| 1154 | zx29_gpio_output_data(gpio_num,gpio_level); |
| 1155 | |
| 1156 | return 0; |
| 1157 | } |
| 1158 | |
| 1159 | unsigned int gpio_param_valid(unsigned int num) |
| 1160 | { |
| 1161 | unsigned int n,valid = 0; |
| 1162 | |
| 1163 | for(n=0; n<ARRAY_SIZE(pin_info); n++) |
| 1164 | { if(pin_info[n].gpio == num) |
| 1165 | { |
| 1166 | valid = 1; |
| 1167 | break; |
| 1168 | } |
| 1169 | } |
| 1170 | return valid; |
| 1171 | } |
| 1172 | |
| 1173 | static int dbg_gpio_show(struct seq_file *s, void *unused) |
| 1174 | { |
| 1175 | |
| 1176 | unsigned int num; |
| 1177 | |
| 1178 | seq_printf(s,"The gpio module status:\n"); |
| 1179 | |
| 1180 | for(num = 0; num <= ZX29_GPIO_MAX; num++) |
| 1181 | { |
| 1182 | if(gpio_param_valid(num)) |
| 1183 | { |
| 1184 | zx29_gpio_status_get(num); |
| 1185 | seq_printf(s,"%-30s",gpio_status_get.function); |
| 1186 | seq_printf(s,"%-15s",gpio_status_get.direction); |
| 1187 | seq_printf(s,"%-15s\n",gpio_status_get.level); |
| 1188 | } |
| 1189 | } |
| 1190 | |
| 1191 | return 0; |
| 1192 | } |
| 1193 | |
| 1194 | ssize_t gpio_debug_write (struct file *file, const char __user *buf, size_t size, loff_t *p) |
| 1195 | { |
| 1196 | int ret; |
| 1197 | |
| 1198 | if(copy_from_user(temp_buf, buf, size)) |
| 1199 | printk("copy user failed\n"); |
| 1200 | |
| 1201 | /*parse temp_buf*/ |
| 1202 | ret=parse_temp_buf(temp_buf); |
| 1203 | |
| 1204 | if(!ret) |
| 1205 | printk("GPIO setting succeed\n"); |
| 1206 | else |
| 1207 | { |
| 1208 | printk("GPIO setting failed\n"); |
| 1209 | printk("please follow the format to input GPIO parameters :\"GPIO40_GPI40 OUT HIGH#\"\n"); |
| 1210 | } |
| 1211 | return size; |
| 1212 | } |
| 1213 | |
| 1214 | static int dbg_gpio_open(struct inode *inode, struct file *file) |
| 1215 | { |
| 1216 | return single_open(file, dbg_gpio_show, &inode->i_private); |
| 1217 | } |
| 1218 | |
| 1219 | |
| 1220 | static const struct file_operations debug_fops = { |
| 1221 | .open = dbg_gpio_open, |
| 1222 | .read = seq_read, |
| 1223 | .write = gpio_debug_write, |
| 1224 | .llseek = seq_lseek, |
| 1225 | .release = single_release, |
| 1226 | }; |
| 1227 | |
| 1228 | static void zx29_gpio_debuginit(void) |
| 1229 | { |
| 1230 | (void) debugfs_create_file("zx29_gpio", S_IRUGO, |
| 1231 | NULL, NULL, &debug_fops); |
| 1232 | } |
| 1233 | |
| 1234 | late_initcall(zx29_gpio_debuginit); |
| 1235 | |
| 1236 | #endif |
| 1237 | |
| 1238 | |