xref: /netbsd-src/sys/arch/arm/sunxi/sun6i_a31_gpio.c (revision 943dba72971d4fddfcb0d1e5d52f98054f3a3304)
1*943dba72Sbouyer /* $NetBSD: sun6i_a31_gpio.c,v 1.3 2018/04/03 16:01:25 bouyer Exp $ */
249f361a5Sjmcneill 
349f361a5Sjmcneill /*-
449f361a5Sjmcneill  * Copyright (c) 2016 Emmanuel Vadot <manu@freebsd.org>
549f361a5Sjmcneill  * All rights reserved.
649f361a5Sjmcneill  *
749f361a5Sjmcneill  * Redistribution and use in source and binary forms, with or without
849f361a5Sjmcneill  * modification, are permitted provided that the following conditions
949f361a5Sjmcneill  * are met:
1049f361a5Sjmcneill  * 1. Redistributions of source code must retain the above copyright
1149f361a5Sjmcneill  *    notice, this list of conditions and the following disclaimer.
1249f361a5Sjmcneill  * 2. Redistributions in binary form must reproduce the above copyright
1349f361a5Sjmcneill  *    notice, this list of conditions and the following disclaimer in the
1449f361a5Sjmcneill  *    documentation and/or other materials provided with the distribution.
1549f361a5Sjmcneill  *
1649f361a5Sjmcneill  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1749f361a5Sjmcneill  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1849f361a5Sjmcneill  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1949f361a5Sjmcneill  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2049f361a5Sjmcneill  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2149f361a5Sjmcneill  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2249f361a5Sjmcneill  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2349f361a5Sjmcneill  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2449f361a5Sjmcneill  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2549f361a5Sjmcneill  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2649f361a5Sjmcneill  * SUCH DAMAGE.
2749f361a5Sjmcneill  *
2849f361a5Sjmcneill  */
2949f361a5Sjmcneill 
3049f361a5Sjmcneill #include <sys/cdefs.h>
31*943dba72Sbouyer __KERNEL_RCSID(0, "$NetBSD: sun6i_a31_gpio.c,v 1.3 2018/04/03 16:01:25 bouyer Exp $");
3249f361a5Sjmcneill 
3349f361a5Sjmcneill #include <sys/param.h>
3449f361a5Sjmcneill #include <sys/systm.h>
3549f361a5Sjmcneill #include <sys/kernel.h>
3649f361a5Sjmcneill #include <sys/types.h>
3749f361a5Sjmcneill 
3849f361a5Sjmcneill #include <arm/sunxi/sunxi_gpio.h>
3949f361a5Sjmcneill 
4049f361a5Sjmcneill static const struct sunxi_gpio_pins a31_pins[] = {
41*943dba72Sbouyer 	{"PA0",  0, 0,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 0},
42*943dba72Sbouyer 	{"PA1",  0, 1,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 1},
43*943dba72Sbouyer 	{"PA2",  0, 2,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 2},
44*943dba72Sbouyer 	{"PA3",  0, 3,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 3},
45*943dba72Sbouyer 	{"PA4",  0, 4,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 4},
46*943dba72Sbouyer 	{"PA5",  0, 5,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 5},
47*943dba72Sbouyer 	{"PA6",  0, 6,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 6},
48*943dba72Sbouyer 	{"PA7",  0, 7,  {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, "irq", NULL}, 6, 7},
49*943dba72Sbouyer 	{"PA8",  0, 8,  {"gpio_in", "gpio_out", "gmac", "lcd1", NULL, NULL, "irq", NULL}, 6, 8},
50*943dba72Sbouyer 	{"PA9",  0, 9,  {"gpio_in", "gpio_out", "gmac", "lcd1", NULL, "mmc2", "irq", NULL}, 6, 9},
51*943dba72Sbouyer 	{"PA10", 0, 10, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", "irq", NULL}, 6, 10},
52*943dba72Sbouyer 	{"PA11", 0, 11, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", "irq", NULL}, 6, 11},
53*943dba72Sbouyer 	{"PA12", 0, 12, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", "irq", NULL}, 6, 12},
54*943dba72Sbouyer 	{"PA13", 0, 13, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", "irq", NULL}, 6, 13},
55*943dba72Sbouyer 	{"PA14", 0, 14, {"gpio_in", "gpio_out", "gmac", "lcd1", "mmc3", "mmc2", "irq", NULL}, 6, 14},
56*943dba72Sbouyer 	{"PA15", 0, 15, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_a", NULL, "irq", NULL}, 6, 15},
57*943dba72Sbouyer 	{"PA16", 0, 16, {"gpio_in", "gpio_out", "gmac", "lcd1", "dmic", NULL, "irq", NULL}, 6, 16},
58*943dba72Sbouyer 	{"PA17", 0, 17, {"gpio_in", "gpio_out", "gmac", "lcd1", "dmic", NULL, "irq", NULL}, 6, 17},
59*943dba72Sbouyer 	{"PA18", 0, 18, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_b", NULL, "irq", NULL}, 6, 18},
60*943dba72Sbouyer 	{"PA19", 0, 19, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, "irq", NULL}, 6, 19},
61*943dba72Sbouyer 	{"PA20", 0, 20, {"gpio_in", "gpio_out", "gmac", "lcd1", "pwm3", NULL, "irq", NULL}, 6, 20},
62*943dba72Sbouyer 	{"PA21", 0, 21, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, "irq", NULL}, 6, 21},
63*943dba72Sbouyer 	{"PA22", 0, 22, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, "irq", NULL}, 6, 22},
64*943dba72Sbouyer 	{"PA23", 0, 23, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, "irq", NULL}, 6, 23},
65*943dba72Sbouyer 	{"PA24", 0, 24, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, "irq", NULL}, 6, 24},
66*943dba72Sbouyer 	{"PA25", 0, 25, {"gpio_in", "gpio_out", "gmac", "lcd1", "spi3", NULL, "irq", NULL}, 6, 25},
67*943dba72Sbouyer 	{"PA26", 0, 26, {"gpio_in", "gpio_out", "gmac", "lcd1", "clk_out_c", NULL, "irq", NULL}, 6, 26},
68*943dba72Sbouyer 	{"PA27", 0, 27, {"gpio_in", "gpio_out", "gmac", "lcd1", NULL, NULL, "irq", NULL}, 6, 27},
6949f361a5Sjmcneill 
70*943dba72Sbouyer 	{"PB0",  1, 0,  {"gpio_in", "gpio_out", "i2s0", "uart3", "csi", NULL, "irq", NULL}, 6, 0},
71*943dba72Sbouyer 	{"PB1",  1, 1,  {"gpio_in", "gpio_out", "i2s0", NULL, NULL, NULL, "irq", NULL}, 6, 1},
72*943dba72Sbouyer 	{"PB2",  1, 2,  {"gpio_in", "gpio_out", "i2s0", NULL, NULL, NULL, "irq", NULL}, 6, 2},
73*943dba72Sbouyer 	{"PB3",  1, 3,  {"gpio_in", "gpio_out", "i2s0", NULL, NULL, NULL, "irq", NULL}, 6, 3},
74*943dba72Sbouyer 	{"PB4",  1, 4,  {"gpio_in", "gpio_out", "i2s0", "uart3", NULL, NULL, "irq", NULL}, 6, 4},
75*943dba72Sbouyer 	{"PB5",  1, 5,  {"gpio_in", "gpio_out", "i2s0", "uart3", "i2c3", NULL, "irq", NULL}, 6, 5},
76*943dba72Sbouyer 	{"PB6",  1, 6,  {"gpio_in", "gpio_out", "i2s0", "uart3", "i2c3", NULL, "irq", NULL}, 6, 6},
77*943dba72Sbouyer 	{"PB7",  1, 7,  {"gpio_in", "gpio_out", "i2s0", NULL, NULL, NULL, "irq", NULL}, 6, 7},
7849f361a5Sjmcneill 
7949f361a5Sjmcneill 	{"PC0",  2, 0,  {"gpio_in", "gpio_out", "nand0", "spi0", NULL, NULL, NULL, NULL}},
8049f361a5Sjmcneill 	{"PC1",  2, 1,  {"gpio_in", "gpio_out", "nand0", "spi0", NULL, NULL, NULL, NULL}},
8149f361a5Sjmcneill 	{"PC2",  2, 2,  {"gpio_in", "gpio_out", "nand0", "spi0", NULL, NULL, NULL, NULL}},
8249f361a5Sjmcneill 	{"PC3",  2, 3,  {"gpio_in", "gpio_out", "nand0", NULL, NULL, NULL, NULL, NULL}},
8349f361a5Sjmcneill 	{"PC4",  2, 4,  {"gpio_in", "gpio_out", "nand0", NULL, NULL, NULL, NULL, NULL}},
8449f361a5Sjmcneill 	{"PC5",  2, 5,  {"gpio_in", "gpio_out", "nand0", NULL, NULL, NULL, NULL, NULL}},
8549f361a5Sjmcneill 	{"PC6",  2, 6,  {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
8649f361a5Sjmcneill 	{"PC7",  2, 7,  {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
8749f361a5Sjmcneill 	{"PC8",  2, 8,  {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
8849f361a5Sjmcneill 	{"PC9",  2, 9,  {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
8949f361a5Sjmcneill 	{"PC10", 2, 10, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9049f361a5Sjmcneill 	{"PC11", 2, 11, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9149f361a5Sjmcneill 	{"PC12", 2, 12, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9249f361a5Sjmcneill 	{"PC13", 2, 13, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9349f361a5Sjmcneill 	{"PC14", 2, 14, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9449f361a5Sjmcneill 	{"PC15", 2, 15, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
9549f361a5Sjmcneill 	{"PC16", 2, 16, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
9649f361a5Sjmcneill 	{"PC17", 2, 17, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
9749f361a5Sjmcneill 	{"PC18", 2, 18, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
9849f361a5Sjmcneill 	{"PC19", 2, 19, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
9949f361a5Sjmcneill 	{"PC20", 2, 20, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
10049f361a5Sjmcneill 	{"PC21", 2, 21, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
10149f361a5Sjmcneill 	{"PC22", 2, 22, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
10249f361a5Sjmcneill 	{"PC23", 2, 23, {"gpio_in", "gpio_out", "nand0", "nand1", NULL, NULL, NULL, NULL}},
10349f361a5Sjmcneill 	{"PC24", 2, 24, {"gpio_in", "gpio_out", "nand0", "mmc2", "mmc3", NULL, NULL, NULL}},
10449f361a5Sjmcneill 	{"PC25", 2, 25, {"gpio_in", "gpio_out", "nand0", NULL, NULL, NULL, NULL, NULL}},
10549f361a5Sjmcneill 	{"PC26", 2, 26, {"gpio_in", "gpio_out", "nand0", NULL, NULL, NULL, NULL, NULL}},
10649f361a5Sjmcneill 	{"PC27", 2, 27, {"gpio_in", "gpio_out", NULL, "spi0",NULL, NULL, NULL, NULL}},
10749f361a5Sjmcneill 
10849f361a5Sjmcneill 	{"PD0",  3, 0,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
10949f361a5Sjmcneill 	{"PD1",  3, 1,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11049f361a5Sjmcneill 	{"PD2",  3, 2,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11149f361a5Sjmcneill 	{"PD3",  3, 3,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11249f361a5Sjmcneill 	{"PD4",  3, 4,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11349f361a5Sjmcneill 	{"PD5",  3, 5,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11449f361a5Sjmcneill 	{"PD6",  3, 6,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11549f361a5Sjmcneill 	{"PD7",  3, 7,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11649f361a5Sjmcneill 	{"PD8",  3, 8,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11749f361a5Sjmcneill 	{"PD9",  3, 9,  {"gpio_in", "gpio_out", "lcd0", "lvds0", NULL, NULL, NULL, NULL}},
11849f361a5Sjmcneill 	{"PD10", 3, 10, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
11949f361a5Sjmcneill 	{"PD11", 3, 11, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12049f361a5Sjmcneill 	{"PD12", 3, 12, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12149f361a5Sjmcneill 	{"PD13", 3, 13, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12249f361a5Sjmcneill 	{"PD14", 3, 14, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12349f361a5Sjmcneill 	{"PD15", 3, 15, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12449f361a5Sjmcneill 	{"PD16", 3, 16, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12549f361a5Sjmcneill 	{"PD17", 3, 17, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12649f361a5Sjmcneill 	{"PD18", 3, 18, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12749f361a5Sjmcneill 	{"PD19", 3, 19, {"gpio_in", "gpio_out", "lcd0", "lvds1", NULL, NULL, NULL, NULL}},
12849f361a5Sjmcneill 	{"PD20", 3, 20, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
12949f361a5Sjmcneill 	{"PD21", 3, 21, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13049f361a5Sjmcneill 	{"PD22", 3, 22, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13149f361a5Sjmcneill 	{"PD23", 3, 23, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13249f361a5Sjmcneill 	{"PD24", 3, 24, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13349f361a5Sjmcneill 	{"PD25", 3, 25, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13449f361a5Sjmcneill 	{"PD26", 3, 26, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13549f361a5Sjmcneill 	{"PD27", 3, 27, {"gpio_in", "gpio_out", "lcd0", NULL, NULL, NULL, NULL, NULL}},
13649f361a5Sjmcneill 
137*943dba72Sbouyer 	{"PE0",  4, 0,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 0},
138*943dba72Sbouyer 	{"PE1",  4, 1,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 1},
139*943dba72Sbouyer 	{"PE2",  4, 2,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 2},
140*943dba72Sbouyer 	{"PE3",  4, 3,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 3},
141*943dba72Sbouyer 	{"PE4",  4, 4,  {"gpio_in", "gpio_out", "csi", "uart5", NULL, NULL, "irq", NULL}, 6, 4},
142*943dba72Sbouyer 	{"PE5",  4, 5,  {"gpio_in", "gpio_out", "csi", "uart5", NULL, NULL, "irq", NULL}, 6, 5},
143*943dba72Sbouyer 	{"PE6",  4, 6,  {"gpio_in", "gpio_out", "csi", "uart5", NULL, NULL, "irq", NULL}, 6, 6},
144*943dba72Sbouyer 	{"PE7",  4, 7,  {"gpio_in", "gpio_out", "csi", "uart5", NULL, NULL, "irq", NULL}, 6, 7},
145*943dba72Sbouyer 	{"PE8",  4, 8,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 8},
146*943dba72Sbouyer 	{"PE9",  4, 9,  {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 9},
147*943dba72Sbouyer 	{"PE10", 4, 10, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 10},
148*943dba72Sbouyer 	{"PE11", 4, 11, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 11},
149*943dba72Sbouyer 	{"PE12", 4, 12, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 12},
150*943dba72Sbouyer 	{"PE13", 4, 13, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 13},
151*943dba72Sbouyer 	{"PE14", 4, 14, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 14},
152*943dba72Sbouyer 	{"PE15", 4, 15, {"gpio_in", "gpio_out", "csi", "ts", NULL, NULL, "irq", NULL}, 6, 15},
153*943dba72Sbouyer 	{"PE16", 4, 16, {"gpio_in", "gpio_out", "csi", NULL, NULL, NULL, "irq", NULL}, 6, 16},
15449f361a5Sjmcneill 
15549f361a5Sjmcneill 	{"PF0",  5, 0,  {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}},
15649f361a5Sjmcneill 	{"PF1",  5, 1,  {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}},
15749f361a5Sjmcneill 	{"PF2",  5, 2,  {"gpio_in", "gpio_out", "mmc0", NULL, "uart0", NULL, NULL, NULL}},
15849f361a5Sjmcneill 	{"PF3",  5, 3,  {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}},
15949f361a5Sjmcneill 	{"PF4",  5, 4,  {"gpio_in", "gpio_out", "mmc0", NULL, "uart0", NULL, NULL, NULL}},
16049f361a5Sjmcneill 	{"PF5",  5, 5,  {"gpio_in", "gpio_out", "mmc0", NULL, "jtag", NULL, NULL, NULL}},
16149f361a5Sjmcneill 
162*943dba72Sbouyer 	{"PG0",  6, 0,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 0},
163*943dba72Sbouyer 	{"PG1",  6, 1,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 1},
164*943dba72Sbouyer 	{"PG2",  6, 2,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 2},
165*943dba72Sbouyer 	{"PG3",  6, 3,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 3},
166*943dba72Sbouyer 	{"PG4",  6, 4,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 4},
167*943dba72Sbouyer 	{"PG5",  6, 5,  {"gpio_in", "gpio_out", "mmc1", NULL, NULL, NULL, "irq", NULL}, 6, 5},
168*943dba72Sbouyer 	{"PG6",  6, 6,  {"gpio_in", "gpio_out", "uart2", NULL, NULL, NULL, "irq", NULL}, 6, 6},
169*943dba72Sbouyer 	{"PG7",  6, 7,  {"gpio_in", "gpio_out", "uart2", NULL, NULL, NULL, "irq", NULL}, 6, 7},
170*943dba72Sbouyer 	{"PG8",  6, 8,  {"gpio_in", "gpio_out", "uart2", NULL, NULL, NULL, "irq", NULL}, 6, 8},
171*943dba72Sbouyer 	{"PG9",  6, 9,  {"gpio_in", "gpio_out", "uart2", NULL, NULL, NULL, "irq", NULL}, 6, 9},
172*943dba72Sbouyer 	{"PG10", 6, 10, {"gpio_in", "gpio_out", "i2c3", "usb", NULL, NULL, "irq", NULL}, 6, 10},
173*943dba72Sbouyer 	{"PG11", 6, 11, {"gpio_in", "gpio_out", "i2c3", "usb", NULL, NULL, "irq", NULL}, 6, 11},
174*943dba72Sbouyer 	{"PG12", 6, 12, {"gpio_in", "gpio_out", "spi1", "i2s1", NULL, NULL, "irq", NULL}, 6, 12},
175*943dba72Sbouyer 	{"PG13", 6, 13, {"gpio_in", "gpio_out", "spi1", "i2s1", NULL, NULL, "irq", NULL}, 6, 13},
176*943dba72Sbouyer 	{"PG14", 6, 14, {"gpio_in", "gpio_out", "spi1", "i2s1", NULL, NULL, "irq", NULL}, 6, 14},
177*943dba72Sbouyer 	{"PG15", 6, 15, {"gpio_in", "gpio_out", "spi1", "i2s1", NULL, NULL, "irq", NULL}, 6, 15},
178*943dba72Sbouyer 	{"PG16", 6, 16, {"gpio_in", "gpio_out", "spi1", "i2s1", NULL, NULL, "irq", NULL}, 6, 16},
179*943dba72Sbouyer 	{"PG17", 6, 17, {"gpio_in", "gpio_out", "uart4", NULL, NULL, NULL, "irq", NULL}, 6, 17},
180*943dba72Sbouyer 	{"PG18", 6, 18, {"gpio_in", "gpio_out", "uart4", NULL, NULL, NULL, "irq", NULL}, 6, 18},
18149f361a5Sjmcneill 
18249f361a5Sjmcneill 	{"PH0",  7, 0,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18349f361a5Sjmcneill 	{"PH1",  7, 1,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18449f361a5Sjmcneill 	{"PH2",  7, 2,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18549f361a5Sjmcneill 	{"PH3",  7, 3,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18649f361a5Sjmcneill 	{"PH4",  7, 4,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18749f361a5Sjmcneill 	{"PH5",  7, 5,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18849f361a5Sjmcneill 	{"PH6",  7, 6,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
18949f361a5Sjmcneill 	{"PH7",  7, 7,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
19049f361a5Sjmcneill 	{"PH8",  7, 8,  {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
19149f361a5Sjmcneill 	{"PH9",  7, 9,  {"gpio_in", "gpio_out", "spi2", "jtag", "pwm1", NULL, NULL, NULL}},
19249f361a5Sjmcneill 	{"PH10", 7, 10, {"gpio_in", "gpio_out", "spi2", "jtag", "pwm1", NULL, NULL, NULL}},
19349f361a5Sjmcneill 	{"PH11", 7, 11, {"gpio_in", "gpio_out", "spi2", "jtag", "pwm2", NULL, NULL, NULL}},
19449f361a5Sjmcneill 	{"PH12", 7, 12, {"gpio_in", "gpio_out", "spi2", "jtag", "pwm2", NULL, NULL, NULL}},
19549f361a5Sjmcneill 	{"PH13", 7, 13, {"gpio_in", "gpio_out", "pwm0", NULL, NULL, NULL, NULL, NULL}},
19649f361a5Sjmcneill 	{"PH14", 7, 14, {"gpio_in", "gpio_out", "i2c0", NULL, NULL, NULL, NULL, NULL}},
19749f361a5Sjmcneill 	{"PH15", 7, 15, {"gpio_in", "gpio_out", "i2c0", NULL, NULL, NULL, NULL, NULL}},
19849f361a5Sjmcneill 	{"PH16", 7, 16, {"gpio_in", "gpio_out", "i2c1", NULL, NULL, NULL, NULL, NULL}},
19949f361a5Sjmcneill 	{"PH17", 7, 17, {"gpio_in", "gpio_out", "i2c1", NULL, NULL, NULL, NULL, NULL}},
20049f361a5Sjmcneill 	{"PH18", 7, 18, {"gpio_in", "gpio_out", "i2c2", NULL, NULL, NULL, NULL, NULL}},
20149f361a5Sjmcneill 	{"PH19", 7, 19, {"gpio_in", "gpio_out", "i2c2", NULL, NULL, NULL, NULL, NULL}},
20249f361a5Sjmcneill 	{"PH20", 7, 20, {"gpio_in", "gpio_out", "uart0", NULL, NULL, NULL, NULL, NULL}},
20349f361a5Sjmcneill 	{"PH21", 7, 21, {"gpio_in", "gpio_out", "uart0", NULL, NULL, NULL, NULL, NULL}},
20449f361a5Sjmcneill 	{"PH22", 7, 22, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
20549f361a5Sjmcneill 	{"PH23", 7, 23, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
20649f361a5Sjmcneill 	{"PH24", 7, 24, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
20749f361a5Sjmcneill 	{"PH25", 7, 25, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
20849f361a5Sjmcneill 	{"PH26", 7, 26, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
20949f361a5Sjmcneill 	{"PH27", 7, 27, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
21049f361a5Sjmcneill 	{"PH28", 7, 28, {"gpio_in", "gpio_out", NULL, NULL, NULL, NULL, NULL, NULL}},
21149f361a5Sjmcneill 	{"PH29", 7, 29, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
21249f361a5Sjmcneill 	{"PH30", 7, 30, {"gpio_in", "gpio_out", "nand1", NULL, NULL, NULL, NULL, NULL}},
21349f361a5Sjmcneill };
21449f361a5Sjmcneill 
2153d7f7a9dSjmcneill static const struct sunxi_gpio_pins a31_r_pins[] = {
2163d7f7a9dSjmcneill 	{"PL0",  0, 0,  {"gpio_in", "gpio_out", "s_twi", "s_p2wi", NULL, NULL, NULL, NULL}},
2173d7f7a9dSjmcneill 	{"PL1",  0, 1,  {"gpio_in", "gpio_out", "s_twi", "s_p2wi", NULL, NULL, NULL, NULL}},
2183d7f7a9dSjmcneill 	{"PL2",  0, 2,  {"gpio_in", "gpio_out", "s_uart", NULL, NULL, NULL, NULL, NULL}},
2193d7f7a9dSjmcneill 	{"PL3",  0, 3,  {"gpio_in", "gpio_out", "s_uart", NULL, NULL, NULL, NULL, NULL}},
2203d7f7a9dSjmcneill 	{"PL4",  0, 4,  {"gpio_in", "gpio_out", "s_ir", NULL, NULL, NULL, NULL, NULL}},
221*943dba72Sbouyer 	{"PL5",  0, 5,  {"gpio_in", "gpio_out", "irq", "s_jtag", NULL, NULL, NULL, NULL}, 2, 0},
222*943dba72Sbouyer 	{"PL6",  0, 6,  {"gpio_in", "gpio_out", "irq", "s_jtag", NULL, NULL, NULL, NULL}, 2, 1},
223*943dba72Sbouyer 	{"PL7",  0, 7,  {"gpio_in", "gpio_out", "irq", "s_jtag", NULL, NULL, NULL, NULL}, 2, 2},
224*943dba72Sbouyer 	{"PL8",  0, 8,  {"gpio_in", "gpio_out", "irq", "s_jtag", NULL, NULL, NULL, NULL}, 2, 3},
2253d7f7a9dSjmcneill 
226*943dba72Sbouyer 	{"PM0",  1, 0,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 0},
227*943dba72Sbouyer 	{"PM1",  1, 1,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 1},
228*943dba72Sbouyer 	{"PM2",  1, 2,  {"gpio_in", "gpio_out", "irq", "1wire", NULL, NULL, NULL, NULL}, 2, 2},
229*943dba72Sbouyer 	{"PM3",  1, 3,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 3},
230*943dba72Sbouyer 	{"PM4",  1, 4,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 4},
231*943dba72Sbouyer 	{"PM5",  1, 5,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 5},
232*943dba72Sbouyer 	{"PM6",  1, 6,  {"gpio_in", "gpio_out", "irq", NULL, NULL, NULL, NULL, NULL}, 2, 6},
233*943dba72Sbouyer 	{"PM7",  1, 7,  {"gpio_in", "gpio_out", "irq", "rtc", NULL, NULL, NULL, NULL}, 2, 7},
2343d7f7a9dSjmcneill };
2353d7f7a9dSjmcneill 
23649f361a5Sjmcneill const struct sunxi_gpio_padconf sun6i_a31_padconf = {
23749f361a5Sjmcneill 	.npins = __arraycount(a31_pins),
23849f361a5Sjmcneill 	.pins = a31_pins,
23949f361a5Sjmcneill };
2403d7f7a9dSjmcneill 
2413d7f7a9dSjmcneill const struct sunxi_gpio_padconf sun6i_a31_r_padconf = {
2423d7f7a9dSjmcneill 	.npins = __arraycount(a31_r_pins),
2433d7f7a9dSjmcneill 	.pins = a31_r_pins,
2443d7f7a9dSjmcneill };
245