ARM: dts: sun8i: Update A80 dts(i) from Linux-v4.18-rc3
[oweals/u-boot.git] / arch / arm / mach-tegra / tegra20 / pinmux.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 2011 The Chromium OS Authors.
4  */
5
6 /* Tegra20 pin multiplexing functions */
7
8 #include <common.h>
9 #include <asm/io.h>
10 #include <asm/arch/pinmux.h>
11
12 /*
13  * This defines the order of the pin mux control bits in the registers. For
14  * some reason there is no correspendence between the tristate, pin mux and
15  * pullup/pulldown registers.
16  */
17 enum pmux_ctlid {
18         /* 0: APB_MISC_PP_PIN_MUX_CTL_A_0 */
19         MUXCTL_UAA,
20         MUXCTL_UAB,
21         MUXCTL_UAC,
22         MUXCTL_UAD,
23         MUXCTL_UDA,
24         MUXCTL_RESERVED5,
25         MUXCTL_ATE,
26         MUXCTL_RM,
27
28         MUXCTL_ATB,
29         MUXCTL_RESERVED9,
30         MUXCTL_ATD,
31         MUXCTL_ATC,
32         MUXCTL_ATA,
33         MUXCTL_KBCF,
34         MUXCTL_KBCE,
35         MUXCTL_SDMMC1,
36
37         /* 16: APB_MISC_PP_PIN_MUX_CTL_B_0 */
38         MUXCTL_GMA,
39         MUXCTL_GMC,
40         MUXCTL_HDINT,
41         MUXCTL_SLXA,
42         MUXCTL_OWC,
43         MUXCTL_SLXC,
44         MUXCTL_SLXD,
45         MUXCTL_SLXK,
46
47         MUXCTL_UCA,
48         MUXCTL_UCB,
49         MUXCTL_DTA,
50         MUXCTL_DTB,
51         MUXCTL_RESERVED28,
52         MUXCTL_DTC,
53         MUXCTL_DTD,
54         MUXCTL_DTE,
55
56         /* 32: APB_MISC_PP_PIN_MUX_CTL_C_0 */
57         MUXCTL_DDC,
58         MUXCTL_CDEV1,
59         MUXCTL_CDEV2,
60         MUXCTL_CSUS,
61         MUXCTL_I2CP,
62         MUXCTL_KBCA,
63         MUXCTL_KBCB,
64         MUXCTL_KBCC,
65
66         MUXCTL_IRTX,
67         MUXCTL_IRRX,
68         MUXCTL_DAP1,
69         MUXCTL_DAP2,
70         MUXCTL_DAP3,
71         MUXCTL_DAP4,
72         MUXCTL_GMB,
73         MUXCTL_GMD,
74
75         /* 48: APB_MISC_PP_PIN_MUX_CTL_D_0 */
76         MUXCTL_GME,
77         MUXCTL_GPV,
78         MUXCTL_GPU,
79         MUXCTL_SPDO,
80         MUXCTL_SPDI,
81         MUXCTL_SDB,
82         MUXCTL_SDC,
83         MUXCTL_SDD,
84
85         MUXCTL_SPIH,
86         MUXCTL_SPIG,
87         MUXCTL_SPIF,
88         MUXCTL_SPIE,
89         MUXCTL_SPID,
90         MUXCTL_SPIC,
91         MUXCTL_SPIB,
92         MUXCTL_SPIA,
93
94         /* 64: APB_MISC_PP_PIN_MUX_CTL_E_0 */
95         MUXCTL_LPW0,
96         MUXCTL_LPW1,
97         MUXCTL_LPW2,
98         MUXCTL_LSDI,
99         MUXCTL_LSDA,
100         MUXCTL_LSPI,
101         MUXCTL_LCSN,
102         MUXCTL_LDC,
103
104         MUXCTL_LSCK,
105         MUXCTL_LSC0,
106         MUXCTL_LSC1,
107         MUXCTL_LHS,
108         MUXCTL_LVS,
109         MUXCTL_LM0,
110         MUXCTL_LM1,
111         MUXCTL_LVP0,
112
113         /* 80: APB_MISC_PP_PIN_MUX_CTL_F_0 */
114         MUXCTL_LD0,
115         MUXCTL_LD1,
116         MUXCTL_LD2,
117         MUXCTL_LD3,
118         MUXCTL_LD4,
119         MUXCTL_LD5,
120         MUXCTL_LD6,
121         MUXCTL_LD7,
122
123         MUXCTL_LD8,
124         MUXCTL_LD9,
125         MUXCTL_LD10,
126         MUXCTL_LD11,
127         MUXCTL_LD12,
128         MUXCTL_LD13,
129         MUXCTL_LD14,
130         MUXCTL_LD15,
131
132         /* 96: APB_MISC_PP_PIN_MUX_CTL_G_0 */
133         MUXCTL_LD16,
134         MUXCTL_LD17,
135         MUXCTL_LHP1,
136         MUXCTL_LHP2,
137         MUXCTL_LVP1,
138         MUXCTL_LHP0,
139         MUXCTL_RESERVED102,
140         MUXCTL_LPP,
141
142         MUXCTL_LDI,
143         MUXCTL_PMC,
144         MUXCTL_CRTP,
145         MUXCTL_PTA,
146         MUXCTL_RESERVED108,
147         MUXCTL_KBCD,
148         MUXCTL_GPU7,
149         MUXCTL_DTF,
150
151         MUXCTL_NONE = -1,
152 };
153
154 /*
155  * And this defines the order of the pullup/pulldown controls which are again
156  * in a different order
157  */
158 enum pmux_pullid {
159         /* 0: APB_MISC_PP_PULLUPDOWN_REG_A_0 */
160         PUCTL_ATA,
161         PUCTL_ATB,
162         PUCTL_ATC,
163         PUCTL_ATD,
164         PUCTL_ATE,
165         PUCTL_DAP1,
166         PUCTL_DAP2,
167         PUCTL_DAP3,
168
169         PUCTL_DAP4,
170         PUCTL_DTA,
171         PUCTL_DTB,
172         PUCTL_DTC,
173         PUCTL_DTD,
174         PUCTL_DTE,
175         PUCTL_DTF,
176         PUCTL_GPV,
177
178         /* 16: APB_MISC_PP_PULLUPDOWN_REG_B_0 */
179         PUCTL_RM,
180         PUCTL_I2CP,
181         PUCTL_PTA,
182         PUCTL_GPU7,
183         PUCTL_KBCA,
184         PUCTL_KBCB,
185         PUCTL_KBCC,
186         PUCTL_KBCD,
187
188         PUCTL_SPDI,
189         PUCTL_SPDO,
190         PUCTL_GPSLXAU,
191         PUCTL_CRTP,
192         PUCTL_SLXC,
193         PUCTL_SLXD,
194         PUCTL_SLXK,
195
196         /* 32: APB_MISC_PP_PULLUPDOWN_REG_C_0 */
197         PUCTL_CDEV1,
198         PUCTL_CDEV2,
199         PUCTL_SPIA,
200         PUCTL_SPIB,
201         PUCTL_SPIC,
202         PUCTL_SPID,
203         PUCTL_SPIE,
204         PUCTL_SPIF,
205
206         PUCTL_SPIG,
207         PUCTL_SPIH,
208         PUCTL_IRTX,
209         PUCTL_IRRX,
210         PUCTL_GME,
211         PUCTL_RESERVED45,
212         PUCTL_XM2D,
213         PUCTL_XM2C,
214
215         /* 48: APB_MISC_PP_PULLUPDOWN_REG_D_0 */
216         PUCTL_UAA,
217         PUCTL_UAB,
218         PUCTL_UAC,
219         PUCTL_UAD,
220         PUCTL_UCA,
221         PUCTL_UCB,
222         PUCTL_LD17,
223         PUCTL_LD19_18,
224
225         PUCTL_LD21_20,
226         PUCTL_LD23_22,
227         PUCTL_LS,
228         PUCTL_LC,
229         PUCTL_CSUS,
230         PUCTL_DDRC,
231         PUCTL_SDC,
232         PUCTL_SDD,
233
234         /* 64: APB_MISC_PP_PULLUPDOWN_REG_E_0 */
235         PUCTL_KBCF,
236         PUCTL_KBCE,
237         PUCTL_PMCA,
238         PUCTL_PMCB,
239         PUCTL_PMCC,
240         PUCTL_PMCD,
241         PUCTL_PMCE,
242         PUCTL_CK32,
243
244         PUCTL_UDA,
245         PUCTL_SDMMC1,
246         PUCTL_GMA,
247         PUCTL_GMB,
248         PUCTL_GMC,
249         PUCTL_GMD,
250         PUCTL_DDC,
251         PUCTL_OWC,
252
253         PUCTL_NONE = -1
254 };
255
256 /* Convenient macro for defining pin group properties */
257 #define PINALL(pingrp, f0, f1, f2, f3, mux, pupd)       \
258         {                                               \
259                 .funcs = {                              \
260                         PMUX_FUNC_ ## f0,               \
261                         PMUX_FUNC_ ## f1,               \
262                         PMUX_FUNC_ ## f2,               \
263                         PMUX_FUNC_ ## f3,               \
264                 },                                      \
265                 .ctl_id = mux,                          \
266                 .pull_id = pupd                         \
267         }
268
269 /* A normal pin group where the mux name and pull-up name match */
270 #define PIN(pingrp, f0, f1, f2, f3) \
271         PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pingrp)
272
273 /* A pin group where the pull-up name doesn't have a 1-1 mapping */
274 #define PINP(pingrp, f0, f1, f2, f3, pupd) \
275         PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pupd)
276
277 /* A pin group number which is not used */
278 #define PIN_RESERVED \
279         PIN(NONE, RSVD1, RSVD2, RSVD3, RSVD4)
280
281 #define DRVGRP(drvgrp) \
282         PINALL(drvgrp, RSVD1, RSVD2, RSVD3, RSVD4, MUXCTL_NONE, PUCTL_NONE)
283
284 static const struct pmux_pingrp_desc tegra20_pingroups[] = {
285         PIN(ATA,    IDE,       NAND,      GMI,       RSVD4),
286         PIN(ATB,    IDE,       NAND,      GMI,       SDIO4),
287         PIN(ATC,    IDE,       NAND,      GMI,       SDIO4),
288         PIN(ATD,    IDE,       NAND,      GMI,       SDIO4),
289         PIN(CDEV1,  OSC,       PLLA_OUT,  PLLM_OUT1, AUDIO_SYNC),
290         PIN(CDEV2,  OSC,       AHB_CLK,   APB_CLK,   PLLP_OUT4),
291         PIN(CSUS,   PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK),
292         PIN(DAP1,   DAP1,      RSVD2,     GMI,       SDIO2),
293
294         PIN(DAP2,   DAP2,      TWC,       RSVD3,     GMI),
295         PIN(DAP3,   DAP3,      RSVD2,     RSVD3,     RSVD4),
296         PIN(DAP4,   DAP4,      RSVD2,     GMI,       RSVD4),
297         PIN(DTA,    RSVD1,     SDIO2,     VI,        RSVD4),
298         PIN(DTB,    RSVD1,     RSVD2,     VI,        SPI1),
299         PIN(DTC,    RSVD1,     RSVD2,     VI,        RSVD4),
300         PIN(DTD,    RSVD1,     SDIO2,     VI,        RSVD4),
301         PIN(DTE,    RSVD1,     RSVD2,     VI,        SPI1),
302
303         PINP(GPU,   PWM,       UARTA,     GMI,       RSVD4,         GPSLXAU),
304         PIN(GPV,    PCIE,      RSVD2,     RSVD3,     RSVD4),
305         PIN(I2CP,   I2C,       RSVD2,     RSVD3,     RSVD4),
306         PIN(IRTX,   UARTA,     UARTB,     GMI,       SPI4),
307         PIN(IRRX,   UARTA,     UARTB,     GMI,       SPI4),
308         PIN(KBCB,   KBC,       NAND,      SDIO2,     MIO),
309         PIN(KBCA,   KBC,       NAND,      SDIO2,     EMC_TEST0_DLL),
310         PINP(PMC,   PWR_ON,    PWR_INTR,  RSVD3,     RSVD4,         NONE),
311
312         PIN(PTA,    I2C2,      HDMI,      GMI,       RSVD4),
313         PIN(RM,     I2C,       RSVD2,     RSVD3,     RSVD4),
314         PIN(KBCE,   KBC,       NAND,      OWR,       RSVD4),
315         PIN(KBCF,   KBC,       NAND,      TRACE,     MIO),
316         PIN(GMA,    UARTE,     SPI3,      GMI,       SDIO4),
317         PIN(GMC,    UARTD,     SPI4,      GMI,       SFLASH),
318         PIN(SDMMC1, SDIO1,     RSVD2,     UARTE,     UARTA),
319         PIN(OWC,    OWR,       RSVD2,     RSVD3,     RSVD4),
320
321         PIN(GME,    RSVD1,     DAP5,      GMI,       SDIO4),
322         PIN(SDC,    PWM,       TWC,       SDIO3,     SPI3),
323         PIN(SDD,    UARTA,     PWM,       SDIO3,     SPI3),
324         PIN_RESERVED,
325         PINP(SLXA,  PCIE,      SPI4,      SDIO3,     SPI2,          CRTP),
326         PIN(SLXC,   SPDIF,     SPI4,      SDIO3,     SPI2),
327         PIN(SLXD,   SPDIF,     SPI4,      SDIO3,     SPI2),
328         PIN(SLXK,   PCIE,      SPI4,      SDIO3,     SPI2),
329
330         PIN(SPDI,   SPDIF,     RSVD2,     I2C,       SDIO2),
331         PIN(SPDO,   SPDIF,     RSVD2,     I2C,       SDIO2),
332         PIN(SPIA,   SPI1,      SPI2,      SPI3,      GMI),
333         PIN(SPIB,   SPI1,      SPI2,      SPI3,      GMI),
334         PIN(SPIC,   SPI1,      SPI2,      SPI3,      GMI),
335         PIN(SPID,   SPI2,      SPI1,      SPI2_ALT,  GMI),
336         PIN(SPIE,   SPI2,      SPI1,      SPI2_ALT,  GMI),
337         PIN(SPIF,   SPI3,      SPI1,      SPI2,      RSVD4),
338
339         PIN(SPIG,   SPI3,      SPI2,      SPI2_ALT,  I2C),
340         PIN(SPIH,   SPI3,      SPI2,      SPI2_ALT,  I2C),
341         PIN(UAA,    SPI3,      MIPI_HS,   UARTA,     ULPI),
342         PIN(UAB,    SPI2,      MIPI_HS,   UARTA,     ULPI),
343         PIN(UAC,    OWR,       RSVD2,     RSVD3,     RSVD4),
344         PIN(UAD,    UARTB,     SPDIF,     UARTA,     SPI4),
345         PIN(UCA,    UARTC,     RSVD2,     GMI,       RSVD4),
346         PIN(UCB,    UARTC,     PWM,       GMI,       RSVD4),
347
348         PIN_RESERVED,
349         PIN(ATE,    IDE,       NAND,      GMI,       RSVD4),
350         PIN(KBCC,   KBC,       NAND,      TRACE,     EMC_TEST1_DLL),
351         PIN_RESERVED,
352         PIN_RESERVED,
353         PIN(GMB,    IDE,       NAND,      GMI,       GMI_INT),
354         PIN(GMD,    RSVD1,     NAND,      GMI,       SFLASH),
355         PIN(DDC,    I2C2,      RSVD2,     RSVD3,     RSVD4),
356
357         /* 64 */
358         PINP(LD0,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
359         PINP(LD1,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
360         PINP(LD2,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
361         PINP(LD3,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
362         PINP(LD4,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
363         PINP(LD5,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
364         PINP(LD6,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
365         PINP(LD7,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
366
367         PINP(LD8,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
368         PINP(LD9,   DISPA,     DISPB,     XIO,       RSVD4,         LD17),
369         PINP(LD10,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
370         PINP(LD11,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
371         PINP(LD12,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
372         PINP(LD13,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
373         PINP(LD14,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
374         PINP(LD15,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
375
376         PINP(LD16,  DISPA,     DISPB,     XIO,       RSVD4,         LD17),
377         PINP(LD17,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD17),
378         PINP(LHP0,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD21_20),
379         PINP(LHP1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD19_18),
380         PINP(LHP2,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD19_18),
381         PINP(LVP0,  DISPA,     DISPB,     RSVD3,     RSVD4,         LC),
382         PINP(LVP1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LD21_20),
383         PINP(HDINT, HDMI,      RSVD2,     RSVD3,     RSVD4,         LC),
384
385         PINP(LM0,   DISPA,     DISPB,     SPI3,      RSVD4,         LC),
386         PINP(LM1,   DISPA,     DISPB,     RSVD3,     CRT,           LC),
387         PINP(LVS,   DISPA,     DISPB,     XIO,       RSVD4,         LC),
388         PINP(LSC0,  DISPA,     DISPB,     XIO,       RSVD4,         LC),
389         PINP(LSC1,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
390         PINP(LSCK,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
391         PINP(LDC,   DISPA,     DISPB,     RSVD3,     RSVD4,         LS),
392         PINP(LCSN,  DISPA,     DISPB,     SPI3,      RSVD4,         LS),
393
394         /* 96 */
395         PINP(LSPI,  DISPA,     DISPB,     XIO,       HDMI,          LC),
396         PINP(LSDA,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
397         PINP(LSDI,  DISPA,     DISPB,     SPI3,      RSVD4,         LS),
398         PINP(LPW0,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
399         PINP(LPW1,  DISPA,     DISPB,     RSVD3,     RSVD4,         LS),
400         PINP(LPW2,  DISPA,     DISPB,     SPI3,      HDMI,          LS),
401         PINP(LDI,   DISPA,     DISPB,     RSVD3,     RSVD4,         LD23_22),
402         PINP(LHS,   DISPA,     DISPB,     XIO,       RSVD4,         LC),
403
404         PINP(LPP,   DISPA,     DISPB,     RSVD3,     RSVD4,         LD23_22),
405         PIN_RESERVED,
406         PIN(KBCD,   KBC,       NAND,      SDIO2,     MIO),
407         PIN(GPU7,   RTCK,      RSVD2,     RSVD3,     RSVD4),
408         PIN(DTF,    I2C3,      RSVD2,     VI,        RSVD4),
409         PIN(UDA,    SPI1,      RSVD2,     UARTD,     ULPI),
410         PIN(CRTP,   CRT,       RSVD2,     RSVD3,     RSVD4),
411         PINP(SDB,   UARTA,     PWM,       SDIO3,     SPI2,          NONE),
412
413         /* these pin groups only have pullup and pull down control */
414         DRVGRP(CK32),
415         DRVGRP(DDRC),
416         DRVGRP(PMCA),
417         DRVGRP(PMCB),
418         DRVGRP(PMCC),
419         DRVGRP(PMCD),
420         DRVGRP(PMCE),
421         DRVGRP(XM2C),
422         DRVGRP(XM2D),
423 };
424 const struct pmux_pingrp_desc *tegra_soc_pingroups = tegra20_pingroups;