summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorChen-Yu Tsai <wens@csie.org>2017-02-01 11:25:46 -0500
committerLinus Walleij <linus.walleij@linaro.org>2017-02-06 05:05:57 -0500
commit4924982e306e256d2737f94fcd004a536da6df54 (patch)
tree6fc0331b6a9e927653995938108faab488a945ee /drivers/pinctrl
parentd4168be73c8fdc3e9cdc61aa4b513e6c9b7bcf10 (diff)
pinctrl: sunxi: Support A31/A31s with pinctrl variants
The A31s is a trimmed down version of the A31. Some hardware blocks are removed, thus not available for muxing on the external pins. Some external pins were directly removed. This makes it easy to support the A31s pin controller with the A31 driver. We just mark the pins and functions that were trimmed as A31 only. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sun6i-a31.c184
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sunxi.h2
2 files changed, 121 insertions, 65 deletions
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun6i-a31.c b/drivers/pinctrl/sunxi/pinctrl-sun6i-a31.c
index 9e58926bef37..951a25c18815 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sun6i-a31.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sun6i-a31.c
@@ -23,69 +23,79 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
23 SUNXI_FUNCTION(0x0, "gpio_in"), 23 SUNXI_FUNCTION(0x0, "gpio_in"),
24 SUNXI_FUNCTION(0x1, "gpio_out"), 24 SUNXI_FUNCTION(0x1, "gpio_out"),
25 SUNXI_FUNCTION(0x2, "gmac"), /* TXD0 */ 25 SUNXI_FUNCTION(0x2, "gmac"), /* TXD0 */
26 SUNXI_FUNCTION(0x3, "lcd1"), /* D0 */ 26 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
27 PINCTRL_SUN6I_A31), /* D0 */
27 SUNXI_FUNCTION(0x4, "uart1"), /* DTR */ 28 SUNXI_FUNCTION(0x4, "uart1"), /* DTR */
28 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), /* PA_EINT0 */ 29 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)), /* PA_EINT0 */
29 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1), 30 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
30 SUNXI_FUNCTION(0x0, "gpio_in"), 31 SUNXI_FUNCTION(0x0, "gpio_in"),
31 SUNXI_FUNCTION(0x1, "gpio_out"), 32 SUNXI_FUNCTION(0x1, "gpio_out"),
32 SUNXI_FUNCTION(0x2, "gmac"), /* TXD1 */ 33 SUNXI_FUNCTION(0x2, "gmac"), /* TXD1 */
33 SUNXI_FUNCTION(0x3, "lcd1"), /* D1 */ 34 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
35 PINCTRL_SUN6I_A31), /* D1 */
34 SUNXI_FUNCTION(0x4, "uart1"), /* DSR */ 36 SUNXI_FUNCTION(0x4, "uart1"), /* DSR */
35 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), /* PA_EINT1 */ 37 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)), /* PA_EINT1 */
36 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2), 38 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
37 SUNXI_FUNCTION(0x0, "gpio_in"), 39 SUNXI_FUNCTION(0x0, "gpio_in"),
38 SUNXI_FUNCTION(0x1, "gpio_out"), 40 SUNXI_FUNCTION(0x1, "gpio_out"),
39 SUNXI_FUNCTION(0x2, "gmac"), /* TXD2 */ 41 SUNXI_FUNCTION(0x2, "gmac"), /* TXD2 */
40 SUNXI_FUNCTION(0x3, "lcd1"), /* D2 */ 42 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
43 PINCTRL_SUN6I_A31), /* D2 */
41 SUNXI_FUNCTION(0x4, "uart1"), /* DCD */ 44 SUNXI_FUNCTION(0x4, "uart1"), /* DCD */
42 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), /* PA_EINT2 */ 45 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)), /* PA_EINT2 */
43 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3), 46 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
44 SUNXI_FUNCTION(0x0, "gpio_in"), 47 SUNXI_FUNCTION(0x0, "gpio_in"),
45 SUNXI_FUNCTION(0x1, "gpio_out"), 48 SUNXI_FUNCTION(0x1, "gpio_out"),
46 SUNXI_FUNCTION(0x2, "gmac"), /* TXD3 */ 49 SUNXI_FUNCTION(0x2, "gmac"), /* TXD3 */
47 SUNXI_FUNCTION(0x3, "lcd1"), /* D3 */ 50 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
51 PINCTRL_SUN6I_A31), /* D3 */
48 SUNXI_FUNCTION(0x4, "uart1"), /* RING */ 52 SUNXI_FUNCTION(0x4, "uart1"), /* RING */
49 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), /* PA_EINT3 */ 53 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)), /* PA_EINT3 */
50 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4), 54 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 4),
51 SUNXI_FUNCTION(0x0, "gpio_in"), 55 SUNXI_FUNCTION(0x0, "gpio_in"),
52 SUNXI_FUNCTION(0x1, "gpio_out"), 56 SUNXI_FUNCTION(0x1, "gpio_out"),
53 SUNXI_FUNCTION(0x2, "gmac"), /* TXD4 */ 57 SUNXI_FUNCTION(0x2, "gmac"), /* TXD4 */
54 SUNXI_FUNCTION(0x3, "lcd1"), /* D4 */ 58 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
59 PINCTRL_SUN6I_A31), /* D4 */
55 SUNXI_FUNCTION(0x4, "uart1"), /* TX */ 60 SUNXI_FUNCTION(0x4, "uart1"), /* TX */
56 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), /* PA_EINT4 */ 61 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)), /* PA_EINT4 */
57 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5), 62 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 5),
58 SUNXI_FUNCTION(0x0, "gpio_in"), 63 SUNXI_FUNCTION(0x0, "gpio_in"),
59 SUNXI_FUNCTION(0x1, "gpio_out"), 64 SUNXI_FUNCTION(0x1, "gpio_out"),
60 SUNXI_FUNCTION(0x2, "gmac"), /* TXD5 */ 65 SUNXI_FUNCTION(0x2, "gmac"), /* TXD5 */
61 SUNXI_FUNCTION(0x3, "lcd1"), /* D5 */ 66 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
67 PINCTRL_SUN6I_A31), /* D5 */
62 SUNXI_FUNCTION(0x4, "uart1"), /* RX */ 68 SUNXI_FUNCTION(0x4, "uart1"), /* RX */
63 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), /* PA_EINT5 */ 69 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)), /* PA_EINT5 */
64 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6), 70 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 6),
65 SUNXI_FUNCTION(0x0, "gpio_in"), 71 SUNXI_FUNCTION(0x0, "gpio_in"),
66 SUNXI_FUNCTION(0x1, "gpio_out"), 72 SUNXI_FUNCTION(0x1, "gpio_out"),
67 SUNXI_FUNCTION(0x2, "gmac"), /* TXD6 */ 73 SUNXI_FUNCTION(0x2, "gmac"), /* TXD6 */
68 SUNXI_FUNCTION(0x3, "lcd1"), /* D6 */ 74 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
75 PINCTRL_SUN6I_A31), /* D6 */
69 SUNXI_FUNCTION(0x4, "uart1"), /* RTS */ 76 SUNXI_FUNCTION(0x4, "uart1"), /* RTS */
70 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), /* PA_EINT6 */ 77 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)), /* PA_EINT6 */
71 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7), 78 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 7),
72 SUNXI_FUNCTION(0x0, "gpio_in"), 79 SUNXI_FUNCTION(0x0, "gpio_in"),
73 SUNXI_FUNCTION(0x1, "gpio_out"), 80 SUNXI_FUNCTION(0x1, "gpio_out"),
74 SUNXI_FUNCTION(0x2, "gmac"), /* TXD7 */ 81 SUNXI_FUNCTION(0x2, "gmac"), /* TXD7 */
75 SUNXI_FUNCTION(0x3, "lcd1"), /* D7 */ 82 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
83 PINCTRL_SUN6I_A31), /* D7 */
76 SUNXI_FUNCTION(0x4, "uart1"), /* CTS */ 84 SUNXI_FUNCTION(0x4, "uart1"), /* CTS */
77 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), /* PA_EINT7 */ 85 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)), /* PA_EINT7 */
78 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8), 86 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 8),
79 SUNXI_FUNCTION(0x0, "gpio_in"), 87 SUNXI_FUNCTION(0x0, "gpio_in"),
80 SUNXI_FUNCTION(0x1, "gpio_out"), 88 SUNXI_FUNCTION(0x1, "gpio_out"),
81 SUNXI_FUNCTION(0x2, "gmac"), /* TXCLK */ 89 SUNXI_FUNCTION(0x2, "gmac"), /* TXCLK */
82 SUNXI_FUNCTION(0x3, "lcd1"), /* D8 */ 90 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
91 PINCTRL_SUN6I_A31), /* D8 */
83 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), /* PA_EINT8 */ 92 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)), /* PA_EINT8 */
84 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9), 93 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 9),
85 SUNXI_FUNCTION(0x0, "gpio_in"), 94 SUNXI_FUNCTION(0x0, "gpio_in"),
86 SUNXI_FUNCTION(0x1, "gpio_out"), 95 SUNXI_FUNCTION(0x1, "gpio_out"),
87 SUNXI_FUNCTION(0x2, "gmac"), /* TXEN */ 96 SUNXI_FUNCTION(0x2, "gmac"), /* TXEN */
88 SUNXI_FUNCTION(0x3, "lcd1"), /* D9 */ 97 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
98 PINCTRL_SUN6I_A31), /* D9 */
89 SUNXI_FUNCTION(0x4, "mmc3"), /* CMD */ 99 SUNXI_FUNCTION(0x4, "mmc3"), /* CMD */
90 SUNXI_FUNCTION(0x5, "mmc2"), /* CMD */ 100 SUNXI_FUNCTION(0x5, "mmc2"), /* CMD */
91 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), /* PA_EINT9 */ 101 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)), /* PA_EINT9 */
@@ -93,7 +103,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
93 SUNXI_FUNCTION(0x0, "gpio_in"), 103 SUNXI_FUNCTION(0x0, "gpio_in"),
94 SUNXI_FUNCTION(0x1, "gpio_out"), 104 SUNXI_FUNCTION(0x1, "gpio_out"),
95 SUNXI_FUNCTION(0x2, "gmac"), /* GTXCLK */ 105 SUNXI_FUNCTION(0x2, "gmac"), /* GTXCLK */
96 SUNXI_FUNCTION(0x3, "lcd1"), /* D10 */ 106 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
107 PINCTRL_SUN6I_A31), /* D10 */
97 SUNXI_FUNCTION(0x4, "mmc3"), /* CLK */ 108 SUNXI_FUNCTION(0x4, "mmc3"), /* CLK */
98 SUNXI_FUNCTION(0x5, "mmc2"), /* CLK */ 109 SUNXI_FUNCTION(0x5, "mmc2"), /* CLK */
99 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)), /* PA_EINT10 */ 110 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)), /* PA_EINT10 */
@@ -101,7 +112,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
101 SUNXI_FUNCTION(0x0, "gpio_in"), 112 SUNXI_FUNCTION(0x0, "gpio_in"),
102 SUNXI_FUNCTION(0x1, "gpio_out"), 113 SUNXI_FUNCTION(0x1, "gpio_out"),
103 SUNXI_FUNCTION(0x2, "gmac"), /* RXD0 */ 114 SUNXI_FUNCTION(0x2, "gmac"), /* RXD0 */
104 SUNXI_FUNCTION(0x3, "lcd1"), /* D11 */ 115 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
116 PINCTRL_SUN6I_A31), /* D11 */
105 SUNXI_FUNCTION(0x4, "mmc3"), /* D0 */ 117 SUNXI_FUNCTION(0x4, "mmc3"), /* D0 */
106 SUNXI_FUNCTION(0x5, "mmc2"), /* D0 */ 118 SUNXI_FUNCTION(0x5, "mmc2"), /* D0 */
107 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)), /* PA_EINT11 */ 119 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)), /* PA_EINT11 */
@@ -109,7 +121,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
109 SUNXI_FUNCTION(0x0, "gpio_in"), 121 SUNXI_FUNCTION(0x0, "gpio_in"),
110 SUNXI_FUNCTION(0x1, "gpio_out"), 122 SUNXI_FUNCTION(0x1, "gpio_out"),
111 SUNXI_FUNCTION(0x2, "gmac"), /* RXD1 */ 123 SUNXI_FUNCTION(0x2, "gmac"), /* RXD1 */
112 SUNXI_FUNCTION(0x3, "lcd1"), /* D12 */ 124 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
125 PINCTRL_SUN6I_A31), /* D12 */
113 SUNXI_FUNCTION(0x4, "mmc3"), /* D1 */ 126 SUNXI_FUNCTION(0x4, "mmc3"), /* D1 */
114 SUNXI_FUNCTION(0x5, "mmc2"), /* D1 */ 127 SUNXI_FUNCTION(0x5, "mmc2"), /* D1 */
115 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)), /* PA_EINT12 */ 128 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)), /* PA_EINT12 */
@@ -117,7 +130,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
117 SUNXI_FUNCTION(0x0, "gpio_in"), 130 SUNXI_FUNCTION(0x0, "gpio_in"),
118 SUNXI_FUNCTION(0x1, "gpio_out"), 131 SUNXI_FUNCTION(0x1, "gpio_out"),
119 SUNXI_FUNCTION(0x2, "gmac"), /* RXD2 */ 132 SUNXI_FUNCTION(0x2, "gmac"), /* RXD2 */
120 SUNXI_FUNCTION(0x3, "lcd1"), /* D13 */ 133 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
134 PINCTRL_SUN6I_A31), /* D13 */
121 SUNXI_FUNCTION(0x4, "mmc3"), /* D2 */ 135 SUNXI_FUNCTION(0x4, "mmc3"), /* D2 */
122 SUNXI_FUNCTION(0x5, "mmc2"), /* D2 */ 136 SUNXI_FUNCTION(0x5, "mmc2"), /* D2 */
123 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)), /* PA_EINT13 */ 137 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)), /* PA_EINT13 */
@@ -125,7 +139,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
125 SUNXI_FUNCTION(0x0, "gpio_in"), 139 SUNXI_FUNCTION(0x0, "gpio_in"),
126 SUNXI_FUNCTION(0x1, "gpio_out"), 140 SUNXI_FUNCTION(0x1, "gpio_out"),
127 SUNXI_FUNCTION(0x2, "gmac"), /* RXD3 */ 141 SUNXI_FUNCTION(0x2, "gmac"), /* RXD3 */
128 SUNXI_FUNCTION(0x3, "lcd1"), /* D14 */ 142 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
143 PINCTRL_SUN6I_A31), /* D14 */
129 SUNXI_FUNCTION(0x4, "mmc3"), /* D3 */ 144 SUNXI_FUNCTION(0x4, "mmc3"), /* D3 */
130 SUNXI_FUNCTION(0x5, "mmc2"), /* D3 */ 145 SUNXI_FUNCTION(0x5, "mmc2"), /* D3 */
131 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), /* PA_EINT14 */ 146 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), /* PA_EINT14 */
@@ -133,91 +148,104 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
133 SUNXI_FUNCTION(0x0, "gpio_in"), 148 SUNXI_FUNCTION(0x0, "gpio_in"),
134 SUNXI_FUNCTION(0x1, "gpio_out"), 149 SUNXI_FUNCTION(0x1, "gpio_out"),
135 SUNXI_FUNCTION(0x2, "gmac"), /* RXD4 */ 150 SUNXI_FUNCTION(0x2, "gmac"), /* RXD4 */
136 SUNXI_FUNCTION(0x3, "lcd1"), /* D15 */ 151 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
152 PINCTRL_SUN6I_A31), /* D15 */
137 SUNXI_FUNCTION(0x4, "clk_out_a"), 153 SUNXI_FUNCTION(0x4, "clk_out_a"),
138 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), /* PA_EINT15 */ 154 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), /* PA_EINT15 */
139 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 16), 155 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 16),
140 SUNXI_FUNCTION(0x0, "gpio_in"), 156 SUNXI_FUNCTION(0x0, "gpio_in"),
141 SUNXI_FUNCTION(0x1, "gpio_out"), 157 SUNXI_FUNCTION(0x1, "gpio_out"),
142 SUNXI_FUNCTION(0x2, "gmac"), /* RXD5 */ 158 SUNXI_FUNCTION(0x2, "gmac"), /* RXD5 */
143 SUNXI_FUNCTION(0x3, "lcd1"), /* D16 */ 159 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
160 PINCTRL_SUN6I_A31), /* D16 */
144 SUNXI_FUNCTION(0x4, "dmic"), /* CLK */ 161 SUNXI_FUNCTION(0x4, "dmic"), /* CLK */
145 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), /* PA_EINT16 */ 162 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), /* PA_EINT16 */
146 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 17), 163 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 17),
147 SUNXI_FUNCTION(0x0, "gpio_in"), 164 SUNXI_FUNCTION(0x0, "gpio_in"),
148 SUNXI_FUNCTION(0x1, "gpio_out"), 165 SUNXI_FUNCTION(0x1, "gpio_out"),
149 SUNXI_FUNCTION(0x2, "gmac"), /* RXD6 */ 166 SUNXI_FUNCTION(0x2, "gmac"), /* RXD6 */
150 SUNXI_FUNCTION(0x3, "lcd1"), /* D17 */ 167 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
168 PINCTRL_SUN6I_A31), /* D17 */
151 SUNXI_FUNCTION(0x4, "dmic"), /* DIN */ 169 SUNXI_FUNCTION(0x4, "dmic"), /* DIN */
152 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)), /* PA_EINT17 */ 170 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)), /* PA_EINT17 */
153 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 18), 171 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 18),
154 SUNXI_FUNCTION(0x0, "gpio_in"), 172 SUNXI_FUNCTION(0x0, "gpio_in"),
155 SUNXI_FUNCTION(0x1, "gpio_out"), 173 SUNXI_FUNCTION(0x1, "gpio_out"),
156 SUNXI_FUNCTION(0x2, "gmac"), /* RXD7 */ 174 SUNXI_FUNCTION(0x2, "gmac"), /* RXD7 */
157 SUNXI_FUNCTION(0x3, "lcd1"), /* D18 */ 175 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
176 PINCTRL_SUN6I_A31), /* D18 */
158 SUNXI_FUNCTION(0x4, "clk_out_b"), 177 SUNXI_FUNCTION(0x4, "clk_out_b"),
159 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)), /* PA_EINT18 */ 178 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)), /* PA_EINT18 */
160 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 19), 179 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 19),
161 SUNXI_FUNCTION(0x0, "gpio_in"), 180 SUNXI_FUNCTION(0x0, "gpio_in"),
162 SUNXI_FUNCTION(0x1, "gpio_out"), 181 SUNXI_FUNCTION(0x1, "gpio_out"),
163 SUNXI_FUNCTION(0x2, "gmac"), /* RXDV */ 182 SUNXI_FUNCTION(0x2, "gmac"), /* RXDV */
164 SUNXI_FUNCTION(0x3, "lcd1"), /* D19 */ 183 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
184 PINCTRL_SUN6I_A31), /* D19 */
165 SUNXI_FUNCTION(0x4, "pwm3"), /* Positive */ 185 SUNXI_FUNCTION(0x4, "pwm3"), /* Positive */
166 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)), /* PA_EINT19 */ 186 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)), /* PA_EINT19 */
167 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 20), 187 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 20),
168 SUNXI_FUNCTION(0x0, "gpio_in"), 188 SUNXI_FUNCTION(0x0, "gpio_in"),
169 SUNXI_FUNCTION(0x1, "gpio_out"), 189 SUNXI_FUNCTION(0x1, "gpio_out"),
170 SUNXI_FUNCTION(0x2, "gmac"), /* RXCLK */ 190 SUNXI_FUNCTION(0x2, "gmac"), /* RXCLK */
171 SUNXI_FUNCTION(0x3, "lcd1"), /* D20 */ 191 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
192 PINCTRL_SUN6I_A31), /* D20 */
172 SUNXI_FUNCTION(0x4, "pwm3"), /* Negative */ 193 SUNXI_FUNCTION(0x4, "pwm3"), /* Negative */
173 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)), /* PA_EINT20 */ 194 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)), /* PA_EINT20 */
174 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 21), 195 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 21),
175 SUNXI_FUNCTION(0x0, "gpio_in"), 196 SUNXI_FUNCTION(0x0, "gpio_in"),
176 SUNXI_FUNCTION(0x1, "gpio_out"), 197 SUNXI_FUNCTION(0x1, "gpio_out"),
177 SUNXI_FUNCTION(0x2, "gmac"), /* TXERR */ 198 SUNXI_FUNCTION(0x2, "gmac"), /* TXERR */
178 SUNXI_FUNCTION(0x3, "lcd1"), /* D21 */ 199 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
200 PINCTRL_SUN6I_A31), /* D21 */
179 SUNXI_FUNCTION(0x4, "spi3"), /* CS0 */ 201 SUNXI_FUNCTION(0x4, "spi3"), /* CS0 */
180 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)), /* PA_EINT21 */ 202 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)), /* PA_EINT21 */
181 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 22), 203 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 22),
182 SUNXI_FUNCTION(0x0, "gpio_in"), 204 SUNXI_FUNCTION(0x0, "gpio_in"),
183 SUNXI_FUNCTION(0x1, "gpio_out"), 205 SUNXI_FUNCTION(0x1, "gpio_out"),
184 SUNXI_FUNCTION(0x2, "gmac"), /* RXERR */ 206 SUNXI_FUNCTION(0x2, "gmac"), /* RXERR */
185 SUNXI_FUNCTION(0x3, "lcd1"), /* D22 */ 207 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
208 PINCTRL_SUN6I_A31), /* D22 */
186 SUNXI_FUNCTION(0x4, "spi3"), /* CLK */ 209 SUNXI_FUNCTION(0x4, "spi3"), /* CLK */
187 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 22)), /* PA_EINT22 */ 210 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 22)), /* PA_EINT22 */
188 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 23), 211 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 23),
189 SUNXI_FUNCTION(0x0, "gpio_in"), 212 SUNXI_FUNCTION(0x0, "gpio_in"),
190 SUNXI_FUNCTION(0x1, "gpio_out"), 213 SUNXI_FUNCTION(0x1, "gpio_out"),
191 SUNXI_FUNCTION(0x2, "gmac"), /* COL */ 214 SUNXI_FUNCTION(0x2, "gmac"), /* COL */
192 SUNXI_FUNCTION(0x3, "lcd1"), /* D23 */ 215 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
216 PINCTRL_SUN6I_A31), /* D23 */
193 SUNXI_FUNCTION(0x4, "spi3"), /* MOSI */ 217 SUNXI_FUNCTION(0x4, "spi3"), /* MOSI */
194 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 23)), /* PA_EINT23 */ 218 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 23)), /* PA_EINT23 */
195 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 24), 219 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 24),
196 SUNXI_FUNCTION(0x0, "gpio_in"), 220 SUNXI_FUNCTION(0x0, "gpio_in"),
197 SUNXI_FUNCTION(0x1, "gpio_out"), 221 SUNXI_FUNCTION(0x1, "gpio_out"),
198 SUNXI_FUNCTION(0x2, "gmac"), /* CRS */ 222 SUNXI_FUNCTION(0x2, "gmac"), /* CRS */
199 SUNXI_FUNCTION(0x3, "lcd1"), /* CLK */ 223 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
224 PINCTRL_SUN6I_A31), /* CLK */
200 SUNXI_FUNCTION(0x4, "spi3"), /* MISO */ 225 SUNXI_FUNCTION(0x4, "spi3"), /* MISO */
201 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 24)), /* PA_EINT24 */ 226 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 24)), /* PA_EINT24 */
202 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 25), 227 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 25),
203 SUNXI_FUNCTION(0x0, "gpio_in"), 228 SUNXI_FUNCTION(0x0, "gpio_in"),
204 SUNXI_FUNCTION(0x1, "gpio_out"), 229 SUNXI_FUNCTION(0x1, "gpio_out"),
205 SUNXI_FUNCTION(0x2, "gmac"), /* CLKIN */ 230 SUNXI_FUNCTION(0x2, "gmac"), /* CLKIN */
206 SUNXI_FUNCTION(0x3, "lcd1"), /* DE */ 231 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
232 PINCTRL_SUN6I_A31), /* DE */
207 SUNXI_FUNCTION(0x4, "spi3"), /* CS1 */ 233 SUNXI_FUNCTION(0x4, "spi3"), /* CS1 */
208 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 25)), /* PA_EINT25 */ 234 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 25)), /* PA_EINT25 */
209 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 26), 235 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 26),
210 SUNXI_FUNCTION(0x0, "gpio_in"), 236 SUNXI_FUNCTION(0x0, "gpio_in"),
211 SUNXI_FUNCTION(0x1, "gpio_out"), 237 SUNXI_FUNCTION(0x1, "gpio_out"),
212 SUNXI_FUNCTION(0x2, "gmac"), /* MDC */ 238 SUNXI_FUNCTION(0x2, "gmac"), /* MDC */
213 SUNXI_FUNCTION(0x3, "lcd1"), /* HSYNC */ 239 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
240 PINCTRL_SUN6I_A31), /* HSYNC */
214 SUNXI_FUNCTION(0x4, "clk_out_c"), 241 SUNXI_FUNCTION(0x4, "clk_out_c"),
215 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 26)), /* PA_EINT26 */ 242 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 26)), /* PA_EINT26 */
216 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 27), 243 SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 27),
217 SUNXI_FUNCTION(0x0, "gpio_in"), 244 SUNXI_FUNCTION(0x0, "gpio_in"),
218 SUNXI_FUNCTION(0x1, "gpio_out"), 245 SUNXI_FUNCTION(0x1, "gpio_out"),
219 SUNXI_FUNCTION(0x2, "gmac"), /* MDIO */ 246 SUNXI_FUNCTION(0x2, "gmac"), /* MDIO */
220 SUNXI_FUNCTION(0x3, "lcd1"), /* VSYNC */ 247 SUNXI_FUNCTION_VARIANT(0x3, "lcd1",
248 PINCTRL_SUN6I_A31), /* VSYNC */
221 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 27)), /* PA_EINT27 */ 249 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 27)), /* PA_EINT27 */
222 /* Hole */ 250 /* Hole */
223 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0), 251 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
@@ -225,7 +253,8 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
225 SUNXI_FUNCTION(0x1, "gpio_out"), 253 SUNXI_FUNCTION(0x1, "gpio_out"),
226 SUNXI_FUNCTION(0x2, "i2s0"), /* MCLK */ 254 SUNXI_FUNCTION(0x2, "i2s0"), /* MCLK */
227 SUNXI_FUNCTION(0x3, "uart3"), /* CTS */ 255 SUNXI_FUNCTION(0x3, "uart3"), /* CTS */
228 SUNXI_FUNCTION(0x4, "csi"), /* MCLK1 */ 256 SUNXI_FUNCTION_VARIANT(0x4, "csi",
257 PINCTRL_SUN6I_A31), /* MCLK1 */
229 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)), /* PB_EINT0 */ 258 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)), /* PB_EINT0 */
230 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1), 259 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
231 SUNXI_FUNCTION(0x0, "gpio_in"), 260 SUNXI_FUNCTION(0x0, "gpio_in"),
@@ -355,42 +384,43 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
355 SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */ 384 SUNXI_FUNCTION(0x2, "nand0"), /* DQ7 */
356 SUNXI_FUNCTION(0x3, "mmc2"), /* D7 */ 385 SUNXI_FUNCTION(0x3, "mmc2"), /* D7 */
357 SUNXI_FUNCTION(0x4, "mmc3")), /* D7 */ 386 SUNXI_FUNCTION(0x4, "mmc3")), /* D7 */
358 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16), 387 /* Hole in pin numbering for A31s */
388 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 16), PINCTRL_SUN6I_A31,
359 SUNXI_FUNCTION(0x0, "gpio_in"), 389 SUNXI_FUNCTION(0x0, "gpio_in"),
360 SUNXI_FUNCTION(0x1, "gpio_out"), 390 SUNXI_FUNCTION(0x1, "gpio_out"),
361 SUNXI_FUNCTION(0x2, "nand0"), /* DQ8 */ 391 SUNXI_FUNCTION(0x2, "nand0"), /* DQ8 */
362 SUNXI_FUNCTION(0x3, "nand1")), /* DQ0 */ 392 SUNXI_FUNCTION(0x3, "nand1")), /* DQ0 */
363 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 17), 393 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 17), PINCTRL_SUN6I_A31,
364 SUNXI_FUNCTION(0x0, "gpio_in"), 394 SUNXI_FUNCTION(0x0, "gpio_in"),
365 SUNXI_FUNCTION(0x1, "gpio_out"), 395 SUNXI_FUNCTION(0x1, "gpio_out"),
366 SUNXI_FUNCTION(0x2, "nand0"), /* DQ9 */ 396 SUNXI_FUNCTION(0x2, "nand0"), /* DQ9 */
367 SUNXI_FUNCTION(0x3, "nand1")), /* DQ1 */ 397 SUNXI_FUNCTION(0x3, "nand1")), /* DQ1 */
368 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 18), 398 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 18), PINCTRL_SUN6I_A31,
369 SUNXI_FUNCTION(0x0, "gpio_in"), 399 SUNXI_FUNCTION(0x0, "gpio_in"),
370 SUNXI_FUNCTION(0x1, "gpio_out"), 400 SUNXI_FUNCTION(0x1, "gpio_out"),
371 SUNXI_FUNCTION(0x2, "nand0"), /* DQ10 */ 401 SUNXI_FUNCTION(0x2, "nand0"), /* DQ10 */
372 SUNXI_FUNCTION(0x3, "nand1")), /* DQ2 */ 402 SUNXI_FUNCTION(0x3, "nand1")), /* DQ2 */
373 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 19), 403 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 19), PINCTRL_SUN6I_A31,
374 SUNXI_FUNCTION(0x0, "gpio_in"), 404 SUNXI_FUNCTION(0x0, "gpio_in"),
375 SUNXI_FUNCTION(0x1, "gpio_out"), 405 SUNXI_FUNCTION(0x1, "gpio_out"),
376 SUNXI_FUNCTION(0x2, "nand0"), /* DQ11 */ 406 SUNXI_FUNCTION(0x2, "nand0"), /* DQ11 */
377 SUNXI_FUNCTION(0x3, "nand1")), /* DQ3 */ 407 SUNXI_FUNCTION(0x3, "nand1")), /* DQ3 */
378 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 20), 408 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 20), PINCTRL_SUN6I_A31,
379 SUNXI_FUNCTION(0x0, "gpio_in"), 409 SUNXI_FUNCTION(0x0, "gpio_in"),
380 SUNXI_FUNCTION(0x1, "gpio_out"), 410 SUNXI_FUNCTION(0x1, "gpio_out"),
381 SUNXI_FUNCTION(0x2, "nand0"), /* DQ12 */ 411 SUNXI_FUNCTION(0x2, "nand0"), /* DQ12 */
382 SUNXI_FUNCTION(0x3, "nand1")), /* DQ4 */ 412 SUNXI_FUNCTION(0x3, "nand1")), /* DQ4 */
383 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 21), 413 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 21), PINCTRL_SUN6I_A31,
384 SUNXI_FUNCTION(0x0, "gpio_in"), 414 SUNXI_FUNCTION(0x0, "gpio_in"),
385 SUNXI_FUNCTION(0x1, "gpio_out"), 415 SUNXI_FUNCTION(0x1, "gpio_out"),
386 SUNXI_FUNCTION(0x2, "nand0"), /* DQ13 */ 416 SUNXI_FUNCTION(0x2, "nand0"), /* DQ13 */
387 SUNXI_FUNCTION(0x3, "nand1")), /* DQ5 */ 417 SUNXI_FUNCTION(0x3, "nand1")), /* DQ5 */
388 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 22), 418 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 22), PINCTRL_SUN6I_A31,
389 SUNXI_FUNCTION(0x0, "gpio_in"), 419 SUNXI_FUNCTION(0x0, "gpio_in"),
390 SUNXI_FUNCTION(0x1, "gpio_out"), 420 SUNXI_FUNCTION(0x1, "gpio_out"),
391 SUNXI_FUNCTION(0x2, "nand0"), /* DQ14 */ 421 SUNXI_FUNCTION(0x2, "nand0"), /* DQ14 */
392 SUNXI_FUNCTION(0x3, "nand1")), /* DQ6 */ 422 SUNXI_FUNCTION(0x3, "nand1")), /* DQ6 */
393 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 23), 423 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(C, 23), PINCTRL_SUN6I_A31,
394 SUNXI_FUNCTION(0x0, "gpio_in"), 424 SUNXI_FUNCTION(0x0, "gpio_in"),
395 SUNXI_FUNCTION(0x1, "gpio_out"), 425 SUNXI_FUNCTION(0x1, "gpio_out"),
396 SUNXI_FUNCTION(0x2, "nand0"), /* DQ15 */ 426 SUNXI_FUNCTION(0x2, "nand0"), /* DQ15 */
@@ -468,52 +498,62 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
468 SUNXI_FUNCTION(0x0, "gpio_in"), 498 SUNXI_FUNCTION(0x0, "gpio_in"),
469 SUNXI_FUNCTION(0x1, "gpio_out"), 499 SUNXI_FUNCTION(0x1, "gpio_out"),
470 SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */ 500 SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */
471 SUNXI_FUNCTION(0x3, "lvds1")), /* VP0 */ 501 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
502 PINCTRL_SUN6I_A31)), /* VP0 */
472 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11), 503 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
473 SUNXI_FUNCTION(0x0, "gpio_in"), 504 SUNXI_FUNCTION(0x0, "gpio_in"),
474 SUNXI_FUNCTION(0x1, "gpio_out"), 505 SUNXI_FUNCTION(0x1, "gpio_out"),
475 SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */ 506 SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */
476 SUNXI_FUNCTION(0x3, "lvds1")), /* VN0 */ 507 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
508 PINCTRL_SUN6I_A31)), /* VN0 */
477 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12), 509 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
478 SUNXI_FUNCTION(0x0, "gpio_in"), 510 SUNXI_FUNCTION(0x0, "gpio_in"),
479 SUNXI_FUNCTION(0x1, "gpio_out"), 511 SUNXI_FUNCTION(0x1, "gpio_out"),
480 SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */ 512 SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */
481 SUNXI_FUNCTION(0x3, "lvds1")), /* VP1 */ 513 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
514 PINCTRL_SUN6I_A31)), /* VP1 */
482 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13), 515 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
483 SUNXI_FUNCTION(0x0, "gpio_in"), 516 SUNXI_FUNCTION(0x0, "gpio_in"),
484 SUNXI_FUNCTION(0x1, "gpio_out"), 517 SUNXI_FUNCTION(0x1, "gpio_out"),
485 SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */ 518 SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */
486 SUNXI_FUNCTION(0x3, "lvds1")), /* VN1 */ 519 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
520 PINCTRL_SUN6I_A31)), /* VN1 */
487 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14), 521 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
488 SUNXI_FUNCTION(0x0, "gpio_in"), 522 SUNXI_FUNCTION(0x0, "gpio_in"),
489 SUNXI_FUNCTION(0x1, "gpio_out"), 523 SUNXI_FUNCTION(0x1, "gpio_out"),
490 SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */ 524 SUNXI_FUNCTION(0x2, "lcd0"), /* D14 */
491 SUNXI_FUNCTION(0x3, "lvds1")), /* VP2 */ 525 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
526 PINCTRL_SUN6I_A31)), /* VP2 */
492 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15), 527 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
493 SUNXI_FUNCTION(0x0, "gpio_in"), 528 SUNXI_FUNCTION(0x0, "gpio_in"),
494 SUNXI_FUNCTION(0x1, "gpio_out"), 529 SUNXI_FUNCTION(0x1, "gpio_out"),
495 SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */ 530 SUNXI_FUNCTION(0x2, "lcd0"), /* D15 */
496 SUNXI_FUNCTION(0x3, "lvds1")), /* VN2 */ 531 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
532 PINCTRL_SUN6I_A31)), /* VN2 */
497 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16), 533 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
498 SUNXI_FUNCTION(0x0, "gpio_in"), 534 SUNXI_FUNCTION(0x0, "gpio_in"),
499 SUNXI_FUNCTION(0x1, "gpio_out"), 535 SUNXI_FUNCTION(0x1, "gpio_out"),
500 SUNXI_FUNCTION(0x2, "lcd0"), /* D16 */ 536 SUNXI_FUNCTION(0x2, "lcd0"), /* D16 */
501 SUNXI_FUNCTION(0x3, "lvds1")), /* VPC */ 537 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
538 PINCTRL_SUN6I_A31)), /* VPC */
502 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17), 539 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
503 SUNXI_FUNCTION(0x0, "gpio_in"), 540 SUNXI_FUNCTION(0x0, "gpio_in"),
504 SUNXI_FUNCTION(0x1, "gpio_out"), 541 SUNXI_FUNCTION(0x1, "gpio_out"),
505 SUNXI_FUNCTION(0x2, "lcd0"), /* D17 */ 542 SUNXI_FUNCTION(0x2, "lcd0"), /* D17 */
506 SUNXI_FUNCTION(0x3, "lvds1")), /* VNC */ 543 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
544 PINCTRL_SUN6I_A31)), /* VNC */
507 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18), 545 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
508 SUNXI_FUNCTION(0x0, "gpio_in"), 546 SUNXI_FUNCTION(0x0, "gpio_in"),
509 SUNXI_FUNCTION(0x1, "gpio_out"), 547 SUNXI_FUNCTION(0x1, "gpio_out"),
510 SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */ 548 SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */
511 SUNXI_FUNCTION(0x3, "lvds1")), /* VP3 */ 549 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
550 PINCTRL_SUN6I_A31)), /* VP3 */
512 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19), 551 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
513 SUNXI_FUNCTION(0x0, "gpio_in"), 552 SUNXI_FUNCTION(0x0, "gpio_in"),
514 SUNXI_FUNCTION(0x1, "gpio_out"), 553 SUNXI_FUNCTION(0x1, "gpio_out"),
515 SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */ 554 SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */
516 SUNXI_FUNCTION(0x3, "lvds1")), /* VN3 */ 555 SUNXI_FUNCTION_VARIANT(0x3, "lvds1",
556 PINCTRL_SUN6I_A31)), /* VN3 */
517 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20), 557 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
518 SUNXI_FUNCTION(0x0, "gpio_in"), 558 SUNXI_FUNCTION(0x0, "gpio_in"),
519 SUNXI_FUNCTION(0x1, "gpio_out"), 559 SUNXI_FUNCTION(0x1, "gpio_out"),
@@ -643,7 +683,7 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
643 SUNXI_FUNCTION(0x2, "csi"), /* D11 */ 683 SUNXI_FUNCTION(0x2, "csi"), /* D11 */
644 SUNXI_FUNCTION(0x3, "ts"), /* D7 */ 684 SUNXI_FUNCTION(0x3, "ts"), /* D7 */
645 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 15)), /* PE_EINT15 */ 685 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 15)), /* PE_EINT15 */
646 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16), 686 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(E, 16), PINCTRL_SUN6I_A31,
647 SUNXI_FUNCTION(0x0, "gpio_in"), 687 SUNXI_FUNCTION(0x0, "gpio_in"),
648 SUNXI_FUNCTION(0x1, "gpio_out"), 688 SUNXI_FUNCTION(0x1, "gpio_out"),
649 SUNXI_FUNCTION(0x2, "csi"), /* MIPI CSI MCLK */ 689 SUNXI_FUNCTION(0x2, "csi"), /* MIPI CSI MCLK */
@@ -734,13 +774,15 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
734 SUNXI_FUNCTION(0x0, "gpio_in"), 774 SUNXI_FUNCTION(0x0, "gpio_in"),
735 SUNXI_FUNCTION(0x1, "gpio_out"), 775 SUNXI_FUNCTION(0x1, "gpio_out"),
736 SUNXI_FUNCTION(0x2, "i2c3"), /* SCK */ 776 SUNXI_FUNCTION(0x2, "i2c3"), /* SCK */
737 SUNXI_FUNCTION(0x3, "usb"), /* DP3 */ 777 SUNXI_FUNCTION_VARIANT(0x3, "usb",
778 PINCTRL_SUN6I_A31), /* DP3 */
738 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 10)), /* PG_EINT10 */ 779 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 10)), /* PG_EINT10 */
739 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11), 780 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
740 SUNXI_FUNCTION(0x0, "gpio_in"), 781 SUNXI_FUNCTION(0x0, "gpio_in"),
741 SUNXI_FUNCTION(0x1, "gpio_out"), 782 SUNXI_FUNCTION(0x1, "gpio_out"),
742 SUNXI_FUNCTION(0x2, "i2c3"), /* SDA */ 783 SUNXI_FUNCTION(0x2, "i2c3"), /* SDA */
743 SUNXI_FUNCTION(0x3, "usb"), /* DM3 */ 784 SUNXI_FUNCTION_VARIANT(0x3, "usb",
785 PINCTRL_SUN6I_A31), /* DM3 */
744 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 11)), /* PG_EINT11 */ 786 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 11)), /* PG_EINT11 */
745 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12), 787 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
746 SUNXI_FUNCTION(0x0, "gpio_in"), 788 SUNXI_FUNCTION(0x0, "gpio_in"),
@@ -782,40 +824,40 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
782 SUNXI_FUNCTION(0x1, "gpio_out"), 824 SUNXI_FUNCTION(0x1, "gpio_out"),
783 SUNXI_FUNCTION(0x2, "uart4"), /* RX */ 825 SUNXI_FUNCTION(0x2, "uart4"), /* RX */
784 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 18)), /* PG_EINT18 */ 826 SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 18)), /* PG_EINT18 */
785 /* Hole */ 827 /* Hole; H starts at pin 9 for A31s */
786 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0), 828 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 0), PINCTRL_SUN6I_A31,
787 SUNXI_FUNCTION(0x0, "gpio_in"), 829 SUNXI_FUNCTION(0x0, "gpio_in"),
788 SUNXI_FUNCTION(0x1, "gpio_out"), 830 SUNXI_FUNCTION(0x1, "gpio_out"),
789 SUNXI_FUNCTION(0x2, "nand1")), /* WE */ 831 SUNXI_FUNCTION(0x2, "nand1")), /* WE */
790 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1), 832 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 1), PINCTRL_SUN6I_A31,
791 SUNXI_FUNCTION(0x0, "gpio_in"), 833 SUNXI_FUNCTION(0x0, "gpio_in"),
792 SUNXI_FUNCTION(0x1, "gpio_out"), 834 SUNXI_FUNCTION(0x1, "gpio_out"),
793 SUNXI_FUNCTION(0x2, "nand1")), /* ALE */ 835 SUNXI_FUNCTION(0x2, "nand1")), /* ALE */
794 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2), 836 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 2), PINCTRL_SUN6I_A31,
795 SUNXI_FUNCTION(0x0, "gpio_in"), 837 SUNXI_FUNCTION(0x0, "gpio_in"),
796 SUNXI_FUNCTION(0x1, "gpio_out"), 838 SUNXI_FUNCTION(0x1, "gpio_out"),
797 SUNXI_FUNCTION(0x2, "nand1")), /* CLE */ 839 SUNXI_FUNCTION(0x2, "nand1")), /* CLE */
798 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3), 840 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 3), PINCTRL_SUN6I_A31,
799 SUNXI_FUNCTION(0x0, "gpio_in"), 841 SUNXI_FUNCTION(0x0, "gpio_in"),
800 SUNXI_FUNCTION(0x1, "gpio_out"), 842 SUNXI_FUNCTION(0x1, "gpio_out"),
801 SUNXI_FUNCTION(0x2, "nand1")), /* CE1 */ 843 SUNXI_FUNCTION(0x2, "nand1")), /* CE1 */
802 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4), 844 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 4), PINCTRL_SUN6I_A31,
803 SUNXI_FUNCTION(0x0, "gpio_in"), 845 SUNXI_FUNCTION(0x0, "gpio_in"),
804 SUNXI_FUNCTION(0x1, "gpio_out"), 846 SUNXI_FUNCTION(0x1, "gpio_out"),
805 SUNXI_FUNCTION(0x2, "nand1")), /* CE0 */ 847 SUNXI_FUNCTION(0x2, "nand1")), /* CE0 */
806 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5), 848 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 5), PINCTRL_SUN6I_A31,
807 SUNXI_FUNCTION(0x0, "gpio_in"), 849 SUNXI_FUNCTION(0x0, "gpio_in"),
808 SUNXI_FUNCTION(0x1, "gpio_out"), 850 SUNXI_FUNCTION(0x1, "gpio_out"),
809 SUNXI_FUNCTION(0x2, "nand1")), /* RE */ 851 SUNXI_FUNCTION(0x2, "nand1")), /* RE */
810 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6), 852 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 6), PINCTRL_SUN6I_A31,
811 SUNXI_FUNCTION(0x0, "gpio_in"), 853 SUNXI_FUNCTION(0x0, "gpio_in"),
812 SUNXI_FUNCTION(0x1, "gpio_out"), 854 SUNXI_FUNCTION(0x1, "gpio_out"),
813 SUNXI_FUNCTION(0x2, "nand1")), /* RB0 */ 855 SUNXI_FUNCTION(0x2, "nand1")), /* RB0 */
814 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7), 856 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 7), PINCTRL_SUN6I_A31,
815 SUNXI_FUNCTION(0x0, "gpio_in"), 857 SUNXI_FUNCTION(0x0, "gpio_in"),
816 SUNXI_FUNCTION(0x1, "gpio_out"), 858 SUNXI_FUNCTION(0x1, "gpio_out"),
817 SUNXI_FUNCTION(0x2, "nand1")), /* RB1 */ 859 SUNXI_FUNCTION(0x2, "nand1")), /* RB1 */
818 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8), 860 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 8), PINCTRL_SUN6I_A31,
819 SUNXI_FUNCTION(0x0, "gpio_in"), 861 SUNXI_FUNCTION(0x0, "gpio_in"),
820 SUNXI_FUNCTION(0x1, "gpio_out"), 862 SUNXI_FUNCTION(0x1, "gpio_out"),
821 SUNXI_FUNCTION(0x2, "nand1")), /* DQS */ 863 SUNXI_FUNCTION(0x2, "nand1")), /* DQS */
@@ -908,11 +950,12 @@ static const struct sunxi_desc_pin sun6i_a31_pins[] = {
908 SUNXI_FUNCTION(0x1, "gpio_out"), 950 SUNXI_FUNCTION(0x1, "gpio_out"),
909 /* Undocumented mux function - see above */ 951 /* Undocumented mux function - see above */
910 SUNXI_FUNCTION(0x3, "spdif")), /* SPDIF OUT */ 952 SUNXI_FUNCTION(0x3, "spdif")), /* SPDIF OUT */
911 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 29), 953 /* 2 extra pins for A31 */
954 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 29), PINCTRL_SUN6I_A31,
912 SUNXI_FUNCTION(0x0, "gpio_in"), 955 SUNXI_FUNCTION(0x0, "gpio_in"),
913 SUNXI_FUNCTION(0x1, "gpio_out"), 956 SUNXI_FUNCTION(0x1, "gpio_out"),
914 SUNXI_FUNCTION(0x2, "nand1")), /* CE2 */ 957 SUNXI_FUNCTION(0x2, "nand1")), /* CE2 */
915 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 30), 958 SUNXI_PIN_VARIANT(SUNXI_PINCTRL_PIN(H, 30), PINCTRL_SUN6I_A31,
916 SUNXI_FUNCTION(0x0, "gpio_in"), 959 SUNXI_FUNCTION(0x0, "gpio_in"),
917 SUNXI_FUNCTION(0x1, "gpio_out"), 960 SUNXI_FUNCTION(0x1, "gpio_out"),
918 SUNXI_FUNCTION(0x2, "nand1")), /* CE3 */ 961 SUNXI_FUNCTION(0x2, "nand1")), /* CE3 */
@@ -926,12 +969,23 @@ static const struct sunxi_pinctrl_desc sun6i_a31_pinctrl_data = {
926 969
927static int sun6i_a31_pinctrl_probe(struct platform_device *pdev) 970static int sun6i_a31_pinctrl_probe(struct platform_device *pdev)
928{ 971{
929 return sunxi_pinctrl_init(pdev, 972 unsigned long variant =
930 &sun6i_a31_pinctrl_data); 973 (unsigned long)of_device_get_match_data(&pdev->dev);
974
975 return sunxi_pinctrl_init_with_variant(pdev,
976 &sun6i_a31_pinctrl_data,
977 variant);
931} 978}
932 979
933static const struct of_device_id sun6i_a31_pinctrl_match[] = { 980static const struct of_device_id sun6i_a31_pinctrl_match[] = {
934 { .compatible = "allwinner,sun6i-a31-pinctrl", }, 981 {
982 .compatible = "allwinner,sun6i-a31-pinctrl",
983 .data = (void *)PINCTRL_SUN6I_A31
984 },
985 {
986 .compatible = "allwinner,sun6i-a31s-pinctrl",
987 .data = (void *)PINCTRL_SUN6I_A31S
988 },
935 {} 989 {}
936}; 990};
937 991
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.h b/drivers/pinctrl/sunxi/pinctrl-sunxi.h
index 56be35387ccf..e1aedd260b2e 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.h
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.h
@@ -85,6 +85,8 @@
85#define PINCTRL_SUN5I_A10S BIT(1) 85#define PINCTRL_SUN5I_A10S BIT(1)
86#define PINCTRL_SUN5I_A13 BIT(2) 86#define PINCTRL_SUN5I_A13 BIT(2)
87#define PINCTRL_SUN5I_GR8 BIT(3) 87#define PINCTRL_SUN5I_GR8 BIT(3)
88#define PINCTRL_SUN6I_A31 BIT(4)
89#define PINCTRL_SUN6I_A31S BIT(5)
88 90
89struct sunxi_desc_function { 91struct sunxi_desc_function {
90 unsigned long variant; 92 unsigned long variant;