1 // SPDX-License-Identifier: GPL-2.0
3 * SP7021 Pin Controller Driver.
4 * Copyright (C) Sunplus Tech / Tibbo Tech.
7 #include <linux/gpio/driver.h>
8 #include <linux/kernel.h>
9 #include <linux/pinctrl/pinctrl.h>
13 #define D_PIS(x, y) "P" __stringify(x) "_0" __stringify(y)
14 #define D(x, y) ((x) * 8 + (y))
15 #define P(x, y) PINCTRL_PIN(D(x, y), D_PIS(x, y))
17 const char * const sppctl_gpio_list_s
[] = {
18 D_PIS(0, 0), D_PIS(0, 1), D_PIS(0, 2), D_PIS(0, 3),
19 D_PIS(0, 4), D_PIS(0, 5), D_PIS(0, 6), D_PIS(0, 7),
20 D_PIS(1, 0), D_PIS(1, 1), D_PIS(1, 2), D_PIS(1, 3),
21 D_PIS(1, 4), D_PIS(1, 5), D_PIS(1, 6), D_PIS(1, 7),
22 D_PIS(2, 0), D_PIS(2, 1), D_PIS(2, 2), D_PIS(2, 3),
23 D_PIS(2, 4), D_PIS(2, 5), D_PIS(2, 6), D_PIS(2, 7),
24 D_PIS(3, 0), D_PIS(3, 1), D_PIS(3, 2), D_PIS(3, 3),
25 D_PIS(3, 4), D_PIS(3, 5), D_PIS(3, 6), D_PIS(3, 7),
26 D_PIS(4, 0), D_PIS(4, 1), D_PIS(4, 2), D_PIS(4, 3),
27 D_PIS(4, 4), D_PIS(4, 5), D_PIS(4, 6), D_PIS(4, 7),
28 D_PIS(5, 0), D_PIS(5, 1), D_PIS(5, 2), D_PIS(5, 3),
29 D_PIS(5, 4), D_PIS(5, 5), D_PIS(5, 6), D_PIS(5, 7),
30 D_PIS(6, 0), D_PIS(6, 1), D_PIS(6, 2), D_PIS(6, 3),
31 D_PIS(6, 4), D_PIS(6, 5), D_PIS(6, 6), D_PIS(6, 7),
32 D_PIS(7, 0), D_PIS(7, 1), D_PIS(7, 2), D_PIS(7, 3),
33 D_PIS(7, 4), D_PIS(7, 5), D_PIS(7, 6), D_PIS(7, 7),
34 D_PIS(8, 0), D_PIS(8, 1), D_PIS(8, 2), D_PIS(8, 3),
35 D_PIS(8, 4), D_PIS(8, 5), D_PIS(8, 6), D_PIS(8, 7),
36 D_PIS(9, 0), D_PIS(9, 1), D_PIS(9, 2), D_PIS(9, 3),
37 D_PIS(9, 4), D_PIS(9, 5), D_PIS(9, 6), D_PIS(9, 7),
38 D_PIS(10, 0), D_PIS(10, 1), D_PIS(10, 2), D_PIS(10, 3),
39 D_PIS(10, 4), D_PIS(10, 5), D_PIS(10, 6), D_PIS(10, 7),
40 D_PIS(11, 0), D_PIS(11, 1), D_PIS(11, 2), D_PIS(11, 3),
41 D_PIS(11, 4), D_PIS(11, 5), D_PIS(11, 6), D_PIS(11, 7),
42 D_PIS(12, 0), D_PIS(12, 1), D_PIS(12, 2),
45 const size_t sppctl_gpio_list_sz
= ARRAY_SIZE(sppctl_gpio_list_s
);
47 const unsigned int sppctl_pins_gpio
[] = {
48 D(0, 0), D(0, 1), D(0, 2), D(0, 3), D(0, 4), D(0, 5), D(0, 6), D(0, 7),
49 D(1, 0), D(1, 1), D(1, 2), D(1, 3), D(1, 4), D(1, 5), D(1, 6), D(1, 7),
50 D(2, 0), D(2, 1), D(2, 2), D(2, 3), D(2, 4), D(2, 5), D(2, 6), D(2, 7),
51 D(3, 0), D(3, 1), D(3, 2), D(3, 3), D(3, 4), D(3, 5), D(3, 6), D(3, 7),
52 D(4, 0), D(4, 1), D(4, 2), D(4, 3), D(4, 4), D(4, 5), D(4, 6), D(4, 7),
53 D(5, 0), D(5, 1), D(5, 2), D(5, 3), D(5, 4), D(5, 5), D(5, 6), D(5, 7),
54 D(6, 0), D(6, 1), D(6, 2), D(6, 3), D(6, 4), D(6, 5), D(6, 6), D(6, 7),
55 D(7, 0), D(7, 1), D(7, 2), D(7, 3), D(7, 4), D(7, 5), D(7, 6), D(7, 7),
56 D(8, 0), D(8, 1), D(8, 2), D(8, 3), D(8, 4), D(8, 5), D(8, 6), D(8, 7),
57 D(9, 0), D(9, 1), D(9, 2), D(9, 3), D(9, 4), D(9, 5), D(9, 6), D(9, 7),
58 D(10, 0), D(10, 1), D(10, 2), D(10, 3), D(10, 4), D(10, 5), D(10, 6), D(10, 7),
59 D(11, 0), D(11, 1), D(11, 2), D(11, 3), D(11, 4), D(11, 5), D(11, 6), D(11, 7),
60 D(12, 0), D(12, 1), D(12, 2),
63 const struct pinctrl_pin_desc sppctl_pins_all
[] = {
64 /* gpio and iop only */
65 P(0, 0), P(0, 1), P(0, 2), P(0, 3), P(0, 4), P(0, 5), P(0, 6), P(0, 7),
66 /* gpio, iop, muxable */
67 P(1, 0), P(1, 1), P(1, 2), P(1, 3), P(1, 4), P(1, 5), P(1, 6), P(1, 7),
68 P(2, 0), P(2, 1), P(2, 2), P(2, 3), P(2, 4), P(2, 5), P(2, 6), P(2, 7),
69 P(3, 0), P(3, 1), P(3, 2), P(3, 3), P(3, 4), P(3, 5), P(3, 6), P(3, 7),
70 P(4, 0), P(4, 1), P(4, 2), P(4, 3), P(4, 4), P(4, 5), P(4, 6), P(4, 7),
71 P(5, 0), P(5, 1), P(5, 2), P(5, 3), P(5, 4), P(5, 5), P(5, 6), P(5, 7),
72 P(6, 0), P(6, 1), P(6, 2), P(6, 3), P(6, 4), P(6, 5), P(6, 6), P(6, 7),
73 P(7, 0), P(7, 1), P(7, 2), P(7, 3), P(7, 4), P(7, 5), P(7, 6), P(7, 7),
74 P(8, 0), P(8, 1), P(8, 2), P(8, 3), P(8, 4), P(8, 5), P(8, 6), P(8, 7),
75 /* gpio and iop only */
76 P(9, 0), P(9, 1), P(9, 2), P(9, 3), P(9, 4), P(9, 5), P(9, 6), P(9, 7),
77 P(10, 0), P(10, 1), P(10, 2), P(10, 3), P(10, 4), P(10, 5), P(10, 6), P(10, 7),
78 P(11, 0), P(11, 1), P(11, 2), P(11, 3), P(11, 4), P(11, 5), P(11, 6), P(11, 7),
79 P(12, 0), P(12, 1), P(12, 2),
82 const size_t sppctl_pins_all_sz
= ARRAY_SIZE(sppctl_pins_all
);
84 const char * const sppctl_pmux_list_s
[] = {
86 D_PIS(1, 0), D_PIS(1, 1), D_PIS(1, 2), D_PIS(1, 3),
87 D_PIS(1, 4), D_PIS(1, 5), D_PIS(1, 6), D_PIS(1, 7),
88 D_PIS(2, 0), D_PIS(2, 1), D_PIS(2, 2), D_PIS(2, 3),
89 D_PIS(2, 4), D_PIS(2, 5), D_PIS(2, 6), D_PIS(2, 7),
90 D_PIS(3, 0), D_PIS(3, 1), D_PIS(3, 2), D_PIS(3, 3),
91 D_PIS(3, 4), D_PIS(3, 5), D_PIS(3, 6), D_PIS(3, 7),
92 D_PIS(4, 0), D_PIS(4, 1), D_PIS(4, 2), D_PIS(4, 3),
93 D_PIS(4, 4), D_PIS(4, 5), D_PIS(4, 6), D_PIS(4, 7),
94 D_PIS(5, 0), D_PIS(5, 1), D_PIS(5, 2), D_PIS(5, 3),
95 D_PIS(5, 4), D_PIS(5, 5), D_PIS(5, 6), D_PIS(5, 7),
96 D_PIS(6, 0), D_PIS(6, 1), D_PIS(6, 2), D_PIS(6, 3),
97 D_PIS(6, 4), D_PIS(6, 5), D_PIS(6, 6), D_PIS(6, 7),
98 D_PIS(7, 0), D_PIS(7, 1), D_PIS(7, 2), D_PIS(7, 3),
99 D_PIS(7, 4), D_PIS(7, 5), D_PIS(7, 6), D_PIS(7, 7),
100 D_PIS(8, 0), D_PIS(8, 1), D_PIS(8, 2), D_PIS(8, 3),
101 D_PIS(8, 4), D_PIS(8, 5), D_PIS(8, 6), D_PIS(8, 7),
104 const size_t sppctl_pmux_list_sz
= ARRAY_SIZE(sppctl_pmux_list_s
);
106 static const unsigned int pins_spif1
[] = {
107 D(10, 3), D(10, 4), D(10, 6), D(10, 7),
110 static const unsigned int pins_spif2
[] = {
111 D(9, 4), D(9, 6), D(9, 7), D(10, 1),
114 static const struct sppctl_grp sp7021grps_spif
[] = {
115 EGRP("SPI_FLASH1", 1, pins_spif1
),
116 EGRP("SPI_FLASH2", 2, pins_spif2
),
119 static const unsigned int pins_spi41
[] = {
123 static const unsigned int pins_spi42
[] = {
127 static const struct sppctl_grp sp7021grps_spi4
[] = {
128 EGRP("SPI_FLASH_4BIT1", 1, pins_spi41
),
129 EGRP("SPI_FLASH_4BIT2", 2, pins_spi42
),
132 static const unsigned int pins_snan
[] = {
133 D(9, 4), D(9, 5), D(9, 6), D(9, 7), D(10, 0), D(10, 1),
136 static const struct sppctl_grp sp7021grps_snan
[] = {
137 EGRP("SPI_NAND", 1, pins_snan
),
140 static const unsigned int pins_emmc
[] = {
141 D(9, 0), D(9, 1), D(9, 2), D(9, 3), D(9, 4), D(9, 5),
142 D(9, 6), D(9, 7), D(10, 0), D(10, 1),
145 static const struct sppctl_grp sp7021grps_emmc
[] = {
146 EGRP("CARD0_EMMC", 1, pins_emmc
),
149 static const unsigned int pins_sdsd
[] = {
150 D(8, 1), D(8, 2), D(8, 3), D(8, 4), D(8, 5), D(8, 6),
153 static const struct sppctl_grp sp7021grps_sdsd
[] = {
154 EGRP("SD_CARD", 1, pins_sdsd
),
157 static const unsigned int pins_uar0
[] = {
161 static const struct sppctl_grp sp7021grps_uar0
[] = {
162 EGRP("UA0", 1, pins_uar0
),
165 static const unsigned int pins_adbg1
[] = {
169 static const unsigned int pins_adbg2
[] = {
173 static const struct sppctl_grp sp7021grps_adbg
[] = {
174 EGRP("ACHIP_DEBUG1", 1, pins_adbg1
),
175 EGRP("ACHIP_DEBUG2", 2, pins_adbg2
),
178 static const unsigned int pins_aua2axi1
[] = {
179 D(2, 0), D(2, 1), D(2, 2),
182 static const unsigned int pins_aua2axi2
[] = {
183 D(1, 0), D(1, 1), D(1, 2),
186 static const struct sppctl_grp sp7021grps_au2x
[] = {
187 EGRP("ACHIP_UA2AXI1", 1, pins_aua2axi1
),
188 EGRP("ACHIP_UA2AXI2", 2, pins_aua2axi2
),
191 static const unsigned int pins_fpga
[] = {
192 D(0, 2), D(0, 3), D(0, 4), D(0, 5), D(0, 6), D(0, 7),
193 D(1, 0), D(1, 1), D(1, 2), D(1, 3), D(1, 4), D(1, 5),
194 D(1, 6), D(1, 7), D(2, 0), D(2, 1), D(2, 2), D(2, 3),
195 D(2, 4), D(2, 5), D(2, 6), D(2, 7), D(3, 0), D(3, 1),
196 D(3, 2), D(3, 3), D(3, 4), D(3, 5), D(3, 6), D(3, 7),
197 D(4, 0), D(4, 1), D(4, 2), D(4, 3), D(4, 4), D(4, 5),
198 D(4, 6), D(4, 7), D(5, 0), D(5, 1), D(5, 2),
201 static const struct sppctl_grp sp7021grps_fpga
[] = {
202 EGRP("FPGA_IFX", 1, pins_fpga
),
205 static const unsigned int pins_hdmi1
[] = {
206 D(10, 6), D(12, 2), D(12, 1),
209 static const unsigned int pins_hdmi2
[] = {
210 D(8, 3), D(8, 5), D(8, 6),
213 static const unsigned int pins_hdmi3
[] = {
214 D(7, 4), D(7, 6), D(7, 7),
217 static const struct sppctl_grp sp7021grps_hdmi
[] = {
218 EGRP("HDMI_TX1", 1, pins_hdmi1
),
219 EGRP("HDMI_TX2", 2, pins_hdmi2
),
220 EGRP("HDMI_TX3", 3, pins_hdmi3
),
223 static const unsigned int pins_eadc
[] = {
224 D(1, 0), D(1, 1), D(1, 2), D(1, 3), D(1, 4), D(1, 5), D(1, 6),
227 static const struct sppctl_grp sp7021grps_eadc
[] = {
228 EGRP("AUD_EXT_ADC_IFX0", 1, pins_eadc
),
231 static const unsigned int pins_edac
[] = {
232 D(2, 5), D(2, 6), D(2, 7), D(3, 0), D(3, 1), D(3, 2), D(3, 4),
235 static const struct sppctl_grp sp7021grps_edac
[] = {
236 EGRP("AUD_EXT_DAC_IFX0", 1, pins_edac
),
239 static const unsigned int pins_spdi
[] = {
243 static const struct sppctl_grp sp7021grps_spdi
[] = {
244 EGRP("AUD_IEC_RX0", 1, pins_spdi
),
247 static const unsigned int pins_spdo
[] = {
251 static const struct sppctl_grp sp7021grps_spdo
[] = {
252 EGRP("AUD_IEC_TX0", 1, pins_spdo
),
255 static const unsigned int pins_tdmt
[] = {
256 D(2, 5), D(2, 6), D(2, 7), D(3, 0), D(3, 1), D(3, 2),
259 static const struct sppctl_grp sp7021grps_tdmt
[] = {
260 EGRP("TDMTX_IFX0", 1, pins_tdmt
),
263 static const unsigned int pins_tdmr
[] = {
264 D(1, 7), D(2, 0), D(2, 1), D(2, 2),
267 static const struct sppctl_grp sp7021grps_tdmr
[] = {
268 EGRP("TDMRX_IFX0", 1, pins_tdmr
),
271 static const unsigned int pins_pdmr
[] = {
272 D(1, 7), D(2, 0), D(2, 1), D(2, 2), D(2, 3),
275 static const struct sppctl_grp sp7021grps_pdmr
[] = {
276 EGRP("PDMRX_IFX0", 1, pins_pdmr
),
279 static const unsigned int pins_pcmt
[] = {
280 D(3, 7), D(4, 0), D(4, 1), D(4, 2), D(4, 3), D(4, 4),
283 static const struct sppctl_grp sp7021grps_pcmt
[] = {
284 EGRP("PCM_IEC_TX", 1, pins_pcmt
),
287 static const unsigned int pins_lcdi
[] = {
288 D(1, 4), D(1, 5), D(1, 6), D(1, 7), D(2, 0), D(2, 1), D(2, 2), D(2, 3),
289 D(2, 4), D(2, 5), D(2, 6), D(2, 7), D(3, 0), D(3, 1), D(3, 2), D(3, 3),
290 D(3, 4), D(3, 5), D(3, 6), D(3, 7), D(4, 0), D(4, 1), D(4, 2), D(4, 3),
291 D(4, 4), D(4, 5), D(4, 6), D(4, 7),
294 static const struct sppctl_grp sp7021grps_lcdi
[] = {
295 EGRP("LCDIF", 1, pins_lcdi
),
298 static const unsigned int pins_dvdd
[] = {
299 D(7, 0), D(7, 1), D(7, 2), D(7, 3), D(7, 4), D(7, 5), D(7, 6), D(7, 7),
300 D(8, 0), D(8, 1), D(8, 2), D(8, 3), D(8, 4), D(8, 5),
303 static const struct sppctl_grp sp7021grps_dvdd
[] = {
304 EGRP("DVD_DSP_DEBUG", 1, pins_dvdd
),
307 static const unsigned int pins_i2cd
[] = {
311 static const struct sppctl_grp sp7021grps_i2cd
[] = {
312 EGRP("I2C_DEBUG", 1, pins_i2cd
),
315 static const unsigned int pins_i2cs
[] = {
319 static const struct sppctl_grp sp7021grps_i2cs
[] = {
320 EGRP("I2C_SLAVE", 1, pins_i2cs
),
323 static const unsigned int pins_wakp
[] = {
327 static const struct sppctl_grp sp7021grps_wakp
[] = {
328 EGRP("WAKEUP", 1, pins_wakp
),
331 static const unsigned int pins_u2ax
[] = {
332 D(2, 0), D(2, 1), D(3, 0), D(3, 1),
335 static const struct sppctl_grp sp7021grps_u2ax
[] = {
336 EGRP("UART2AXI", 1, pins_u2ax
),
339 static const unsigned int pins_u0ic
[] = {
340 D(0, 0), D(0, 1), D(0, 4), D(0, 5), D(1, 0), D(1, 1),
343 static const struct sppctl_grp sp7021grps_u0ic
[] = {
344 EGRP("USB0_I2C", 1, pins_u0ic
),
347 static const unsigned int pins_u1ic
[] = {
348 D(0, 2), D(0, 3), D(0, 6), D(0, 7), D(1, 2), D(1, 3),
351 static const struct sppctl_grp sp7021grps_u1ic
[] = {
352 EGRP("USB1_I2C", 1, pins_u1ic
),
355 static const unsigned int pins_u0ot
[] = {
359 static const struct sppctl_grp sp7021grps_u0ot
[] = {
360 EGRP("USB0_OTG", 1, pins_u0ot
),
363 static const unsigned int pins_u1ot
[] = {
367 static const struct sppctl_grp sp7021grps_u1ot
[] = {
368 EGRP("USB1_OTG", 1, pins_u1ot
),
371 static const unsigned int pins_uphd
[] = {
372 D(0, 1), D(0, 2), D(0, 3), D(7, 4), D(7, 5), D(7, 6),
373 D(7, 7), D(8, 0), D(8, 1), D(8, 2), D(8, 3),
374 D(9, 7), D(10, 2), D(10, 3), D(10, 4),
377 static const struct sppctl_grp sp7021grps_up0d
[] = {
378 EGRP("UPHY0_DEBUG", 1, pins_uphd
),
381 static const struct sppctl_grp sp7021grps_up1d
[] = {
382 EGRP("UPHY1_DEBUG", 1, pins_uphd
),
385 static const unsigned int pins_upex
[] = {
386 D(0, 0), D(0, 1), D(0, 2), D(0, 3), D(0, 4), D(0, 5), D(0, 6), D(0, 7),
387 D(1, 0), D(1, 1), D(1, 2), D(1, 3), D(1, 4), D(1, 5), D(1, 6), D(1, 7),
388 D(2, 0), D(2, 1), D(2, 2), D(2, 3), D(2, 4), D(2, 5), D(2, 6), D(2, 7),
389 D(3, 0), D(3, 1), D(3, 2), D(3, 3), D(3, 4), D(3, 5), D(3, 6), D(3, 7),
390 D(4, 0), D(4, 1), D(4, 2), D(4, 3), D(4, 4), D(4, 5), D(4, 6), D(4, 7),
391 D(5, 0), D(5, 1), D(5, 2), D(5, 3), D(5, 4), D(5, 5), D(5, 6), D(5, 7),
392 D(6, 0), D(6, 1), D(6, 2), D(6, 3), D(6, 4), D(6, 5), D(6, 6), D(6, 7),
393 D(7, 0), D(7, 1), D(7, 2), D(7, 3), D(7, 4), D(7, 5), D(7, 6), D(7, 7),
394 D(8, 0), D(8, 1), D(8, 2), D(8, 3), D(8, 4), D(8, 5), D(8, 6), D(8, 7),
395 D(9, 0), D(9, 1), D(9, 2), D(9, 3), D(9, 4), D(9, 5), D(9, 6), D(9, 7),
396 D(10, 0), D(10, 1), D(10, 2), D(10, 3), D(10, 4), D(10, 5), D(10, 6), D(10, 7),
399 static const struct sppctl_grp sp7021grps_upex
[] = {
400 EGRP("UPHY0_EXT", 1, pins_upex
),
403 static const unsigned int pins_prp1
[] = {
405 D(1, 0), D(1, 1), D(1, 2), D(1, 3), D(1, 4), D(1, 5), D(1, 6), D(1, 7),
406 D(2, 1), D(2, 2), D(2, 3), D(2, 4), D(2, 5), D(2, 6), D(2, 7),
407 D(3, 0), D(3, 1), D(3, 2),
410 static const unsigned int pins_prp2
[] = {
411 D(3, 4), D(3, 6), D(3, 7),
412 D(4, 0), D(4, 1), D(4, 2), D(4, 3), D(4, 4), D(4, 5), D(4, 6), D(4, 7),
413 D(5, 0), D(5, 1), D(5, 2), D(5, 3), D(5, 4), D(5, 5), D(5, 6), D(5, 7),
417 static const struct sppctl_grp sp7021grps_prbp
[] = {
418 EGRP("PROBE_PORT1", 1, pins_prp1
),
419 EGRP("PROBE_PORT2", 2, pins_prp2
),
423 * Due to compatible reason, the first valid item should start at the third
424 * position of the array. Please keep the first two items of the table
427 const struct sppctl_func sppctl_list_funcs
[] = {
428 FNCN("", pinmux_type_fpmx
, 0x00, 0, 0),
429 FNCN("", pinmux_type_fpmx
, 0x00, 0, 0),
431 FNCN("L2SW_CLK_OUT", pinmux_type_fpmx
, 0x00, 0, 7),
432 FNCN("L2SW_MAC_SMI_MDC", pinmux_type_fpmx
, 0x00, 8, 7),
433 FNCN("L2SW_LED_FLASH0", pinmux_type_fpmx
, 0x01, 0, 7),
434 FNCN("L2SW_LED_FLASH1", pinmux_type_fpmx
, 0x01, 8, 7),
435 FNCN("L2SW_LED_ON0", pinmux_type_fpmx
, 0x02, 0, 7),
436 FNCN("L2SW_LED_ON1", pinmux_type_fpmx
, 0x02, 8, 7),
437 FNCN("L2SW_MAC_SMI_MDIO", pinmux_type_fpmx
, 0x03, 0, 7),
438 FNCN("L2SW_P0_MAC_RMII_TXEN", pinmux_type_fpmx
, 0x03, 8, 7),
439 FNCN("L2SW_P0_MAC_RMII_TXD0", pinmux_type_fpmx
, 0x04, 0, 7),
440 FNCN("L2SW_P0_MAC_RMII_TXD1", pinmux_type_fpmx
, 0x04, 8, 7),
441 FNCN("L2SW_P0_MAC_RMII_CRSDV", pinmux_type_fpmx
, 0x05, 0, 7),
442 FNCN("L2SW_P0_MAC_RMII_RXD0", pinmux_type_fpmx
, 0x05, 8, 7),
443 FNCN("L2SW_P0_MAC_RMII_RXD1", pinmux_type_fpmx
, 0x06, 0, 7),
444 FNCN("L2SW_P0_MAC_RMII_RXER", pinmux_type_fpmx
, 0x06, 8, 7),
445 FNCN("L2SW_P1_MAC_RMII_TXEN", pinmux_type_fpmx
, 0x07, 0, 7),
446 FNCN("L2SW_P1_MAC_RMII_TXD0", pinmux_type_fpmx
, 0x07, 8, 7),
447 FNCN("L2SW_P1_MAC_RMII_TXD1", pinmux_type_fpmx
, 0x08, 0, 7),
448 FNCN("L2SW_P1_MAC_RMII_CRSDV", pinmux_type_fpmx
, 0x08, 8, 7),
449 FNCN("L2SW_P1_MAC_RMII_RXD0", pinmux_type_fpmx
, 0x09, 0, 7),
450 FNCN("L2SW_P1_MAC_RMII_RXD1", pinmux_type_fpmx
, 0x09, 8, 7),
451 FNCN("L2SW_P1_MAC_RMII_RXER", pinmux_type_fpmx
, 0x0A, 0, 7),
452 FNCN("DAISY_MODE", pinmux_type_fpmx
, 0x0A, 8, 7),
453 FNCN("SDIO_CLK", pinmux_type_fpmx
, 0x0B, 0, 7), /* 1x SDIO */
454 FNCN("SDIO_CMD", pinmux_type_fpmx
, 0x0B, 8, 7),
455 FNCN("SDIO_D0", pinmux_type_fpmx
, 0x0C, 0, 7),
456 FNCN("SDIO_D1", pinmux_type_fpmx
, 0x0C, 8, 7),
457 FNCN("SDIO_D2", pinmux_type_fpmx
, 0x0D, 0, 7),
458 FNCN("SDIO_D3", pinmux_type_fpmx
, 0x0D, 8, 7),
459 FNCN("PWM0", pinmux_type_fpmx
, 0x0E, 0, 7), /* 8x PWM */
460 FNCN("PWM1", pinmux_type_fpmx
, 0x0E, 8, 7),
461 FNCN("PWM2", pinmux_type_fpmx
, 0x0F, 0, 7),
462 FNCN("PWM3", pinmux_type_fpmx
, 0x0F, 8, 7),
464 FNCN("PWM4", pinmux_type_fpmx
, 0x10, 0, 7),
465 FNCN("PWM5", pinmux_type_fpmx
, 0x10, 8, 7),
466 FNCN("PWM6", pinmux_type_fpmx
, 0x11, 0, 7),
467 FNCN("PWM7", pinmux_type_fpmx
, 0x11, 8, 7),
468 FNCN("ICM0_D", pinmux_type_fpmx
, 0x12, 0, 7), /* 4x Input captures */
469 FNCN("ICM1_D", pinmux_type_fpmx
, 0x12, 8, 7),
470 FNCN("ICM2_D", pinmux_type_fpmx
, 0x13, 0, 7),
471 FNCN("ICM3_D", pinmux_type_fpmx
, 0x13, 8, 7),
472 FNCN("ICM0_CLK", pinmux_type_fpmx
, 0x14, 0, 7),
473 FNCN("ICM1_CLK", pinmux_type_fpmx
, 0x14, 8, 7),
474 FNCN("ICM2_CLK", pinmux_type_fpmx
, 0x15, 0, 7),
475 FNCN("ICM3_CLK", pinmux_type_fpmx
, 0x15, 8, 7),
476 FNCN("SPIM0_INT", pinmux_type_fpmx
, 0x16, 0, 7), /* 4x SPI masters */
477 FNCN("SPIM0_CLK", pinmux_type_fpmx
, 0x16, 8, 7),
478 FNCN("SPIM0_EN", pinmux_type_fpmx
, 0x17, 0, 7),
479 FNCN("SPIM0_DO", pinmux_type_fpmx
, 0x17, 8, 7),
480 FNCN("SPIM0_DI", pinmux_type_fpmx
, 0x18, 0, 7),
481 FNCN("SPIM1_INT", pinmux_type_fpmx
, 0x18, 8, 7),
482 FNCN("SPIM1_CLK", pinmux_type_fpmx
, 0x19, 0, 7),
483 FNCN("SPIM1_EN", pinmux_type_fpmx
, 0x19, 8, 7),
484 FNCN("SPIM1_DO", pinmux_type_fpmx
, 0x1A, 0, 7),
485 FNCN("SPIM1_DI", pinmux_type_fpmx
, 0x1A, 8, 7),
486 FNCN("SPIM2_INT", pinmux_type_fpmx
, 0x1B, 0, 7),
487 FNCN("SPIM2_CLK", pinmux_type_fpmx
, 0x1B, 8, 7),
488 FNCN("SPIM2_EN", pinmux_type_fpmx
, 0x1C, 0, 7),
489 FNCN("SPIM2_DO", pinmux_type_fpmx
, 0x1C, 8, 7),
490 FNCN("SPIM2_DI", pinmux_type_fpmx
, 0x1D, 0, 7),
491 FNCN("SPIM3_INT", pinmux_type_fpmx
, 0x1D, 8, 7),
492 FNCN("SPIM3_CLK", pinmux_type_fpmx
, 0x1E, 0, 7),
493 FNCN("SPIM3_EN", pinmux_type_fpmx
, 0x1E, 8, 7),
494 FNCN("SPIM3_DO", pinmux_type_fpmx
, 0x1F, 0, 7),
495 FNCN("SPIM3_DI", pinmux_type_fpmx
, 0x1F, 8, 7),
497 FNCN("SPI0S_INT", pinmux_type_fpmx
, 0x20, 0, 7), /* 4x SPI slaves */
498 FNCN("SPI0S_CLK", pinmux_type_fpmx
, 0x20, 8, 7),
499 FNCN("SPI0S_EN", pinmux_type_fpmx
, 0x21, 0, 7),
500 FNCN("SPI0S_DO", pinmux_type_fpmx
, 0x21, 8, 7),
501 FNCN("SPI0S_DI", pinmux_type_fpmx
, 0x22, 0, 7),
502 FNCN("SPI1S_INT", pinmux_type_fpmx
, 0x22, 8, 7),
503 FNCN("SPI1S_CLK", pinmux_type_fpmx
, 0x23, 0, 7),
504 FNCN("SPI1S_EN", pinmux_type_fpmx
, 0x23, 8, 7),
505 FNCN("SPI1S_DO", pinmux_type_fpmx
, 0x24, 0, 7),
506 FNCN("SPI1S_DI", pinmux_type_fpmx
, 0x24, 8, 7),
507 FNCN("SPI2S_INT", pinmux_type_fpmx
, 0x25, 0, 7),
508 FNCN("SPI2S_CLK", pinmux_type_fpmx
, 0x25, 8, 7),
509 FNCN("SPI2S_EN", pinmux_type_fpmx
, 0x26, 0, 7),
510 FNCN("SPI2S_DO", pinmux_type_fpmx
, 0x26, 8, 7),
511 FNCN("SPI2S_DI", pinmux_type_fpmx
, 0x27, 0, 7),
512 FNCN("SPI3S_INT", pinmux_type_fpmx
, 0x27, 8, 7),
513 FNCN("SPI3S_CLK", pinmux_type_fpmx
, 0x28, 0, 7),
514 FNCN("SPI3S_EN", pinmux_type_fpmx
, 0x28, 8, 7),
515 FNCN("SPI3S_DO", pinmux_type_fpmx
, 0x29, 0, 7),
516 FNCN("SPI3S_DI", pinmux_type_fpmx
, 0x29, 8, 7),
517 FNCN("I2CM0_CLK", pinmux_type_fpmx
, 0x2A, 0, 7), /* 4x I2C masters */
518 FNCN("I2CM0_DAT", pinmux_type_fpmx
, 0x2A, 8, 7),
519 FNCN("I2CM1_CLK", pinmux_type_fpmx
, 0x2B, 0, 7),
520 FNCN("I2CM1_DAT", pinmux_type_fpmx
, 0x2B, 8, 7),
521 FNCN("I2CM2_CLK", pinmux_type_fpmx
, 0x2C, 0, 7),
522 FNCN("I2CM2_DAT", pinmux_type_fpmx
, 0x2C, 8, 7),
523 FNCN("I2CM3_CLK", pinmux_type_fpmx
, 0x2D, 0, 7),
524 FNCN("I2CM3_DAT", pinmux_type_fpmx
, 0x2D, 8, 7),
525 FNCN("UA1_TX", pinmux_type_fpmx
, 0x2E, 0, 7), /* 4x UARTS */
526 FNCN("UA1_RX", pinmux_type_fpmx
, 0x2E, 8, 7),
527 FNCN("UA1_CTS", pinmux_type_fpmx
, 0x2F, 0, 7),
528 FNCN("UA1_RTS", pinmux_type_fpmx
, 0x2F, 8, 7),
530 FNCN("UA2_TX", pinmux_type_fpmx
, 0x30, 0, 7),
531 FNCN("UA2_RX", pinmux_type_fpmx
, 0x30, 8, 7),
532 FNCN("UA2_CTS", pinmux_type_fpmx
, 0x31, 0, 7),
533 FNCN("UA2_RTS", pinmux_type_fpmx
, 0x31, 8, 7),
534 FNCN("UA3_TX", pinmux_type_fpmx
, 0x32, 0, 7),
535 FNCN("UA3_RX", pinmux_type_fpmx
, 0x32, 8, 7),
536 FNCN("UA3_CTS", pinmux_type_fpmx
, 0x33, 0, 7),
537 FNCN("UA3_RTS", pinmux_type_fpmx
, 0x33, 8, 7),
538 FNCN("UA4_TX", pinmux_type_fpmx
, 0x34, 0, 7),
539 FNCN("UA4_RX", pinmux_type_fpmx
, 0x34, 8, 7),
540 FNCN("UA4_CTS", pinmux_type_fpmx
, 0x35, 0, 7),
541 FNCN("UA4_RTS", pinmux_type_fpmx
, 0x35, 8, 7),
542 FNCN("TIMER0_INT", pinmux_type_fpmx
, 0x36, 0, 7), /* 4x timer int. */
543 FNCN("TIMER1_INT", pinmux_type_fpmx
, 0x36, 8, 7),
544 FNCN("TIMER2_INT", pinmux_type_fpmx
, 0x37, 0, 7),
545 FNCN("TIMER3_INT", pinmux_type_fpmx
, 0x37, 8, 7),
546 FNCN("GPIO_INT0", pinmux_type_fpmx
, 0x38, 0, 7), /* 8x GPIO int. */
547 FNCN("GPIO_INT1", pinmux_type_fpmx
, 0x38, 8, 7),
548 FNCN("GPIO_INT2", pinmux_type_fpmx
, 0x39, 0, 7),
549 FNCN("GPIO_INT3", pinmux_type_fpmx
, 0x39, 8, 7),
550 FNCN("GPIO_INT4", pinmux_type_fpmx
, 0x3A, 0, 7),
551 FNCN("GPIO_INT5", pinmux_type_fpmx
, 0x3A, 8, 7),
552 FNCN("GPIO_INT6", pinmux_type_fpmx
, 0x3B, 0, 7),
553 FNCN("GPIO_INT7", pinmux_type_fpmx
, 0x3B, 8, 7),
556 FNCE("SPI_FLASH", pinmux_type_grp
, 0x01, 0, 2, sp7021grps_spif
),
557 FNCE("SPI_FLASH_4BIT", pinmux_type_grp
, 0x01, 2, 2, sp7021grps_spi4
),
558 FNCE("SPI_NAND", pinmux_type_grp
, 0x01, 4, 1, sp7021grps_snan
),
559 FNCE("CARD0_EMMC", pinmux_type_grp
, 0x01, 5, 1, sp7021grps_emmc
),
560 FNCE("SD_CARD", pinmux_type_grp
, 0x01, 6, 1, sp7021grps_sdsd
),
561 FNCE("UA0", pinmux_type_grp
, 0x01, 7, 1, sp7021grps_uar0
),
562 FNCE("ACHIP_DEBUG", pinmux_type_grp
, 0x01, 8, 2, sp7021grps_adbg
),
563 FNCE("ACHIP_UA2AXI", pinmux_type_grp
, 0x01, 10, 2, sp7021grps_au2x
),
564 FNCE("FPGA_IFX", pinmux_type_grp
, 0x01, 12, 1, sp7021grps_fpga
),
565 FNCE("HDMI_TX", pinmux_type_grp
, 0x01, 13, 2, sp7021grps_hdmi
),
567 FNCE("AUD_EXT_ADC_IFX0", pinmux_type_grp
, 0x01, 15, 1, sp7021grps_eadc
),
568 FNCE("AUD_EXT_DAC_IFX0", pinmux_type_grp
, 0x02, 0, 1, sp7021grps_edac
),
569 FNCE("SPDIF_RX", pinmux_type_grp
, 0x02, 2, 1, sp7021grps_spdi
),
570 FNCE("SPDIF_TX", pinmux_type_grp
, 0x02, 3, 1, sp7021grps_spdo
),
571 FNCE("TDMTX_IFX0", pinmux_type_grp
, 0x02, 4, 1, sp7021grps_tdmt
),
572 FNCE("TDMRX_IFX0", pinmux_type_grp
, 0x02, 5, 1, sp7021grps_tdmr
),
573 FNCE("PDMRX_IFX0", pinmux_type_grp
, 0x02, 6, 1, sp7021grps_pdmr
),
574 FNCE("PCM_IEC_TX", pinmux_type_grp
, 0x02, 7, 1, sp7021grps_pcmt
),
575 FNCE("LCDIF", pinmux_type_grp
, 0x04, 6, 1, sp7021grps_lcdi
),
576 FNCE("DVD_DSP_DEBUG", pinmux_type_grp
, 0x02, 8, 1, sp7021grps_dvdd
),
577 FNCE("I2C_DEBUG", pinmux_type_grp
, 0x02, 9, 1, sp7021grps_i2cd
),
578 FNCE("I2C_SLAVE", pinmux_type_grp
, 0x02, 10, 1, sp7021grps_i2cs
),
579 FNCE("WAKEUP", pinmux_type_grp
, 0x02, 11, 1, sp7021grps_wakp
),
580 FNCE("UART2AXI", pinmux_type_grp
, 0x02, 12, 2, sp7021grps_u2ax
),
581 FNCE("USB0_I2C", pinmux_type_grp
, 0x02, 14, 2, sp7021grps_u0ic
),
582 FNCE("USB1_I2C", pinmux_type_grp
, 0x03, 0, 2, sp7021grps_u1ic
),
583 FNCE("USB0_OTG", pinmux_type_grp
, 0x03, 2, 1, sp7021grps_u0ot
),
584 FNCE("USB1_OTG", pinmux_type_grp
, 0x03, 3, 1, sp7021grps_u1ot
),
585 FNCE("UPHY0_DEBUG", pinmux_type_grp
, 0x03, 4, 1, sp7021grps_up0d
),
586 FNCE("UPHY1_DEBUG", pinmux_type_grp
, 0x03, 5, 1, sp7021grps_up1d
),
587 FNCE("UPHY0_EXT", pinmux_type_grp
, 0x03, 6, 1, sp7021grps_upex
),
588 FNCE("PROBE_PORT", pinmux_type_grp
, 0x03, 7, 2, sp7021grps_prbp
),
591 const size_t sppctl_list_funcs_sz
= ARRAY_SIZE(sppctl_list_funcs
);