1 | // SPDX-License-Identifier: (GPL-2.0+ OR MIT) |
2 | /* |
3 | * Pin controller and GPIO driver for Amlogic Meson G12A SoC. |
4 | * |
5 | * Copyright (c) 2018 Amlogic, Inc. All rights reserved. |
6 | * Author: Xingyu Chen <xingyu.chen@amlogic.com> |
7 | * Author: Yixun Lan <yixun.lan@amlogic.com> |
8 | */ |
9 | |
10 | #include <dt-bindings/gpio/meson-g12a-gpio.h> |
11 | #include <dt-bindings/interrupt-controller/amlogic,meson-g12a-gpio-intc.h> |
12 | #include "pinctrl-meson.h" |
13 | #include "pinctrl-meson-axg-pmx.h" |
14 | |
15 | static const struct pinctrl_pin_desc meson_g12a_periphs_pins[] = { |
16 | MESON_PIN(GPIOZ_0), |
17 | MESON_PIN(GPIOZ_1), |
18 | MESON_PIN(GPIOZ_2), |
19 | MESON_PIN(GPIOZ_3), |
20 | MESON_PIN(GPIOZ_4), |
21 | MESON_PIN(GPIOZ_5), |
22 | MESON_PIN(GPIOZ_6), |
23 | MESON_PIN(GPIOZ_7), |
24 | MESON_PIN(GPIOZ_8), |
25 | MESON_PIN(GPIOZ_9), |
26 | MESON_PIN(GPIOZ_10), |
27 | MESON_PIN(GPIOZ_11), |
28 | MESON_PIN(GPIOZ_12), |
29 | MESON_PIN(GPIOZ_13), |
30 | MESON_PIN(GPIOZ_14), |
31 | MESON_PIN(GPIOZ_15), |
32 | MESON_PIN(GPIOH_0), |
33 | MESON_PIN(GPIOH_1), |
34 | MESON_PIN(GPIOH_2), |
35 | MESON_PIN(GPIOH_3), |
36 | MESON_PIN(GPIOH_4), |
37 | MESON_PIN(GPIOH_5), |
38 | MESON_PIN(GPIOH_6), |
39 | MESON_PIN(GPIOH_7), |
40 | MESON_PIN(GPIOH_8), |
41 | MESON_PIN(BOOT_0), |
42 | MESON_PIN(BOOT_1), |
43 | MESON_PIN(BOOT_2), |
44 | MESON_PIN(BOOT_3), |
45 | MESON_PIN(BOOT_4), |
46 | MESON_PIN(BOOT_5), |
47 | MESON_PIN(BOOT_6), |
48 | MESON_PIN(BOOT_7), |
49 | MESON_PIN(BOOT_8), |
50 | MESON_PIN(BOOT_9), |
51 | MESON_PIN(BOOT_10), |
52 | MESON_PIN(BOOT_11), |
53 | MESON_PIN(BOOT_12), |
54 | MESON_PIN(BOOT_13), |
55 | MESON_PIN(BOOT_14), |
56 | MESON_PIN(BOOT_15), |
57 | MESON_PIN(GPIOC_0), |
58 | MESON_PIN(GPIOC_1), |
59 | MESON_PIN(GPIOC_2), |
60 | MESON_PIN(GPIOC_3), |
61 | MESON_PIN(GPIOC_4), |
62 | MESON_PIN(GPIOC_5), |
63 | MESON_PIN(GPIOC_6), |
64 | MESON_PIN(GPIOC_7), |
65 | MESON_PIN(GPIOA_0), |
66 | MESON_PIN(GPIOA_1), |
67 | MESON_PIN(GPIOA_2), |
68 | MESON_PIN(GPIOA_3), |
69 | MESON_PIN(GPIOA_4), |
70 | MESON_PIN(GPIOA_5), |
71 | MESON_PIN(GPIOA_6), |
72 | MESON_PIN(GPIOA_7), |
73 | MESON_PIN(GPIOA_8), |
74 | MESON_PIN(GPIOA_9), |
75 | MESON_PIN(GPIOA_10), |
76 | MESON_PIN(GPIOA_11), |
77 | MESON_PIN(GPIOA_12), |
78 | MESON_PIN(GPIOA_13), |
79 | MESON_PIN(GPIOA_14), |
80 | MESON_PIN(GPIOA_15), |
81 | MESON_PIN(GPIOX_0), |
82 | MESON_PIN(GPIOX_1), |
83 | MESON_PIN(GPIOX_2), |
84 | MESON_PIN(GPIOX_3), |
85 | MESON_PIN(GPIOX_4), |
86 | MESON_PIN(GPIOX_5), |
87 | MESON_PIN(GPIOX_6), |
88 | MESON_PIN(GPIOX_7), |
89 | MESON_PIN(GPIOX_8), |
90 | MESON_PIN(GPIOX_9), |
91 | MESON_PIN(GPIOX_10), |
92 | MESON_PIN(GPIOX_11), |
93 | MESON_PIN(GPIOX_12), |
94 | MESON_PIN(GPIOX_13), |
95 | MESON_PIN(GPIOX_14), |
96 | MESON_PIN(GPIOX_15), |
97 | MESON_PIN(GPIOX_16), |
98 | MESON_PIN(GPIOX_17), |
99 | MESON_PIN(GPIOX_18), |
100 | MESON_PIN(GPIOX_19), |
101 | }; |
102 | |
103 | static const struct pinctrl_pin_desc meson_g12a_aobus_pins[] = { |
104 | MESON_PIN(GPIOAO_0), |
105 | MESON_PIN(GPIOAO_1), |
106 | MESON_PIN(GPIOAO_2), |
107 | MESON_PIN(GPIOAO_3), |
108 | MESON_PIN(GPIOAO_4), |
109 | MESON_PIN(GPIOAO_5), |
110 | MESON_PIN(GPIOAO_6), |
111 | MESON_PIN(GPIOAO_7), |
112 | MESON_PIN(GPIOAO_8), |
113 | MESON_PIN(GPIOAO_9), |
114 | MESON_PIN(GPIOAO_10), |
115 | MESON_PIN(GPIOAO_11), |
116 | MESON_PIN(GPIOE_0), |
117 | MESON_PIN(GPIOE_1), |
118 | MESON_PIN(GPIOE_2), |
119 | }; |
120 | |
121 | /* emmc */ |
122 | static const unsigned int emmc_nand_d0_pins[] = { BOOT_0 }; |
123 | static const unsigned int emmc_nand_d1_pins[] = { BOOT_1 }; |
124 | static const unsigned int emmc_nand_d2_pins[] = { BOOT_2 }; |
125 | static const unsigned int emmc_nand_d3_pins[] = { BOOT_3 }; |
126 | static const unsigned int emmc_nand_d4_pins[] = { BOOT_4 }; |
127 | static const unsigned int emmc_nand_d5_pins[] = { BOOT_5 }; |
128 | static const unsigned int emmc_nand_d6_pins[] = { BOOT_6 }; |
129 | static const unsigned int emmc_nand_d7_pins[] = { BOOT_7 }; |
130 | static const unsigned int emmc_clk_pins[] = { BOOT_8 }; |
131 | static const unsigned int emmc_cmd_pins[] = { BOOT_10 }; |
132 | static const unsigned int emmc_nand_ds_pins[] = { BOOT_13 }; |
133 | |
134 | /* nand */ |
135 | static const unsigned int nand_wen_clk_pins[] = { BOOT_8 }; |
136 | static const unsigned int nand_ale_pins[] = { BOOT_9 }; |
137 | static const unsigned int nand_cle_pins[] = { BOOT_10 }; |
138 | static const unsigned int nand_ce0_pins[] = { BOOT_11 }; |
139 | static const unsigned int nand_ren_wr_pins[] = { BOOT_12 }; |
140 | static const unsigned int nand_rb0_pins[] = { BOOT_14 }; |
141 | static const unsigned int nand_ce1_pins[] = { BOOT_15 }; |
142 | |
143 | /* nor */ |
144 | static const unsigned int nor_hold_pins[] = { BOOT_3 }; |
145 | static const unsigned int nor_d_pins[] = { BOOT_4 }; |
146 | static const unsigned int nor_q_pins[] = { BOOT_5 }; |
147 | static const unsigned int nor_c_pins[] = { BOOT_6 }; |
148 | static const unsigned int nor_wp_pins[] = { BOOT_7 }; |
149 | static const unsigned int nor_cs_pins[] = { BOOT_14 }; |
150 | |
151 | /* sdio */ |
152 | static const unsigned int sdio_d0_pins[] = { GPIOX_0 }; |
153 | static const unsigned int sdio_d1_pins[] = { GPIOX_1 }; |
154 | static const unsigned int sdio_d2_pins[] = { GPIOX_2 }; |
155 | static const unsigned int sdio_d3_pins[] = { GPIOX_3 }; |
156 | static const unsigned int sdio_clk_pins[] = { GPIOX_4 }; |
157 | static const unsigned int sdio_cmd_pins[] = { GPIOX_5 }; |
158 | |
159 | /* sdcard */ |
160 | static const unsigned int sdcard_d0_c_pins[] = { GPIOC_0 }; |
161 | static const unsigned int sdcard_d1_c_pins[] = { GPIOC_1 }; |
162 | static const unsigned int sdcard_d2_c_pins[] = { GPIOC_2 }; |
163 | static const unsigned int sdcard_d3_c_pins[] = { GPIOC_3 }; |
164 | static const unsigned int sdcard_clk_c_pins[] = { GPIOC_4 }; |
165 | static const unsigned int sdcard_cmd_c_pins[] = { GPIOC_5 }; |
166 | |
167 | static const unsigned int sdcard_d0_z_pins[] = { GPIOZ_2 }; |
168 | static const unsigned int sdcard_d1_z_pins[] = { GPIOZ_3 }; |
169 | static const unsigned int sdcard_d2_z_pins[] = { GPIOZ_4 }; |
170 | static const unsigned int sdcard_d3_z_pins[] = { GPIOZ_5 }; |
171 | static const unsigned int sdcard_clk_z_pins[] = { GPIOZ_6 }; |
172 | static const unsigned int sdcard_cmd_z_pins[] = { GPIOZ_7 }; |
173 | |
174 | /* spi0 */ |
175 | static const unsigned int spi0_mosi_c_pins[] = { GPIOC_0 }; |
176 | static const unsigned int spi0_miso_c_pins[] = { GPIOC_1 }; |
177 | static const unsigned int spi0_ss0_c_pins[] = { GPIOC_2 }; |
178 | static const unsigned int spi0_clk_c_pins[] = { GPIOC_3 }; |
179 | |
180 | static const unsigned int spi0_mosi_x_pins[] = { GPIOX_8 }; |
181 | static const unsigned int spi0_miso_x_pins[] = { GPIOX_9 }; |
182 | static const unsigned int spi0_ss0_x_pins[] = { GPIOX_10 }; |
183 | static const unsigned int spi0_clk_x_pins[] = { GPIOX_11 }; |
184 | |
185 | /* spi1 */ |
186 | static const unsigned int spi1_mosi_pins[] = { GPIOH_4 }; |
187 | static const unsigned int spi1_miso_pins[] = { GPIOH_5 }; |
188 | static const unsigned int spi1_ss0_pins[] = { GPIOH_6 }; |
189 | static const unsigned int spi1_clk_pins[] = { GPIOH_7 }; |
190 | |
191 | /* i2c0 */ |
192 | static const unsigned int i2c0_sda_c_pins[] = { GPIOC_5 }; |
193 | static const unsigned int i2c0_sck_c_pins[] = { GPIOC_6 }; |
194 | static const unsigned int i2c0_sda_z0_pins[] = { GPIOZ_0 }; |
195 | static const unsigned int i2c0_sck_z1_pins[] = { GPIOZ_1 }; |
196 | static const unsigned int i2c0_sda_z7_pins[] = { GPIOZ_7 }; |
197 | static const unsigned int i2c0_sck_z8_pins[] = { GPIOZ_8 }; |
198 | |
199 | /* i2c1 */ |
200 | static const unsigned int i2c1_sda_x_pins[] = { GPIOX_10 }; |
201 | static const unsigned int i2c1_sck_x_pins[] = { GPIOX_11 }; |
202 | static const unsigned int i2c1_sda_h2_pins[] = { GPIOH_2 }; |
203 | static const unsigned int i2c1_sck_h3_pins[] = { GPIOH_3 }; |
204 | static const unsigned int i2c1_sda_h6_pins[] = { GPIOH_6 }; |
205 | static const unsigned int i2c1_sck_h7_pins[] = { GPIOH_7 }; |
206 | |
207 | /* i2c2 */ |
208 | static const unsigned int i2c2_sda_x_pins[] = { GPIOX_17 }; |
209 | static const unsigned int i2c2_sck_x_pins[] = { GPIOX_18 }; |
210 | static const unsigned int i2c2_sda_z_pins[] = { GPIOZ_14 }; |
211 | static const unsigned int i2c2_sck_z_pins[] = { GPIOZ_15 }; |
212 | |
213 | /* i2c3 */ |
214 | static const unsigned int i2c3_sda_h_pins[] = { GPIOH_0 }; |
215 | static const unsigned int i2c3_sck_h_pins[] = { GPIOH_1 }; |
216 | static const unsigned int i2c3_sda_a_pins[] = { GPIOA_14 }; |
217 | static const unsigned int i2c3_sck_a_pins[] = { GPIOA_15 }; |
218 | |
219 | /* uart_a */ |
220 | static const unsigned int uart_a_tx_pins[] = { GPIOX_12 }; |
221 | static const unsigned int uart_a_rx_pins[] = { GPIOX_13 }; |
222 | static const unsigned int uart_a_cts_pins[] = { GPIOX_14 }; |
223 | static const unsigned int uart_a_rts_pins[] = { GPIOX_15 }; |
224 | |
225 | /* uart_b */ |
226 | static const unsigned int uart_b_tx_pins[] = { GPIOX_6 }; |
227 | static const unsigned int uart_b_rx_pins[] = { GPIOX_7 }; |
228 | |
229 | /* uart_c */ |
230 | static const unsigned int uart_c_rts_pins[] = { GPIOH_4 }; |
231 | static const unsigned int uart_c_cts_pins[] = { GPIOH_5 }; |
232 | static const unsigned int uart_c_rx_pins[] = { GPIOH_6 }; |
233 | static const unsigned int uart_c_tx_pins[] = { GPIOH_7 }; |
234 | |
235 | /* uart_ao_a_c */ |
236 | static const unsigned int uart_ao_a_rx_c_pins[] = { GPIOC_2 }; |
237 | static const unsigned int uart_ao_a_tx_c_pins[] = { GPIOC_3 }; |
238 | |
239 | /* iso7816 */ |
240 | static const unsigned int iso7816_clk_c_pins[] = { GPIOC_5 }; |
241 | static const unsigned int iso7816_data_c_pins[] = { GPIOC_6 }; |
242 | static const unsigned int iso7816_clk_x_pins[] = { GPIOX_8 }; |
243 | static const unsigned int iso7816_data_x_pins[] = { GPIOX_9 }; |
244 | static const unsigned int iso7816_clk_h_pins[] = { GPIOH_6 }; |
245 | static const unsigned int iso7816_data_h_pins[] = { GPIOH_7 }; |
246 | static const unsigned int iso7816_clk_z_pins[] = { GPIOZ_0 }; |
247 | static const unsigned int iso7816_data_z_pins[] = { GPIOZ_1 }; |
248 | |
249 | /* eth */ |
250 | static const unsigned int eth_mdio_pins[] = { GPIOZ_0 }; |
251 | static const unsigned int eth_mdc_pins[] = { GPIOZ_1 }; |
252 | static const unsigned int eth_rgmii_rx_clk_pins[] = { GPIOZ_2 }; |
253 | static const unsigned int eth_rx_dv_pins[] = { GPIOZ_3 }; |
254 | static const unsigned int eth_rxd0_pins[] = { GPIOZ_4 }; |
255 | static const unsigned int eth_rxd1_pins[] = { GPIOZ_5 }; |
256 | static const unsigned int eth_rxd2_rgmii_pins[] = { GPIOZ_6 }; |
257 | static const unsigned int eth_rxd3_rgmii_pins[] = { GPIOZ_7 }; |
258 | static const unsigned int eth_rgmii_tx_clk_pins[] = { GPIOZ_8 }; |
259 | static const unsigned int eth_txen_pins[] = { GPIOZ_9 }; |
260 | static const unsigned int eth_txd0_pins[] = { GPIOZ_10 }; |
261 | static const unsigned int eth_txd1_pins[] = { GPIOZ_11 }; |
262 | static const unsigned int eth_txd2_rgmii_pins[] = { GPIOZ_12 }; |
263 | static const unsigned int eth_txd3_rgmii_pins[] = { GPIOZ_13 }; |
264 | static const unsigned int eth_link_led_pins[] = { GPIOZ_14 }; |
265 | static const unsigned int eth_act_led_pins[] = { GPIOZ_15 }; |
266 | |
267 | /* pwm_a */ |
268 | static const unsigned int pwm_a_pins[] = { GPIOX_6 }; |
269 | |
270 | /* pwm_b */ |
271 | static const unsigned int pwm_b_x7_pins[] = { GPIOX_7 }; |
272 | static const unsigned int pwm_b_x19_pins[] = { GPIOX_19 }; |
273 | |
274 | /* pwm_c */ |
275 | static const unsigned int pwm_c_c_pins[] = { GPIOC_4 }; |
276 | static const unsigned int pwm_c_x5_pins[] = { GPIOX_5 }; |
277 | static const unsigned int pwm_c_x8_pins[] = { GPIOX_8 }; |
278 | |
279 | /* pwm_d */ |
280 | static const unsigned int pwm_d_x3_pins[] = { GPIOX_3 }; |
281 | static const unsigned int pwm_d_x6_pins[] = { GPIOX_6 }; |
282 | |
283 | /* pwm_e */ |
284 | static const unsigned int pwm_e_pins[] = { GPIOX_16 }; |
285 | |
286 | /* pwm_f */ |
287 | static const unsigned int pwm_f_z_pins[] = { GPIOZ_12 }; |
288 | static const unsigned int pwm_f_a_pins[] = { GPIOA_11 }; |
289 | static const unsigned int pwm_f_x_pins[] = { GPIOX_7 }; |
290 | static const unsigned int pwm_f_h_pins[] = { GPIOH_5 }; |
291 | |
292 | /* cec_ao */ |
293 | static const unsigned int cec_ao_a_h_pins[] = { GPIOH_3 }; |
294 | static const unsigned int cec_ao_b_h_pins[] = { GPIOH_3 }; |
295 | |
296 | /* jtag_b */ |
297 | static const unsigned int jtag_b_tdo_pins[] = { GPIOC_0 }; |
298 | static const unsigned int jtag_b_tdi_pins[] = { GPIOC_1 }; |
299 | static const unsigned int jtag_b_clk_pins[] = { GPIOC_4 }; |
300 | static const unsigned int jtag_b_tms_pins[] = { GPIOC_5 }; |
301 | |
302 | /* bt565_a */ |
303 | static const unsigned int bt565_a_vs_pins[] = { GPIOZ_0 }; |
304 | static const unsigned int bt565_a_hs_pins[] = { GPIOZ_1 }; |
305 | static const unsigned int bt565_a_clk_pins[] = { GPIOZ_3 }; |
306 | static const unsigned int bt565_a_din0_pins[] = { GPIOZ_4 }; |
307 | static const unsigned int bt565_a_din1_pins[] = { GPIOZ_5 }; |
308 | static const unsigned int bt565_a_din2_pins[] = { GPIOZ_6 }; |
309 | static const unsigned int bt565_a_din3_pins[] = { GPIOZ_7 }; |
310 | static const unsigned int bt565_a_din4_pins[] = { GPIOZ_8 }; |
311 | static const unsigned int bt565_a_din5_pins[] = { GPIOZ_9 }; |
312 | static const unsigned int bt565_a_din6_pins[] = { GPIOZ_10 }; |
313 | static const unsigned int bt565_a_din7_pins[] = { GPIOZ_11 }; |
314 | |
315 | /* tsin_a */ |
316 | static const unsigned int tsin_a_valid_pins[] = { GPIOX_2 }; |
317 | static const unsigned int tsin_a_sop_pins[] = { GPIOX_1 }; |
318 | static const unsigned int tsin_a_din0_pins[] = { GPIOX_0 }; |
319 | static const unsigned int tsin_a_clk_pins[] = { GPIOX_3 }; |
320 | |
321 | /* tsin_b */ |
322 | static const unsigned int tsin_b_valid_x_pins[] = { GPIOX_9 }; |
323 | static const unsigned int tsin_b_sop_x_pins[] = { GPIOX_8 }; |
324 | static const unsigned int tsin_b_din0_x_pins[] = { GPIOX_10 }; |
325 | static const unsigned int tsin_b_clk_x_pins[] = { GPIOX_11 }; |
326 | |
327 | static const unsigned int tsin_b_valid_z_pins[] = { GPIOZ_2 }; |
328 | static const unsigned int tsin_b_sop_z_pins[] = { GPIOZ_3 }; |
329 | static const unsigned int tsin_b_din0_z_pins[] = { GPIOZ_4 }; |
330 | static const unsigned int tsin_b_clk_z_pins[] = { GPIOZ_5 }; |
331 | |
332 | static const unsigned int tsin_b_fail_pins[] = { GPIOZ_6 }; |
333 | static const unsigned int tsin_b_din1_pins[] = { GPIOZ_7 }; |
334 | static const unsigned int tsin_b_din2_pins[] = { GPIOZ_8 }; |
335 | static const unsigned int tsin_b_din3_pins[] = { GPIOZ_9 }; |
336 | static const unsigned int tsin_b_din4_pins[] = { GPIOZ_10 }; |
337 | static const unsigned int tsin_b_din5_pins[] = { GPIOZ_11 }; |
338 | static const unsigned int tsin_b_din6_pins[] = { GPIOZ_12 }; |
339 | static const unsigned int tsin_b_din7_pins[] = { GPIOZ_13 }; |
340 | |
341 | /* hdmitx */ |
342 | static const unsigned int hdmitx_sda_pins[] = { GPIOH_0 }; |
343 | static const unsigned int hdmitx_sck_pins[] = { GPIOH_1 }; |
344 | static const unsigned int hdmitx_hpd_in_pins[] = { GPIOH_2 }; |
345 | |
346 | /* pdm */ |
347 | static const unsigned int pdm_din0_c_pins[] = { GPIOC_0 }; |
348 | static const unsigned int pdm_din1_c_pins[] = { GPIOC_1 }; |
349 | static const unsigned int pdm_din2_c_pins[] = { GPIOC_2 }; |
350 | static const unsigned int pdm_din3_c_pins[] = { GPIOC_3 }; |
351 | static const unsigned int pdm_dclk_c_pins[] = { GPIOC_4 }; |
352 | |
353 | static const unsigned int pdm_din0_x_pins[] = { GPIOX_0 }; |
354 | static const unsigned int pdm_din1_x_pins[] = { GPIOX_1 }; |
355 | static const unsigned int pdm_din2_x_pins[] = { GPIOX_2 }; |
356 | static const unsigned int pdm_din3_x_pins[] = { GPIOX_3 }; |
357 | static const unsigned int pdm_dclk_x_pins[] = { GPIOX_4 }; |
358 | |
359 | static const unsigned int pdm_din0_z_pins[] = { GPIOZ_2 }; |
360 | static const unsigned int pdm_din1_z_pins[] = { GPIOZ_3 }; |
361 | static const unsigned int pdm_din2_z_pins[] = { GPIOZ_4 }; |
362 | static const unsigned int pdm_din3_z_pins[] = { GPIOZ_5 }; |
363 | static const unsigned int pdm_dclk_z_pins[] = { GPIOZ_6 }; |
364 | |
365 | static const unsigned int pdm_din0_a_pins[] = { GPIOA_8 }; |
366 | static const unsigned int pdm_din1_a_pins[] = { GPIOA_9 }; |
367 | static const unsigned int pdm_din2_a_pins[] = { GPIOA_6 }; |
368 | static const unsigned int pdm_din3_a_pins[] = { GPIOA_5 }; |
369 | static const unsigned int pdm_dclk_a_pins[] = { GPIOA_7 }; |
370 | |
371 | /* spdif_in */ |
372 | static const unsigned int spdif_in_h_pins[] = { GPIOH_5 }; |
373 | static const unsigned int spdif_in_a10_pins[] = { GPIOA_10 }; |
374 | static const unsigned int spdif_in_a12_pins[] = { GPIOA_12 }; |
375 | |
376 | /* spdif_out */ |
377 | static const unsigned int spdif_out_h_pins[] = { GPIOH_4 }; |
378 | static const unsigned int spdif_out_a11_pins[] = { GPIOA_11 }; |
379 | static const unsigned int spdif_out_a13_pins[] = { GPIOA_13 }; |
380 | |
381 | /* mclk0 */ |
382 | static const unsigned int mclk0_a_pins[] = { GPIOA_0 }; |
383 | |
384 | /* mclk1 */ |
385 | static const unsigned int mclk1_x_pins[] = { GPIOX_5 }; |
386 | static const unsigned int mclk1_z_pins[] = { GPIOZ_8 }; |
387 | static const unsigned int mclk1_a_pins[] = { GPIOA_11 }; |
388 | |
389 | /* tdm */ |
390 | static const unsigned int tdm_a_slv_sclk_pins[] = { GPIOX_11 }; |
391 | static const unsigned int tdm_a_slv_fs_pins[] = { GPIOX_10 }; |
392 | static const unsigned int tdm_a_sclk_pins[] = { GPIOX_11 }; |
393 | static const unsigned int tdm_a_fs_pins[] = { GPIOX_10 }; |
394 | static const unsigned int tdm_a_din0_pins[] = { GPIOX_9 }; |
395 | static const unsigned int tdm_a_din1_pins[] = { GPIOX_8 }; |
396 | static const unsigned int tdm_a_dout0_pins[] = { GPIOX_9 }; |
397 | static const unsigned int tdm_a_dout1_pins[] = { GPIOX_8 }; |
398 | |
399 | static const unsigned int tdm_b_slv_sclk_pins[] = { GPIOA_1 }; |
400 | static const unsigned int tdm_b_slv_fs_pins[] = { GPIOA_2 }; |
401 | static const unsigned int tdm_b_sclk_pins[] = { GPIOA_1 }; |
402 | static const unsigned int tdm_b_fs_pins[] = { GPIOA_2 }; |
403 | static const unsigned int tdm_b_din0_pins[] = { GPIOA_3 }; |
404 | static const unsigned int tdm_b_din1_pins[] = { GPIOA_4 }; |
405 | static const unsigned int tdm_b_din2_pins[] = { GPIOA_5 }; |
406 | static const unsigned int tdm_b_din3_a_pins[] = { GPIOA_6 }; |
407 | static const unsigned int tdm_b_din3_h_pins[] = { GPIOH_5 }; |
408 | static const unsigned int tdm_b_dout0_pins[] = { GPIOA_3 }; |
409 | static const unsigned int tdm_b_dout1_pins[] = { GPIOA_4 }; |
410 | static const unsigned int tdm_b_dout2_pins[] = { GPIOA_5 }; |
411 | static const unsigned int tdm_b_dout3_a_pins[] = { GPIOA_6 }; |
412 | static const unsigned int tdm_b_dout3_h_pins[] = { GPIOH_5 }; |
413 | |
414 | static const unsigned int tdm_c_slv_sclk_a_pins[] = { GPIOA_12 }; |
415 | static const unsigned int tdm_c_slv_fs_a_pins[] = { GPIOA_13 }; |
416 | static const unsigned int tdm_c_slv_sclk_z_pins[] = { GPIOZ_7 }; |
417 | static const unsigned int tdm_c_slv_fs_z_pins[] = { GPIOZ_6 }; |
418 | static const unsigned int tdm_c_sclk_a_pins[] = { GPIOA_12 }; |
419 | static const unsigned int tdm_c_fs_a_pins[] = { GPIOA_13 }; |
420 | static const unsigned int tdm_c_sclk_z_pins[] = { GPIOZ_7 }; |
421 | static const unsigned int tdm_c_fs_z_pins[] = { GPIOZ_6 }; |
422 | static const unsigned int tdm_c_din0_a_pins[] = { GPIOA_10 }; |
423 | static const unsigned int tdm_c_din1_a_pins[] = { GPIOA_9 }; |
424 | static const unsigned int tdm_c_din2_a_pins[] = { GPIOA_8 }; |
425 | static const unsigned int tdm_c_din3_a_pins[] = { GPIOA_7 }; |
426 | static const unsigned int tdm_c_din0_z_pins[] = { GPIOZ_2 }; |
427 | static const unsigned int tdm_c_din1_z_pins[] = { GPIOZ_3 }; |
428 | static const unsigned int tdm_c_din2_z_pins[] = { GPIOZ_4 }; |
429 | static const unsigned int tdm_c_din3_z_pins[] = { GPIOZ_5 }; |
430 | static const unsigned int tdm_c_dout0_a_pins[] = { GPIOA_10 }; |
431 | static const unsigned int tdm_c_dout1_a_pins[] = { GPIOA_9 }; |
432 | static const unsigned int tdm_c_dout2_a_pins[] = { GPIOA_8 }; |
433 | static const unsigned int tdm_c_dout3_a_pins[] = { GPIOA_7 }; |
434 | static const unsigned int tdm_c_dout0_z_pins[] = { GPIOZ_2 }; |
435 | static const unsigned int tdm_c_dout1_z_pins[] = { GPIOZ_3 }; |
436 | static const unsigned int tdm_c_dout2_z_pins[] = { GPIOZ_4 }; |
437 | static const unsigned int tdm_c_dout3_z_pins[] = { GPIOZ_5 }; |
438 | |
439 | static struct meson_pmx_group meson_g12a_periphs_groups[] = { |
440 | GPIO_GROUP(GPIOZ_0), |
441 | GPIO_GROUP(GPIOZ_1), |
442 | GPIO_GROUP(GPIOZ_2), |
443 | GPIO_GROUP(GPIOZ_3), |
444 | GPIO_GROUP(GPIOZ_4), |
445 | GPIO_GROUP(GPIOZ_5), |
446 | GPIO_GROUP(GPIOZ_6), |
447 | GPIO_GROUP(GPIOZ_7), |
448 | GPIO_GROUP(GPIOZ_8), |
449 | GPIO_GROUP(GPIOZ_9), |
450 | GPIO_GROUP(GPIOZ_10), |
451 | GPIO_GROUP(GPIOZ_11), |
452 | GPIO_GROUP(GPIOZ_12), |
453 | GPIO_GROUP(GPIOZ_13), |
454 | GPIO_GROUP(GPIOZ_14), |
455 | GPIO_GROUP(GPIOZ_15), |
456 | GPIO_GROUP(GPIOH_0), |
457 | GPIO_GROUP(GPIOH_1), |
458 | GPIO_GROUP(GPIOH_2), |
459 | GPIO_GROUP(GPIOH_3), |
460 | GPIO_GROUP(GPIOH_4), |
461 | GPIO_GROUP(GPIOH_5), |
462 | GPIO_GROUP(GPIOH_6), |
463 | GPIO_GROUP(GPIOH_7), |
464 | GPIO_GROUP(GPIOH_8), |
465 | GPIO_GROUP(BOOT_0), |
466 | GPIO_GROUP(BOOT_1), |
467 | GPIO_GROUP(BOOT_2), |
468 | GPIO_GROUP(BOOT_3), |
469 | GPIO_GROUP(BOOT_4), |
470 | GPIO_GROUP(BOOT_5), |
471 | GPIO_GROUP(BOOT_6), |
472 | GPIO_GROUP(BOOT_7), |
473 | GPIO_GROUP(BOOT_8), |
474 | GPIO_GROUP(BOOT_9), |
475 | GPIO_GROUP(BOOT_10), |
476 | GPIO_GROUP(BOOT_11), |
477 | GPIO_GROUP(BOOT_12), |
478 | GPIO_GROUP(BOOT_13), |
479 | GPIO_GROUP(BOOT_14), |
480 | GPIO_GROUP(BOOT_15), |
481 | GPIO_GROUP(GPIOC_0), |
482 | GPIO_GROUP(GPIOC_1), |
483 | GPIO_GROUP(GPIOC_2), |
484 | GPIO_GROUP(GPIOC_3), |
485 | GPIO_GROUP(GPIOC_4), |
486 | GPIO_GROUP(GPIOC_5), |
487 | GPIO_GROUP(GPIOC_6), |
488 | GPIO_GROUP(GPIOC_7), |
489 | GPIO_GROUP(GPIOA_0), |
490 | GPIO_GROUP(GPIOA_1), |
491 | GPIO_GROUP(GPIOA_2), |
492 | GPIO_GROUP(GPIOA_3), |
493 | GPIO_GROUP(GPIOA_4), |
494 | GPIO_GROUP(GPIOA_5), |
495 | GPIO_GROUP(GPIOA_6), |
496 | GPIO_GROUP(GPIOA_7), |
497 | GPIO_GROUP(GPIOA_8), |
498 | GPIO_GROUP(GPIOA_9), |
499 | GPIO_GROUP(GPIOA_10), |
500 | GPIO_GROUP(GPIOA_11), |
501 | GPIO_GROUP(GPIOA_12), |
502 | GPIO_GROUP(GPIOA_13), |
503 | GPIO_GROUP(GPIOA_14), |
504 | GPIO_GROUP(GPIOA_15), |
505 | GPIO_GROUP(GPIOX_0), |
506 | GPIO_GROUP(GPIOX_1), |
507 | GPIO_GROUP(GPIOX_2), |
508 | GPIO_GROUP(GPIOX_3), |
509 | GPIO_GROUP(GPIOX_4), |
510 | GPIO_GROUP(GPIOX_5), |
511 | GPIO_GROUP(GPIOX_6), |
512 | GPIO_GROUP(GPIOX_7), |
513 | GPIO_GROUP(GPIOX_8), |
514 | GPIO_GROUP(GPIOX_9), |
515 | GPIO_GROUP(GPIOX_10), |
516 | GPIO_GROUP(GPIOX_11), |
517 | GPIO_GROUP(GPIOX_12), |
518 | GPIO_GROUP(GPIOX_13), |
519 | GPIO_GROUP(GPIOX_14), |
520 | GPIO_GROUP(GPIOX_15), |
521 | GPIO_GROUP(GPIOX_16), |
522 | GPIO_GROUP(GPIOX_17), |
523 | GPIO_GROUP(GPIOX_18), |
524 | GPIO_GROUP(GPIOX_19), |
525 | |
526 | /* bank BOOT */ |
527 | GROUP(emmc_nand_d0, 1), |
528 | GROUP(emmc_nand_d1, 1), |
529 | GROUP(emmc_nand_d2, 1), |
530 | GROUP(emmc_nand_d3, 1), |
531 | GROUP(emmc_nand_d4, 1), |
532 | GROUP(emmc_nand_d5, 1), |
533 | GROUP(emmc_nand_d6, 1), |
534 | GROUP(emmc_nand_d7, 1), |
535 | GROUP(emmc_clk, 1), |
536 | GROUP(emmc_cmd, 1), |
537 | GROUP(emmc_nand_ds, 1), |
538 | GROUP(nand_ce0, 2), |
539 | GROUP(nand_ale, 2), |
540 | GROUP(nand_cle, 2), |
541 | GROUP(nand_wen_clk, 2), |
542 | GROUP(nand_ren_wr, 2), |
543 | GROUP(nand_rb0, 2), |
544 | GROUP(nand_ce1, 2), |
545 | GROUP(nor_hold, 3), |
546 | GROUP(nor_d, 3), |
547 | GROUP(nor_q, 3), |
548 | GROUP(nor_c, 3), |
549 | GROUP(nor_wp, 3), |
550 | GROUP(nor_cs, 3), |
551 | |
552 | /* bank GPIOZ */ |
553 | GROUP(sdcard_d0_z, 5), |
554 | GROUP(sdcard_d1_z, 5), |
555 | GROUP(sdcard_d2_z, 5), |
556 | GROUP(sdcard_d3_z, 5), |
557 | GROUP(sdcard_clk_z, 5), |
558 | GROUP(sdcard_cmd_z, 5), |
559 | GROUP(i2c0_sda_z0, 4), |
560 | GROUP(i2c0_sck_z1, 4), |
561 | GROUP(i2c0_sda_z7, 7), |
562 | GROUP(i2c0_sck_z8, 7), |
563 | GROUP(i2c2_sda_z, 3), |
564 | GROUP(i2c2_sck_z, 3), |
565 | GROUP(iso7816_clk_z, 3), |
566 | GROUP(iso7816_data_z, 3), |
567 | GROUP(eth_mdio, 1), |
568 | GROUP(eth_mdc, 1), |
569 | GROUP(eth_rgmii_rx_clk, 1), |
570 | GROUP(eth_rx_dv, 1), |
571 | GROUP(eth_rxd0, 1), |
572 | GROUP(eth_rxd1, 1), |
573 | GROUP(eth_rxd2_rgmii, 1), |
574 | GROUP(eth_rxd3_rgmii, 1), |
575 | GROUP(eth_rgmii_tx_clk, 1), |
576 | GROUP(eth_txen, 1), |
577 | GROUP(eth_txd0, 1), |
578 | GROUP(eth_txd1, 1), |
579 | GROUP(eth_txd2_rgmii, 1), |
580 | GROUP(eth_txd3_rgmii, 1), |
581 | GROUP(eth_link_led, 1), |
582 | GROUP(eth_act_led, 1), |
583 | GROUP(bt565_a_vs, 2), |
584 | GROUP(bt565_a_hs, 2), |
585 | GROUP(bt565_a_clk, 2), |
586 | GROUP(bt565_a_din0, 2), |
587 | GROUP(bt565_a_din1, 2), |
588 | GROUP(bt565_a_din2, 2), |
589 | GROUP(bt565_a_din3, 2), |
590 | GROUP(bt565_a_din4, 2), |
591 | GROUP(bt565_a_din5, 2), |
592 | GROUP(bt565_a_din6, 2), |
593 | GROUP(bt565_a_din7, 2), |
594 | GROUP(tsin_b_valid_z, 3), |
595 | GROUP(tsin_b_sop_z, 3), |
596 | GROUP(tsin_b_din0_z, 3), |
597 | GROUP(tsin_b_clk_z, 3), |
598 | GROUP(tsin_b_fail, 3), |
599 | GROUP(tsin_b_din1, 3), |
600 | GROUP(tsin_b_din2, 3), |
601 | GROUP(tsin_b_din3, 3), |
602 | GROUP(tsin_b_din4, 3), |
603 | GROUP(tsin_b_din5, 3), |
604 | GROUP(tsin_b_din6, 3), |
605 | GROUP(tsin_b_din7, 3), |
606 | GROUP(pdm_din0_z, 7), |
607 | GROUP(pdm_din1_z, 7), |
608 | GROUP(pdm_din2_z, 7), |
609 | GROUP(pdm_din3_z, 7), |
610 | GROUP(pdm_dclk_z, 7), |
611 | GROUP(tdm_c_slv_sclk_z, 6), |
612 | GROUP(tdm_c_slv_fs_z, 6), |
613 | GROUP(tdm_c_din0_z, 6), |
614 | GROUP(tdm_c_din1_z, 6), |
615 | GROUP(tdm_c_din2_z, 6), |
616 | GROUP(tdm_c_din3_z, 6), |
617 | GROUP(tdm_c_sclk_z, 4), |
618 | GROUP(tdm_c_fs_z, 4), |
619 | GROUP(tdm_c_dout0_z, 4), |
620 | GROUP(tdm_c_dout1_z, 4), |
621 | GROUP(tdm_c_dout2_z, 4), |
622 | GROUP(tdm_c_dout3_z, 4), |
623 | GROUP(mclk1_z, 4), |
624 | GROUP(pwm_f_z, 5), |
625 | |
626 | /* bank GPIOX */ |
627 | GROUP(sdio_d0, 1), |
628 | GROUP(sdio_d1, 1), |
629 | GROUP(sdio_d2, 1), |
630 | GROUP(sdio_d3, 1), |
631 | GROUP(sdio_clk, 1), |
632 | GROUP(sdio_cmd, 1), |
633 | GROUP(spi0_mosi_x, 4), |
634 | GROUP(spi0_miso_x, 4), |
635 | GROUP(spi0_ss0_x, 4), |
636 | GROUP(spi0_clk_x, 4), |
637 | GROUP(i2c1_sda_x, 5), |
638 | GROUP(i2c1_sck_x, 5), |
639 | GROUP(i2c2_sda_x, 1), |
640 | GROUP(i2c2_sck_x, 1), |
641 | GROUP(uart_a_tx, 1), |
642 | GROUP(uart_a_rx, 1), |
643 | GROUP(uart_a_cts, 1), |
644 | GROUP(uart_a_rts, 1), |
645 | GROUP(uart_b_tx, 2), |
646 | GROUP(uart_b_rx, 2), |
647 | GROUP(iso7816_clk_x, 6), |
648 | GROUP(iso7816_data_x, 6), |
649 | GROUP(pwm_a, 1), |
650 | GROUP(pwm_b_x7, 4), |
651 | GROUP(pwm_b_x19, 1), |
652 | GROUP(pwm_c_x5, 4), |
653 | GROUP(pwm_c_x8, 5), |
654 | GROUP(pwm_d_x3, 4), |
655 | GROUP(pwm_d_x6, 4), |
656 | GROUP(pwm_e, 1), |
657 | GROUP(pwm_f_x, 1), |
658 | GROUP(tsin_a_valid, 3), |
659 | GROUP(tsin_a_sop, 3), |
660 | GROUP(tsin_a_din0, 3), |
661 | GROUP(tsin_a_clk, 3), |
662 | GROUP(tsin_b_valid_x, 3), |
663 | GROUP(tsin_b_sop_x, 3), |
664 | GROUP(tsin_b_din0_x, 3), |
665 | GROUP(tsin_b_clk_x, 3), |
666 | GROUP(pdm_din0_x, 2), |
667 | GROUP(pdm_din1_x, 2), |
668 | GROUP(pdm_din2_x, 2), |
669 | GROUP(pdm_din3_x, 2), |
670 | GROUP(pdm_dclk_x, 2), |
671 | GROUP(tdm_a_slv_sclk, 2), |
672 | GROUP(tdm_a_slv_fs, 2), |
673 | GROUP(tdm_a_din0, 2), |
674 | GROUP(tdm_a_din1, 2), |
675 | GROUP(tdm_a_sclk, 1), |
676 | GROUP(tdm_a_fs, 1), |
677 | GROUP(tdm_a_dout0, 1), |
678 | GROUP(tdm_a_dout1, 1), |
679 | GROUP(mclk1_x, 2), |
680 | |
681 | /* bank GPIOC */ |
682 | GROUP(sdcard_d0_c, 1), |
683 | GROUP(sdcard_d1_c, 1), |
684 | GROUP(sdcard_d2_c, 1), |
685 | GROUP(sdcard_d3_c, 1), |
686 | GROUP(sdcard_clk_c, 1), |
687 | GROUP(sdcard_cmd_c, 1), |
688 | GROUP(spi0_mosi_c, 5), |
689 | GROUP(spi0_miso_c, 5), |
690 | GROUP(spi0_ss0_c, 5), |
691 | GROUP(spi0_clk_c, 5), |
692 | GROUP(i2c0_sda_c, 3), |
693 | GROUP(i2c0_sck_c, 3), |
694 | GROUP(uart_ao_a_rx_c, 2), |
695 | GROUP(uart_ao_a_tx_c, 2), |
696 | GROUP(iso7816_clk_c, 5), |
697 | GROUP(iso7816_data_c, 5), |
698 | GROUP(pwm_c_c, 5), |
699 | GROUP(jtag_b_tdo, 2), |
700 | GROUP(jtag_b_tdi, 2), |
701 | GROUP(jtag_b_clk, 2), |
702 | GROUP(jtag_b_tms, 2), |
703 | GROUP(pdm_din0_c, 4), |
704 | GROUP(pdm_din1_c, 4), |
705 | GROUP(pdm_din2_c, 4), |
706 | GROUP(pdm_din3_c, 4), |
707 | GROUP(pdm_dclk_c, 4), |
708 | |
709 | /* bank GPIOH */ |
710 | GROUP(spi1_mosi, 3), |
711 | GROUP(spi1_miso, 3), |
712 | GROUP(spi1_ss0, 3), |
713 | GROUP(spi1_clk, 3), |
714 | GROUP(i2c1_sda_h2, 2), |
715 | GROUP(i2c1_sck_h3, 2), |
716 | GROUP(i2c1_sda_h6, 4), |
717 | GROUP(i2c1_sck_h7, 4), |
718 | GROUP(i2c3_sda_h, 2), |
719 | GROUP(i2c3_sck_h, 2), |
720 | GROUP(uart_c_tx, 2), |
721 | GROUP(uart_c_rx, 2), |
722 | GROUP(uart_c_cts, 2), |
723 | GROUP(uart_c_rts, 2), |
724 | GROUP(iso7816_clk_h, 1), |
725 | GROUP(iso7816_data_h, 1), |
726 | GROUP(pwm_f_h, 4), |
727 | GROUP(cec_ao_a_h, 4), |
728 | GROUP(cec_ao_b_h, 5), |
729 | GROUP(hdmitx_sda, 1), |
730 | GROUP(hdmitx_sck, 1), |
731 | GROUP(hdmitx_hpd_in, 1), |
732 | GROUP(spdif_out_h, 1), |
733 | GROUP(spdif_in_h, 1), |
734 | GROUP(tdm_b_din3_h, 6), |
735 | GROUP(tdm_b_dout3_h, 5), |
736 | |
737 | /* bank GPIOA */ |
738 | GROUP(i2c3_sda_a, 2), |
739 | GROUP(i2c3_sck_a, 2), |
740 | GROUP(pdm_din0_a, 1), |
741 | GROUP(pdm_din1_a, 1), |
742 | GROUP(pdm_din2_a, 1), |
743 | GROUP(pdm_din3_a, 1), |
744 | GROUP(pdm_dclk_a, 1), |
745 | GROUP(spdif_in_a10, 1), |
746 | GROUP(spdif_in_a12, 1), |
747 | GROUP(spdif_out_a11, 1), |
748 | GROUP(spdif_out_a13, 1), |
749 | GROUP(tdm_b_slv_sclk, 2), |
750 | GROUP(tdm_b_slv_fs, 2), |
751 | GROUP(tdm_b_din0, 2), |
752 | GROUP(tdm_b_din1, 2), |
753 | GROUP(tdm_b_din2, 2), |
754 | GROUP(tdm_b_din3_a, 2), |
755 | GROUP(tdm_b_sclk, 1), |
756 | GROUP(tdm_b_fs, 1), |
757 | GROUP(tdm_b_dout0, 1), |
758 | GROUP(tdm_b_dout1, 1), |
759 | GROUP(tdm_b_dout2, 3), |
760 | GROUP(tdm_b_dout3_a, 3), |
761 | GROUP(tdm_c_slv_sclk_a, 3), |
762 | GROUP(tdm_c_slv_fs_a, 3), |
763 | GROUP(tdm_c_din0_a, 3), |
764 | GROUP(tdm_c_din1_a, 3), |
765 | GROUP(tdm_c_din2_a, 3), |
766 | GROUP(tdm_c_din3_a, 3), |
767 | GROUP(tdm_c_sclk_a, 2), |
768 | GROUP(tdm_c_fs_a, 2), |
769 | GROUP(tdm_c_dout0_a, 2), |
770 | GROUP(tdm_c_dout1_a, 2), |
771 | GROUP(tdm_c_dout2_a, 2), |
772 | GROUP(tdm_c_dout3_a, 2), |
773 | GROUP(mclk0_a, 1), |
774 | GROUP(mclk1_a, 2), |
775 | GROUP(pwm_f_a, 3), |
776 | }; |
777 | |
778 | /* uart_ao_a */ |
779 | static const unsigned int uart_ao_a_tx_pins[] = { GPIOAO_0 }; |
780 | static const unsigned int uart_ao_a_rx_pins[] = { GPIOAO_1 }; |
781 | static const unsigned int uart_ao_a_cts_pins[] = { GPIOE_0 }; |
782 | static const unsigned int uart_ao_a_rts_pins[] = { GPIOE_1 }; |
783 | |
784 | /* uart_ao_b */ |
785 | static const unsigned int uart_ao_b_tx_2_pins[] = { GPIOAO_2 }; |
786 | static const unsigned int uart_ao_b_rx_3_pins[] = { GPIOAO_3 }; |
787 | static const unsigned int uart_ao_b_tx_8_pins[] = { GPIOAO_8 }; |
788 | static const unsigned int uart_ao_b_rx_9_pins[] = { GPIOAO_9 }; |
789 | static const unsigned int uart_ao_b_cts_pins[] = { GPIOE_0 }; |
790 | static const unsigned int uart_ao_b_rts_pins[] = { GPIOE_1 }; |
791 | |
792 | /* i2c_ao */ |
793 | static const unsigned int i2c_ao_sck_pins[] = { GPIOAO_2 }; |
794 | static const unsigned int i2c_ao_sda_pins[] = { GPIOAO_3 }; |
795 | |
796 | static const unsigned int i2c_ao_sck_e_pins[] = { GPIOE_0 }; |
797 | static const unsigned int i2c_ao_sda_e_pins[] = { GPIOE_1 }; |
798 | |
799 | /* i2c_ao_slave */ |
800 | static const unsigned int i2c_ao_slave_sck_pins[] = { GPIOAO_2 }; |
801 | static const unsigned int i2c_ao_slave_sda_pins[] = { GPIOAO_3 }; |
802 | |
803 | /* ir_in */ |
804 | static const unsigned int remote_ao_input_pins[] = { GPIOAO_5 }; |
805 | |
806 | /* ir_out */ |
807 | static const unsigned int remote_ao_out_pins[] = { GPIOAO_4 }; |
808 | |
809 | /* pwm_a_e */ |
810 | static const unsigned int pwm_a_e_pins[] = { GPIOE_2 }; |
811 | |
812 | /* pwm_ao_a */ |
813 | static const unsigned int pwm_ao_a_pins[] = { GPIOAO_11 }; |
814 | static const unsigned int pwm_ao_a_hiz_pins[] = { GPIOAO_11 }; |
815 | |
816 | /* pwm_ao_b */ |
817 | static const unsigned int pwm_ao_b_pins[] = { GPIOE_0 }; |
818 | |
819 | /* pwm_ao_c */ |
820 | static const unsigned int pwm_ao_c_4_pins[] = { GPIOAO_4 }; |
821 | static const unsigned int pwm_ao_c_hiz_pins[] = { GPIOAO_4 }; |
822 | static const unsigned int pwm_ao_c_6_pins[] = { GPIOAO_6 }; |
823 | |
824 | /* pwm_ao_d */ |
825 | static const unsigned int pwm_ao_d_5_pins[] = { GPIOAO_5 }; |
826 | static const unsigned int pwm_ao_d_10_pins[] = { GPIOAO_10 }; |
827 | static const unsigned int pwm_ao_d_e_pins[] = { GPIOE_1 }; |
828 | |
829 | /* jtag_a */ |
830 | static const unsigned int jtag_a_tdi_pins[] = { GPIOAO_8 }; |
831 | static const unsigned int jtag_a_tdo_pins[] = { GPIOAO_9 }; |
832 | static const unsigned int jtag_a_clk_pins[] = { GPIOAO_6 }; |
833 | static const unsigned int jtag_a_tms_pins[] = { GPIOAO_7 }; |
834 | |
835 | /* cec_ao */ |
836 | static const unsigned int cec_ao_a_pins[] = { GPIOAO_10 }; |
837 | static const unsigned int cec_ao_b_pins[] = { GPIOAO_10 }; |
838 | |
839 | /* tsin_ao_a */ |
840 | static const unsigned int tsin_ao_asop_pins[] = { GPIOAO_6 }; |
841 | static const unsigned int tsin_ao_adin0_pins[] = { GPIOAO_7 }; |
842 | static const unsigned int tsin_ao_aclk_pins[] = { GPIOAO_8 }; |
843 | static const unsigned int tsin_ao_a_valid_pins[] = { GPIOAO_9 }; |
844 | |
845 | /* spdif_ao_out */ |
846 | static const unsigned int spdif_ao_out_pins[] = { GPIOAO_10 }; |
847 | |
848 | /* tdm_ao_b */ |
849 | static const unsigned int tdm_ao_b_slv_fs_pins[] = { GPIOAO_7 }; |
850 | static const unsigned int tdm_ao_b_slv_sclk_pins[] = { GPIOAO_8 }; |
851 | static const unsigned int tdm_ao_b_fs_pins[] = { GPIOAO_7 }; |
852 | static const unsigned int tdm_ao_b_sclk_pins[] = { GPIOAO_8 }; |
853 | static const unsigned int tdm_ao_b_din0_pins[] = { GPIOAO_4 }; |
854 | static const unsigned int tdm_ao_b_din1_pins[] = { GPIOAO_10 }; |
855 | static const unsigned int tdm_ao_b_din2_pins[] = { GPIOAO_6 }; |
856 | static const unsigned int tdm_ao_b_dout0_pins[] = { GPIOAO_4 }; |
857 | static const unsigned int tdm_ao_b_dout1_pins[] = { GPIOAO_10 }; |
858 | static const unsigned int tdm_ao_b_dout2_pins[] = { GPIOAO_6 }; |
859 | |
860 | /* mclk0_ao */ |
861 | static const unsigned int mclk0_ao_pins[] = { GPIOAO_9 }; |
862 | |
863 | static struct meson_pmx_group meson_g12a_aobus_groups[] = { |
864 | GPIO_GROUP(GPIOAO_0), |
865 | GPIO_GROUP(GPIOAO_1), |
866 | GPIO_GROUP(GPIOAO_2), |
867 | GPIO_GROUP(GPIOAO_3), |
868 | GPIO_GROUP(GPIOAO_4), |
869 | GPIO_GROUP(GPIOAO_5), |
870 | GPIO_GROUP(GPIOAO_6), |
871 | GPIO_GROUP(GPIOAO_7), |
872 | GPIO_GROUP(GPIOAO_8), |
873 | GPIO_GROUP(GPIOAO_9), |
874 | GPIO_GROUP(GPIOAO_10), |
875 | GPIO_GROUP(GPIOAO_11), |
876 | GPIO_GROUP(GPIOE_0), |
877 | GPIO_GROUP(GPIOE_1), |
878 | GPIO_GROUP(GPIOE_2), |
879 | |
880 | /* bank AO */ |
881 | GROUP(uart_ao_a_tx, 1), |
882 | GROUP(uart_ao_a_rx, 1), |
883 | GROUP(uart_ao_a_cts, 1), |
884 | GROUP(uart_ao_a_rts, 1), |
885 | GROUP(uart_ao_b_tx_2, 2), |
886 | GROUP(uart_ao_b_rx_3, 2), |
887 | GROUP(uart_ao_b_tx_8, 3), |
888 | GROUP(uart_ao_b_rx_9, 3), |
889 | GROUP(uart_ao_b_cts, 2), |
890 | GROUP(uart_ao_b_rts, 2), |
891 | GROUP(i2c_ao_sck, 1), |
892 | GROUP(i2c_ao_sda, 1), |
893 | GROUP(i2c_ao_sck_e, 4), |
894 | GROUP(i2c_ao_sda_e, 4), |
895 | GROUP(i2c_ao_slave_sck, 3), |
896 | GROUP(i2c_ao_slave_sda, 3), |
897 | GROUP(remote_ao_input, 1), |
898 | GROUP(remote_ao_out, 1), |
899 | GROUP(pwm_a_e, 3), |
900 | GROUP(pwm_ao_a, 3), |
901 | GROUP(pwm_ao_a_hiz, 2), |
902 | GROUP(pwm_ao_b, 3), |
903 | GROUP(pwm_ao_c_4, 3), |
904 | GROUP(pwm_ao_c_hiz, 4), |
905 | GROUP(pwm_ao_c_6, 3), |
906 | GROUP(pwm_ao_d_5, 3), |
907 | GROUP(pwm_ao_d_10, 3), |
908 | GROUP(pwm_ao_d_e, 3), |
909 | GROUP(jtag_a_tdi, 1), |
910 | GROUP(jtag_a_tdo, 1), |
911 | GROUP(jtag_a_clk, 1), |
912 | GROUP(jtag_a_tms, 1), |
913 | GROUP(cec_ao_a, 1), |
914 | GROUP(cec_ao_b, 2), |
915 | GROUP(tsin_ao_asop, 4), |
916 | GROUP(tsin_ao_adin0, 4), |
917 | GROUP(tsin_ao_aclk, 4), |
918 | GROUP(tsin_ao_a_valid, 4), |
919 | GROUP(spdif_ao_out, 4), |
920 | GROUP(tdm_ao_b_dout0, 5), |
921 | GROUP(tdm_ao_b_dout1, 5), |
922 | GROUP(tdm_ao_b_dout2, 5), |
923 | GROUP(tdm_ao_b_fs, 5), |
924 | GROUP(tdm_ao_b_sclk, 5), |
925 | GROUP(tdm_ao_b_din0, 6), |
926 | GROUP(tdm_ao_b_din1, 6), |
927 | GROUP(tdm_ao_b_din2, 6), |
928 | GROUP(tdm_ao_b_slv_fs, 6), |
929 | GROUP(tdm_ao_b_slv_sclk, 6), |
930 | GROUP(mclk0_ao, 5), |
931 | }; |
932 | |
933 | static const char * const gpio_periphs_groups[] = { |
934 | "GPIOZ_0" , "GPIOZ_1" , "GPIOZ_2" , "GPIOZ_3" , "GPIOZ_4" , |
935 | "GPIOZ_5" , "GPIOZ_6" , "GPIOZ_7" , "GPIOZ_8" , "GPIOZ_9" , |
936 | "GPIOZ_10" , "GPIOZ_11" , "GPIOZ_12" , "GPIOZ_13" , "GPIOZ_14" , |
937 | "GPIOZ_15" , |
938 | |
939 | "GPIOH_0" , "GPIOH_1" , "GPIOH_2" , "GPIOH_3" , "GPIOH_4" , |
940 | "GPIOH_5" , "GPIOH_6" , "GPIOH_7" , "GPIOH_8" , |
941 | |
942 | "BOOT_0" , "BOOT_1" , "BOOT_2" , "BOOT_3" , "BOOT_4" , |
943 | "BOOT_5" , "BOOT_6" , "BOOT_7" , "BOOT_8" , "BOOT_9" , |
944 | "BOOT_10" , "BOOT_11" , "BOOT_12" , "BOOT_13" , "BOOT_14" , |
945 | "BOOT_15" , |
946 | |
947 | "GPIOC_0" , "GPIOC_1" , "GPIOC_2" , "GPIOC_3" , "GPIOC_4" , |
948 | "GPIOC_5" , "GPIOC_6" , "GPIOC_7" , |
949 | |
950 | "GPIOA_0" , "GPIOA_1" , "GPIOA_2" , "GPIOA_3" , "GPIOA_4" , |
951 | "GPIOA_5" , "GPIOA_6" , "GPIOA_7" , "GPIOA_8" , "GPIOA_9" , |
952 | "GPIOA_10" , "GPIOA_11" , "GPIOA_12" , "GPIOA_13" , "GPIOA_14" , |
953 | "GPIOA_15" , |
954 | |
955 | "GPIOX_0" , "GPIOX_1" , "GPIOX_2" , "GPIOX_3" , "GPIOX_4" , |
956 | "GPIOX_5" , "GPIOX_6" , "GPIOX_7" , "GPIOX_8" , "GPIOX_9" , |
957 | "GPIOX_10" , "GPIOX_11" , "GPIOX_12" , "GPIOX_13" , "GPIOX_14" , |
958 | "GPIOX_15" , "GPIOX_16" , "GPIOX_17" , "GPIOX_18" , "GPIOX_19" , |
959 | }; |
960 | |
961 | static const char * const emmc_groups[] = { |
962 | "emmc_nand_d0" , "emmc_nand_d1" , "emmc_nand_d2" , |
963 | "emmc_nand_d3" , "emmc_nand_d4" , "emmc_nand_d5" , |
964 | "emmc_nand_d6" , "emmc_nand_d7" , |
965 | "emmc_clk" , "emmc_cmd" , "emmc_nand_ds" , |
966 | }; |
967 | |
968 | static const char * const nand_groups[] = { |
969 | "emmc_nand_d0" , "emmc_nand_d1" , "emmc_nand_d2" , |
970 | "emmc_nand_d3" , "emmc_nand_d4" , "emmc_nand_d5" , |
971 | "emmc_nand_d6" , "emmc_nand_d7" , |
972 | "nand_ce0" , "nand_ale" , "nand_cle" , |
973 | "nand_wen_clk" , "nand_ren_wr" , "nand_rb0" , |
974 | "emmc_nand_ds" , "nand_ce1" , |
975 | }; |
976 | |
977 | static const char * const nor_groups[] = { |
978 | "nor_d" , "nor_q" , "nor_c" , "nor_cs" , |
979 | "nor_hold" , "nor_wp" , |
980 | }; |
981 | |
982 | static const char * const sdio_groups[] = { |
983 | "sdio_d0" , "sdio_d1" , "sdio_d2" , "sdio_d3" , |
984 | "sdio_cmd" , "sdio_clk" , "sdio_dummy" , |
985 | }; |
986 | |
987 | static const char * const sdcard_groups[] = { |
988 | "sdcard_d0_c" , "sdcard_d1_c" , "sdcard_d2_c" , "sdcard_d3_c" , |
989 | "sdcard_clk_c" , "sdcard_cmd_c" , |
990 | "sdcard_d0_z" , "sdcard_d1_z" , "sdcard_d2_z" , "sdcard_d3_z" , |
991 | "sdcard_clk_z" , "sdcard_cmd_z" , |
992 | }; |
993 | |
994 | static const char * const spi0_groups[] = { |
995 | "spi0_mosi_c" , "spi0_miso_c" , "spi0_ss0_c" , "spi0_clk_c" , |
996 | "spi0_mosi_x" , "spi0_miso_x" , "spi0_ss0_x" , "spi0_clk_x" , |
997 | }; |
998 | |
999 | static const char * const spi1_groups[] = { |
1000 | "spi1_mosi" , "spi1_miso" , "spi1_ss0" , "spi1_clk" , |
1001 | }; |
1002 | |
1003 | static const char * const i2c0_groups[] = { |
1004 | "i2c0_sda_c" , "i2c0_sck_c" , |
1005 | "i2c0_sda_z0" , "i2c0_sck_z1" , |
1006 | "i2c0_sda_z7" , "i2c0_sck_z8" , |
1007 | }; |
1008 | |
1009 | static const char * const i2c1_groups[] = { |
1010 | "i2c1_sda_x" , "i2c1_sck_x" , |
1011 | "i2c1_sda_h2" , "i2c1_sck_h3" , |
1012 | "i2c1_sda_h6" , "i2c1_sck_h7" , |
1013 | }; |
1014 | |
1015 | static const char * const i2c2_groups[] = { |
1016 | "i2c2_sda_x" , "i2c2_sck_x" , |
1017 | "i2c2_sda_z" , "i2c2_sck_z" , |
1018 | }; |
1019 | |
1020 | static const char * const i2c3_groups[] = { |
1021 | "i2c3_sda_h" , "i2c3_sck_h" , |
1022 | "i2c3_sda_a" , "i2c3_sck_a" , |
1023 | }; |
1024 | |
1025 | static const char * const uart_a_groups[] = { |
1026 | "uart_a_tx" , "uart_a_rx" , "uart_a_cts" , "uart_a_rts" , |
1027 | }; |
1028 | |
1029 | static const char * const uart_b_groups[] = { |
1030 | "uart_b_tx" , "uart_b_rx" , |
1031 | }; |
1032 | |
1033 | static const char * const uart_c_groups[] = { |
1034 | "uart_c_tx" , "uart_c_rx" , "uart_c_cts" , "uart_c_rts" , |
1035 | }; |
1036 | |
1037 | static const char * const uart_ao_a_c_groups[] = { |
1038 | "uart_ao_a_rx_c" , "uart_ao_a_tx_c" , |
1039 | }; |
1040 | |
1041 | static const char * const iso7816_groups[] = { |
1042 | "iso7816_clk_c" , "iso7816_data_c" , |
1043 | "iso7816_clk_x" , "iso7816_data_x" , |
1044 | "iso7816_clk_h" , "iso7816_data_h" , |
1045 | "iso7816_clk_z" , "iso7816_data_z" , |
1046 | }; |
1047 | |
1048 | static const char * const eth_groups[] = { |
1049 | "eth_rxd2_rgmii" , "eth_rxd3_rgmii" , "eth_rgmii_tx_clk" , |
1050 | "eth_txd2_rgmii" , "eth_txd3_rgmii" , "eth_rgmii_rx_clk" , |
1051 | "eth_txd0" , "eth_txd1" , "eth_txen" , "eth_mdc" , |
1052 | "eth_rxd0" , "eth_rxd1" , "eth_rx_dv" , "eth_mdio" , |
1053 | "eth_link_led" , "eth_act_led" , |
1054 | }; |
1055 | |
1056 | static const char * const pwm_a_groups[] = { |
1057 | "pwm_a" , |
1058 | }; |
1059 | |
1060 | static const char * const pwm_b_groups[] = { |
1061 | "pwm_b_x7" , "pwm_b_x19" , |
1062 | }; |
1063 | |
1064 | static const char * const pwm_c_groups[] = { |
1065 | "pwm_c_c" , "pwm_c_x5" , "pwm_c_x8" , |
1066 | }; |
1067 | |
1068 | static const char * const pwm_d_groups[] = { |
1069 | "pwm_d_x3" , "pwm_d_x6" , |
1070 | }; |
1071 | |
1072 | static const char * const pwm_e_groups[] = { |
1073 | "pwm_e" , |
1074 | }; |
1075 | |
1076 | static const char * const pwm_f_groups[] = { |
1077 | "pwm_f_z" , "pwm_f_a" , "pwm_f_x" , "pwm_f_h" , |
1078 | }; |
1079 | |
1080 | static const char * const cec_ao_a_h_groups[] = { |
1081 | "cec_ao_a_h" , |
1082 | }; |
1083 | |
1084 | static const char * const cec_ao_b_h_groups[] = { |
1085 | "cec_ao_b_h" , |
1086 | }; |
1087 | |
1088 | static const char * const jtag_b_groups[] = { |
1089 | "jtag_b_tdi" , "jtag_b_tdo" , "jtag_b_clk" , "jtag_b_tms" , |
1090 | }; |
1091 | |
1092 | static const char * const bt565_a_groups[] = { |
1093 | "bt565_a_vs" , "bt565_a_hs" , "bt565_a_clk" , |
1094 | "bt565_a_din0" , "bt565_a_din1" , "bt565_a_din2" , |
1095 | "bt565_a_din3" , "bt565_a_din4" , "bt565_a_din5" , |
1096 | "bt565_a_din6" , "bt565_a_din7" , |
1097 | }; |
1098 | |
1099 | static const char * const tsin_a_groups[] = { |
1100 | "tsin_a_valid" , "tsin_a_sop" , "tsin_a_din0" , |
1101 | "tsin_a_clk" , |
1102 | }; |
1103 | |
1104 | static const char * const tsin_b_groups[] = { |
1105 | "tsin_b_valid_x" , "tsin_b_sop_x" , "tsin_b_din0_x" , "tsin_b_clk_x" , |
1106 | "tsin_b_valid_z" , "tsin_b_sop_z" , "tsin_b_din0_z" , "tsin_b_clk_z" , |
1107 | "tsin_b_fail" , "tsin_b_din1" , "tsin_b_din2" , "tsin_b_din3" , |
1108 | "tsin_b_din4" , "tsin_b_din5" , "tsin_b_din6" , "tsin_b_din7" , |
1109 | }; |
1110 | |
1111 | static const char * const hdmitx_groups[] = { |
1112 | "hdmitx_sda" , "hdmitx_sck" , "hdmitx_hpd_in" , |
1113 | }; |
1114 | |
1115 | static const char * const pdm_groups[] = { |
1116 | "pdm_din0_c" , "pdm_din1_c" , "pdm_din2_c" , "pdm_din3_c" , |
1117 | "pdm_dclk_c" , |
1118 | "pdm_din0_x" , "pdm_din1_x" , "pdm_din2_x" , "pdm_din3_x" , |
1119 | "pdm_dclk_x" , |
1120 | "pdm_din0_z" , "pdm_din1_z" , "pdm_din2_z" , "pdm_din3_z" , |
1121 | "pdm_dclk_z" , |
1122 | "pdm_din0_a" , "pdm_din1_a" , "pdm_din2_a" , "pdm_din3_a" , |
1123 | "pdm_dclk_a" , |
1124 | }; |
1125 | |
1126 | static const char * const spdif_in_groups[] = { |
1127 | "spdif_in_h" , "spdif_in_a10" , "spdif_in_a12" , |
1128 | }; |
1129 | |
1130 | static const char * const spdif_out_groups[] = { |
1131 | "spdif_out_h" , "spdif_out_a11" , "spdif_out_a13" , |
1132 | }; |
1133 | |
1134 | static const char * const mclk0_groups[] = { |
1135 | "mclk0_a" , |
1136 | }; |
1137 | |
1138 | static const char * const mclk1_groups[] = { |
1139 | "mclk1_x" , "mclk1_z" , "mclk1_a" , |
1140 | }; |
1141 | |
1142 | static const char * const tdm_a_groups[] = { |
1143 | "tdm_a_slv_sclk" , "tdm_a_slv_fs" , "tdm_a_sclk" , "tdm_a_fs" , |
1144 | "tdm_a_din0" , "tdm_a_din1" , "tdm_a_dout0" , "tdm_a_dout1" , |
1145 | }; |
1146 | |
1147 | static const char * const tdm_b_groups[] = { |
1148 | "tdm_b_slv_sclk" , "tdm_b_slv_fs" , "tdm_b_sclk" , "tdm_b_fs" , |
1149 | "tdm_b_din0" , "tdm_b_din1" , "tdm_b_din2" , |
1150 | "tdm_b_din3_a" , "tdm_b_din3_h" , |
1151 | "tdm_b_dout0" , "tdm_b_dout1" , "tdm_b_dout2" , |
1152 | "tdm_b_dout3_a" , "tdm_b_dout3_h" , |
1153 | }; |
1154 | |
1155 | static const char * const tdm_c_groups[] = { |
1156 | "tdm_c_slv_sclk_a" , "tdm_c_slv_fs_a" , |
1157 | "tdm_c_slv_sclk_z" , "tdm_c_slv_fs_z" , |
1158 | "tdm_c_sclk_a" , "tdm_c_fs_a" , |
1159 | "tdm_c_sclk_z" , "tdm_c_fs_z" , |
1160 | "tdm_c_din0_a" , "tdm_c_din1_a" , |
1161 | "tdm_c_din2_a" , "tdm_c_din3_a" , |
1162 | "tdm_c_din0_z" , "tdm_c_din1_z" , |
1163 | "tdm_c_din2_z" , "tdm_c_din3_z" , |
1164 | "tdm_c_dout0_a" , "tdm_c_dout1_a" , |
1165 | "tdm_c_dout2_a" , "tdm_c_dout3_a" , |
1166 | "tdm_c_dout0_z" , "tdm_c_dout1_z" , |
1167 | "tdm_c_dout2_z" , "tdm_c_dout3_z" , |
1168 | }; |
1169 | |
1170 | static const char * const gpio_aobus_groups[] = { |
1171 | "GPIOAO_0" , "GPIOAO_1" , "GPIOAO_2" , "GPIOAO_3" , "GPIOAO_4" , |
1172 | "GPIOAO_5" , "GPIOAO_6" , "GPIOAO_7" , "GPIOAO_8" , "GPIOAO_9" , |
1173 | "GPIOAO_10" , "GPIOAO_11" , "GPIOE_0" , "GPIOE_1" , "GPIOE_2" , |
1174 | }; |
1175 | |
1176 | static const char * const uart_ao_a_groups[] = { |
1177 | "uart_ao_a_tx" , "uart_ao_a_rx" , |
1178 | "uart_ao_a_cts" , "uart_ao_a_rts" , |
1179 | }; |
1180 | |
1181 | static const char * const uart_ao_b_groups[] = { |
1182 | "uart_ao_b_tx_2" , "uart_ao_b_rx_3" , |
1183 | "uart_ao_b_tx_8" , "uart_ao_b_rx_9" , |
1184 | "uart_ao_b_cts" , "uart_ao_b_rts" , |
1185 | }; |
1186 | |
1187 | static const char * const i2c_ao_groups[] = { |
1188 | "i2c_ao_sck" , "i2c_ao_sda" , |
1189 | "i2c_ao_sck_e" , "i2c_ao_sda_e" , |
1190 | }; |
1191 | |
1192 | static const char * const i2c_ao_slave_groups[] = { |
1193 | "i2c_ao_slave_sck" , "i2c_ao_slave_sda" , |
1194 | }; |
1195 | |
1196 | static const char * const remote_ao_input_groups[] = { |
1197 | "remote_ao_input" , |
1198 | }; |
1199 | |
1200 | static const char * const remote_ao_out_groups[] = { |
1201 | "remote_ao_out" , |
1202 | }; |
1203 | |
1204 | static const char * const pwm_a_e_groups[] = { |
1205 | "pwm_a_e" , |
1206 | }; |
1207 | |
1208 | static const char * const pwm_ao_a_groups[] = { |
1209 | "pwm_ao_a" , "pwm_ao_a_hiz" , |
1210 | }; |
1211 | |
1212 | static const char * const pwm_ao_b_groups[] = { |
1213 | "pwm_ao_b" , |
1214 | }; |
1215 | |
1216 | static const char * const pwm_ao_c_groups[] = { |
1217 | "pwm_ao_c_4" , "pwm_ao_c_hiz" , |
1218 | "pwm_ao_c_6" , |
1219 | }; |
1220 | |
1221 | static const char * const pwm_ao_d_groups[] = { |
1222 | "pwm_ao_d_5" , "pwm_ao_d_10" , "pwm_ao_d_e" , |
1223 | }; |
1224 | |
1225 | static const char * const jtag_a_groups[] = { |
1226 | "jtag_a_tdi" , "jtag_a_tdo" , "jtag_a_clk" , "jtag_a_tms" , |
1227 | }; |
1228 | |
1229 | static const char * const cec_ao_a_groups[] = { |
1230 | "cec_ao_a" , |
1231 | }; |
1232 | |
1233 | static const char * const cec_ao_b_groups[] = { |
1234 | "cec_ao_b" , |
1235 | }; |
1236 | |
1237 | static const char * const tsin_ao_a_groups[] = { |
1238 | "tsin_ao_asop" , "tsin_ao_adin0" , "tsin_ao_aclk" , "tsin_ao_a_valid" , |
1239 | }; |
1240 | |
1241 | static const char * const spdif_ao_out_groups[] = { |
1242 | "spdif_ao_out" , |
1243 | }; |
1244 | |
1245 | static const char * const tdm_ao_b_groups[] = { |
1246 | "tdm_ao_b_dout0" , "tdm_ao_b_dout1" , "tdm_ao_b_dout2" , |
1247 | "tdm_ao_b_fs" , "tdm_ao_b_sclk" , |
1248 | "tdm_ao_b_din0" , "tdm_ao_b_din1" , "tdm_ao_b_din2" , |
1249 | "tdm_ao_b_slv_fs" , "tdm_ao_b_slv_sclk" , |
1250 | }; |
1251 | |
1252 | static const char * const mclk0_ao_groups[] = { |
1253 | "mclk0_ao" , |
1254 | }; |
1255 | |
1256 | static struct meson_pmx_func meson_g12a_periphs_functions[] = { |
1257 | FUNCTION(gpio_periphs), |
1258 | FUNCTION(emmc), |
1259 | FUNCTION(nor), |
1260 | FUNCTION(spi0), |
1261 | FUNCTION(spi1), |
1262 | FUNCTION(sdio), |
1263 | FUNCTION(nand), |
1264 | FUNCTION(sdcard), |
1265 | FUNCTION(i2c0), |
1266 | FUNCTION(i2c1), |
1267 | FUNCTION(i2c2), |
1268 | FUNCTION(i2c3), |
1269 | FUNCTION(uart_a), |
1270 | FUNCTION(uart_b), |
1271 | FUNCTION(uart_c), |
1272 | FUNCTION(uart_ao_a_c), |
1273 | FUNCTION(iso7816), |
1274 | FUNCTION(eth), |
1275 | FUNCTION(pwm_a), |
1276 | FUNCTION(pwm_b), |
1277 | FUNCTION(pwm_c), |
1278 | FUNCTION(pwm_d), |
1279 | FUNCTION(pwm_e), |
1280 | FUNCTION(pwm_f), |
1281 | FUNCTION(cec_ao_a_h), |
1282 | FUNCTION(cec_ao_b_h), |
1283 | FUNCTION(jtag_b), |
1284 | FUNCTION(bt565_a), |
1285 | FUNCTION(tsin_a), |
1286 | FUNCTION(tsin_b), |
1287 | FUNCTION(hdmitx), |
1288 | FUNCTION(pdm), |
1289 | FUNCTION(spdif_out), |
1290 | FUNCTION(spdif_in), |
1291 | FUNCTION(mclk0), |
1292 | FUNCTION(mclk1), |
1293 | FUNCTION(tdm_a), |
1294 | FUNCTION(tdm_b), |
1295 | FUNCTION(tdm_c), |
1296 | }; |
1297 | |
1298 | static struct meson_pmx_func meson_g12a_aobus_functions[] = { |
1299 | FUNCTION(gpio_aobus), |
1300 | FUNCTION(uart_ao_a), |
1301 | FUNCTION(uart_ao_b), |
1302 | FUNCTION(i2c_ao), |
1303 | FUNCTION(i2c_ao_slave), |
1304 | FUNCTION(remote_ao_input), |
1305 | FUNCTION(remote_ao_out), |
1306 | FUNCTION(pwm_a_e), |
1307 | FUNCTION(pwm_ao_a), |
1308 | FUNCTION(pwm_ao_b), |
1309 | FUNCTION(pwm_ao_c), |
1310 | FUNCTION(pwm_ao_d), |
1311 | FUNCTION(jtag_a), |
1312 | FUNCTION(cec_ao_a), |
1313 | FUNCTION(cec_ao_b), |
1314 | FUNCTION(tsin_ao_a), |
1315 | FUNCTION(spdif_ao_out), |
1316 | FUNCTION(tdm_ao_b), |
1317 | FUNCTION(mclk0_ao), |
1318 | }; |
1319 | |
1320 | static struct meson_bank meson_g12a_periphs_banks[] = { |
1321 | /* name first last irq pullen pull dir out in ds */ |
1322 | BANK_DS("Z" , GPIOZ_0, GPIOZ_15, IRQID_GPIOZ_0, IRQID_GPIOZ_15, |
1323 | 4, 0, 4, 0, 12, 0, 13, 0, 14, 0, 5, 0), |
1324 | BANK_DS("H" , GPIOH_0, GPIOH_8, IRQID_GPIOH_0, IRQID_GPIOH_8, |
1325 | 3, 0, 3, 0, 9, 0, 10, 0, 11, 0, 4, 0), |
1326 | BANK_DS("BOOT" , BOOT_0, BOOT_15, IRQID_BOOT_0, IRQID_BOOT_15, |
1327 | 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0), |
1328 | BANK_DS("C" , GPIOC_0, GPIOC_7, IRQID_GPIOC_0, IRQID_GPIOC_7, |
1329 | 1, 0, 1, 0, 3, 0, 4, 0, 5, 0, 1, 0), |
1330 | BANK_DS("A" , GPIOA_0, GPIOA_15, IRQID_GPIOA_0, IRQID_GPIOA_15, |
1331 | 5, 0, 5, 0, 16, 0, 17, 0, 18, 0, 6, 0), |
1332 | BANK_DS("X" , GPIOX_0, GPIOX_19, IRQID_GPIOX_0, IRQID_GPIOX_19, |
1333 | 2, 0, 2, 0, 6, 0, 7, 0, 8, 0, 2, 0), |
1334 | }; |
1335 | |
1336 | static struct meson_bank meson_g12a_aobus_banks[] = { |
1337 | /* name first last irq pullen pull dir out in ds */ |
1338 | BANK_DS("AO" , GPIOAO_0, GPIOAO_11, IRQID_GPIOAO_0, IRQID_GPIOAO_11, |
1339 | 3, 0, 2, 0, 0, 0, 4, 0, 1, 0, 0, 0), |
1340 | /* GPIOE actually located in the AO bank */ |
1341 | BANK_DS("E" , GPIOE_0, GPIOE_2, IRQID_GPIOE_0, IRQID_GPIOE_2, |
1342 | 3, 16, 2, 16, 0, 16, 4, 16, 1, 16, 1, 0), |
1343 | }; |
1344 | |
1345 | static struct meson_pmx_bank meson_g12a_periphs_pmx_banks[] = { |
1346 | /* name first last reg offset */ |
1347 | BANK_PMX("Z" , GPIOZ_0, GPIOZ_15, 0x6, 0), |
1348 | BANK_PMX("H" , GPIOH_0, GPIOH_8, 0xb, 0), |
1349 | BANK_PMX("BOOT" , BOOT_0, BOOT_15, 0x0, 0), |
1350 | BANK_PMX("C" , GPIOC_0, GPIOC_7, 0x9, 0), |
1351 | BANK_PMX("A" , GPIOA_0, GPIOA_15, 0xd, 0), |
1352 | BANK_PMX("X" , GPIOX_0, GPIOX_19, 0x3, 0), |
1353 | }; |
1354 | |
1355 | static struct meson_axg_pmx_data meson_g12a_periphs_pmx_banks_data = { |
1356 | .pmx_banks = meson_g12a_periphs_pmx_banks, |
1357 | .num_pmx_banks = ARRAY_SIZE(meson_g12a_periphs_pmx_banks), |
1358 | }; |
1359 | |
1360 | static struct meson_pmx_bank meson_g12a_aobus_pmx_banks[] = { |
1361 | BANK_PMX("AO" , GPIOAO_0, GPIOAO_11, 0x0, 0), |
1362 | BANK_PMX("E" , GPIOE_0, GPIOE_2, 0x1, 16), |
1363 | }; |
1364 | |
1365 | static struct meson_axg_pmx_data meson_g12a_aobus_pmx_banks_data = { |
1366 | .pmx_banks = meson_g12a_aobus_pmx_banks, |
1367 | .num_pmx_banks = ARRAY_SIZE(meson_g12a_aobus_pmx_banks), |
1368 | }; |
1369 | |
1370 | static int (struct meson_pinctrl *pc) |
1371 | { |
1372 | pc->reg_pull = pc->reg_gpio; |
1373 | pc->reg_pullen = pc->reg_gpio; |
1374 | |
1375 | return 0; |
1376 | } |
1377 | |
1378 | static struct meson_pinctrl_data meson_g12a_periphs_pinctrl_data = { |
1379 | .name = "periphs-banks" , |
1380 | .pins = meson_g12a_periphs_pins, |
1381 | .groups = meson_g12a_periphs_groups, |
1382 | .funcs = meson_g12a_periphs_functions, |
1383 | .banks = meson_g12a_periphs_banks, |
1384 | .num_pins = ARRAY_SIZE(meson_g12a_periphs_pins), |
1385 | .num_groups = ARRAY_SIZE(meson_g12a_periphs_groups), |
1386 | .num_funcs = ARRAY_SIZE(meson_g12a_periphs_functions), |
1387 | .num_banks = ARRAY_SIZE(meson_g12a_periphs_banks), |
1388 | .pmx_ops = &meson_axg_pmx_ops, |
1389 | .pmx_data = &meson_g12a_periphs_pmx_banks_data, |
1390 | }; |
1391 | |
1392 | static struct meson_pinctrl_data meson_g12a_aobus_pinctrl_data = { |
1393 | .name = "aobus-banks" , |
1394 | .pins = meson_g12a_aobus_pins, |
1395 | .groups = meson_g12a_aobus_groups, |
1396 | .funcs = meson_g12a_aobus_functions, |
1397 | .banks = meson_g12a_aobus_banks, |
1398 | .num_pins = ARRAY_SIZE(meson_g12a_aobus_pins), |
1399 | .num_groups = ARRAY_SIZE(meson_g12a_aobus_groups), |
1400 | .num_funcs = ARRAY_SIZE(meson_g12a_aobus_functions), |
1401 | .num_banks = ARRAY_SIZE(meson_g12a_aobus_banks), |
1402 | .pmx_ops = &meson_axg_pmx_ops, |
1403 | .pmx_data = &meson_g12a_aobus_pmx_banks_data, |
1404 | .parse_dt = meson_g12a_aobus_parse_dt_extra, |
1405 | }; |
1406 | |
1407 | static const struct of_device_id meson_g12a_pinctrl_dt_match[] = { |
1408 | { |
1409 | .compatible = "amlogic,meson-g12a-periphs-pinctrl" , |
1410 | .data = &meson_g12a_periphs_pinctrl_data, |
1411 | }, |
1412 | { |
1413 | .compatible = "amlogic,meson-g12a-aobus-pinctrl" , |
1414 | .data = &meson_g12a_aobus_pinctrl_data, |
1415 | }, |
1416 | { }, |
1417 | }; |
1418 | MODULE_DEVICE_TABLE(of, meson_g12a_pinctrl_dt_match); |
1419 | |
1420 | static struct platform_driver meson_g12a_pinctrl_driver = { |
1421 | .probe = meson_pinctrl_probe, |
1422 | .driver = { |
1423 | .name = "meson-g12a-pinctrl" , |
1424 | .of_match_table = meson_g12a_pinctrl_dt_match, |
1425 | }, |
1426 | }; |
1427 | |
1428 | module_platform_driver(meson_g12a_pinctrl_driver); |
1429 | MODULE_LICENSE("Dual BSD/GPL" ); |
1430 | |