xref: /openbmc/u-boot/arch/arm/mach-tegra/tegra20/funcmux.c (revision 09f455dca74973ef5e42311162c8dff7e83d44a2)
1*09f455dcSMasahiro Yamada /*
2*09f455dcSMasahiro Yamada  * Copyright (c) 2011 The Chromium OS Authors.
3*09f455dcSMasahiro Yamada  *
4*09f455dcSMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
5*09f455dcSMasahiro Yamada  */
6*09f455dcSMasahiro Yamada 
7*09f455dcSMasahiro Yamada /* Tegra20 high-level function multiplexing */
8*09f455dcSMasahiro Yamada #include <common.h>
9*09f455dcSMasahiro Yamada #include <asm/arch/clock.h>
10*09f455dcSMasahiro Yamada #include <asm/arch/funcmux.h>
11*09f455dcSMasahiro Yamada #include <asm/arch/pinmux.h>
12*09f455dcSMasahiro Yamada 
13*09f455dcSMasahiro Yamada /*
14*09f455dcSMasahiro Yamada  * The PINMUX macro is used to set up pinmux tables.
15*09f455dcSMasahiro Yamada  */
16*09f455dcSMasahiro Yamada #define PINMUX(grp, mux, pupd, tri)                   \
17*09f455dcSMasahiro Yamada 	{PMUX_PINGRP_##grp, PMUX_FUNC_##mux, PMUX_PULL_##pupd, PMUX_TRI_##tri}
18*09f455dcSMasahiro Yamada 
19*09f455dcSMasahiro Yamada static const struct pmux_pingrp_config disp1_default[] = {
20*09f455dcSMasahiro Yamada 	PINMUX(LDI,   DISPA,      NORMAL,    NORMAL),
21*09f455dcSMasahiro Yamada 	PINMUX(LHP0,  DISPA,      NORMAL,    NORMAL),
22*09f455dcSMasahiro Yamada 	PINMUX(LHP1,  DISPA,      NORMAL,    NORMAL),
23*09f455dcSMasahiro Yamada 	PINMUX(LHP2,  DISPA,      NORMAL,    NORMAL),
24*09f455dcSMasahiro Yamada 	PINMUX(LHS,   DISPA,      NORMAL,    NORMAL),
25*09f455dcSMasahiro Yamada 	PINMUX(LM0,   RSVD4,      NORMAL,    NORMAL),
26*09f455dcSMasahiro Yamada 	PINMUX(LPP,   DISPA,      NORMAL,    NORMAL),
27*09f455dcSMasahiro Yamada 	PINMUX(LPW0,  DISPA,      NORMAL,    NORMAL),
28*09f455dcSMasahiro Yamada 	PINMUX(LPW2,  DISPA,      NORMAL,    NORMAL),
29*09f455dcSMasahiro Yamada 	PINMUX(LSC0,  DISPA,      NORMAL,    NORMAL),
30*09f455dcSMasahiro Yamada 	PINMUX(LSPI,  DISPA,      NORMAL,    NORMAL),
31*09f455dcSMasahiro Yamada 	PINMUX(LVP1,  DISPA,      NORMAL,    NORMAL),
32*09f455dcSMasahiro Yamada 	PINMUX(LVS,   DISPA,      NORMAL,    NORMAL),
33*09f455dcSMasahiro Yamada 	PINMUX(SLXD,  SPDIF,      NORMAL,    NORMAL),
34*09f455dcSMasahiro Yamada };
35*09f455dcSMasahiro Yamada 
36*09f455dcSMasahiro Yamada 
37*09f455dcSMasahiro Yamada int funcmux_select(enum periph_id id, int config)
38*09f455dcSMasahiro Yamada {
39*09f455dcSMasahiro Yamada 	int bad_config = config != FUNCMUX_DEFAULT;
40*09f455dcSMasahiro Yamada 
41*09f455dcSMasahiro Yamada 	switch (id) {
42*09f455dcSMasahiro Yamada 	case PERIPH_ID_UART1:
43*09f455dcSMasahiro Yamada 		switch (config) {
44*09f455dcSMasahiro Yamada 		case FUNCMUX_UART1_IRRX_IRTX:
45*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_IRRX, PMUX_FUNC_UARTA);
46*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_IRTX, PMUX_FUNC_UARTA);
47*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_IRRX);
48*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_IRTX);
49*09f455dcSMasahiro Yamada 			break;
50*09f455dcSMasahiro Yamada 		case FUNCMUX_UART1_UAA_UAB:
51*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_UARTA);
52*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_UARTA);
53*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAA);
54*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAB);
55*09f455dcSMasahiro Yamada 			bad_config = 0;
56*09f455dcSMasahiro Yamada 			break;
57*09f455dcSMasahiro Yamada 		case FUNCMUX_UART1_GPU:
58*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GPU, PMUX_FUNC_UARTA);
59*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GPU);
60*09f455dcSMasahiro Yamada 			bad_config = 0;
61*09f455dcSMasahiro Yamada 			break;
62*09f455dcSMasahiro Yamada 		case FUNCMUX_UART1_SDIO1:
63*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_UARTA);
64*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDIO1);
65*09f455dcSMasahiro Yamada 			bad_config = 0;
66*09f455dcSMasahiro Yamada 			break;
67*09f455dcSMasahiro Yamada 		}
68*09f455dcSMasahiro Yamada 		if (!bad_config) {
69*09f455dcSMasahiro Yamada 			/*
70*09f455dcSMasahiro Yamada 			 * Tegra appears to boot with function UARTA pre-
71*09f455dcSMasahiro Yamada 			 * selected on mux group SDB. If two mux groups are
72*09f455dcSMasahiro Yamada 			 * both set to the same function, it's unclear which
73*09f455dcSMasahiro Yamada 			 * group's pins drive the RX signals into the HW.
74*09f455dcSMasahiro Yamada 			 * For UARTA, SDB certainly overrides group IRTX in
75*09f455dcSMasahiro Yamada 			 * practice. To solve this, configure some alternative
76*09f455dcSMasahiro Yamada 			 * function on SDB to avoid the conflict. Also, tri-
77*09f455dcSMasahiro Yamada 			 * state the group to avoid driving any signal onto it
78*09f455dcSMasahiro Yamada 			 * until we know what's connected.
79*09f455dcSMasahiro Yamada 			 */
80*09f455dcSMasahiro Yamada 			pinmux_tristate_enable(PMUX_PINGRP_SDB);
81*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDB,  PMUX_FUNC_SDIO3);
82*09f455dcSMasahiro Yamada 		}
83*09f455dcSMasahiro Yamada 		break;
84*09f455dcSMasahiro Yamada 
85*09f455dcSMasahiro Yamada 	case PERIPH_ID_UART2:
86*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_UART2_UAD) {
87*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAD, PMUX_FUNC_UARTB);
88*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAD);
89*09f455dcSMasahiro Yamada 		}
90*09f455dcSMasahiro Yamada 		break;
91*09f455dcSMasahiro Yamada 
92*09f455dcSMasahiro Yamada 	case PERIPH_ID_UART4:
93*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_UART4_GMC) {
94*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_UARTD);
95*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMC);
96*09f455dcSMasahiro Yamada 		}
97*09f455dcSMasahiro Yamada 		break;
98*09f455dcSMasahiro Yamada 
99*09f455dcSMasahiro Yamada 	case PERIPH_ID_DVC_I2C:
100*09f455dcSMasahiro Yamada 		/* there is only one selection, pinmux_config is ignored */
101*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_DVC_I2CP) {
102*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_I2CP, PMUX_FUNC_I2C);
103*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_I2CP);
104*09f455dcSMasahiro Yamada 		}
105*09f455dcSMasahiro Yamada 		break;
106*09f455dcSMasahiro Yamada 
107*09f455dcSMasahiro Yamada 	case PERIPH_ID_I2C1:
108*09f455dcSMasahiro Yamada 		/* support pinmux_config of 0 for now, */
109*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_I2C1_RM) {
110*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_RM, PMUX_FUNC_I2C);
111*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_RM);
112*09f455dcSMasahiro Yamada 		}
113*09f455dcSMasahiro Yamada 		break;
114*09f455dcSMasahiro Yamada 	case PERIPH_ID_I2C2: /* I2C2 */
115*09f455dcSMasahiro Yamada 		switch (config) {
116*09f455dcSMasahiro Yamada 		case FUNCMUX_I2C2_DDC:	/* DDC pin group, select I2C2 */
117*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_I2C2);
118*09f455dcSMasahiro Yamada 			/* PTA to HDMI */
119*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_HDMI);
120*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DDC);
121*09f455dcSMasahiro Yamada 			break;
122*09f455dcSMasahiro Yamada 		case FUNCMUX_I2C2_PTA:	/* PTA pin group, select I2C2 */
123*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_I2C2);
124*09f455dcSMasahiro Yamada 			/* set DDC_SEL to RSVDx (RSVD2 works for now) */
125*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_RSVD2);
126*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_PTA);
127*09f455dcSMasahiro Yamada 			bad_config = 0;
128*09f455dcSMasahiro Yamada 			break;
129*09f455dcSMasahiro Yamada 		}
130*09f455dcSMasahiro Yamada 		break;
131*09f455dcSMasahiro Yamada 	case PERIPH_ID_I2C3: /* I2C3 */
132*09f455dcSMasahiro Yamada 		/* support pinmux_config of 0 for now */
133*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_I2C3_DTF) {
134*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTF, PMUX_FUNC_I2C3);
135*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTF);
136*09f455dcSMasahiro Yamada 		}
137*09f455dcSMasahiro Yamada 		break;
138*09f455dcSMasahiro Yamada 
139*09f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC1:
140*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_SDMMC1_SDIO1_4BIT) {
141*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_SDIO1);
142*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDIO1);
143*09f455dcSMasahiro Yamada 		}
144*09f455dcSMasahiro Yamada 		break;
145*09f455dcSMasahiro Yamada 
146*09f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC2:
147*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_SDMMC2_DTA_DTD_8BIT) {
148*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTA, PMUX_FUNC_SDIO2);
149*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTD, PMUX_FUNC_SDIO2);
150*09f455dcSMasahiro Yamada 
151*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTA);
152*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTD);
153*09f455dcSMasahiro Yamada 		}
154*09f455dcSMasahiro Yamada 		break;
155*09f455dcSMasahiro Yamada 
156*09f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC3:
157*09f455dcSMasahiro Yamada 		switch (config) {
158*09f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC3_SDB_SLXA_8BIT:
159*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXA, PMUX_FUNC_SDIO3);
160*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXC, PMUX_FUNC_SDIO3);
161*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXD, PMUX_FUNC_SDIO3);
162*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXK, PMUX_FUNC_SDIO3);
163*09f455dcSMasahiro Yamada 
164*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXA);
165*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXC);
166*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXD);
167*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXK);
168*09f455dcSMasahiro Yamada 			/* fall through */
169*09f455dcSMasahiro Yamada 
170*09f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC3_SDB_4BIT:
171*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDB, PMUX_FUNC_SDIO3);
172*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDC, PMUX_FUNC_SDIO3);
173*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDD, PMUX_FUNC_SDIO3);
174*09f455dcSMasahiro Yamada 
175*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDB);
176*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDC);
177*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDD);
178*09f455dcSMasahiro Yamada 			bad_config = 0;
179*09f455dcSMasahiro Yamada 			break;
180*09f455dcSMasahiro Yamada 		}
181*09f455dcSMasahiro Yamada 		break;
182*09f455dcSMasahiro Yamada 
183*09f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC4:
184*09f455dcSMasahiro Yamada 		switch (config) {
185*09f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATC_ATD_8BIT:
186*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_SDIO4);
187*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATD, PMUX_FUNC_SDIO4);
188*09f455dcSMasahiro Yamada 
189*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATC);
190*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATD);
191*09f455dcSMasahiro Yamada 			break;
192*09f455dcSMasahiro Yamada 
193*09f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT:
194*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GME, PMUX_FUNC_SDIO4);
195*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GME);
196*09f455dcSMasahiro Yamada 			/* fall through */
197*09f455dcSMasahiro Yamada 
198*09f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATB_GMA_4_BIT:
199*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATB, PMUX_FUNC_SDIO4);
200*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMA, PMUX_FUNC_SDIO4);
201*09f455dcSMasahiro Yamada 
202*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATB);
203*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMA);
204*09f455dcSMasahiro Yamada 			bad_config = 0;
205*09f455dcSMasahiro Yamada 			break;
206*09f455dcSMasahiro Yamada 		}
207*09f455dcSMasahiro Yamada 		break;
208*09f455dcSMasahiro Yamada 
209*09f455dcSMasahiro Yamada 	case PERIPH_ID_KBC:
210*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_DEFAULT) {
211*09f455dcSMasahiro Yamada 			enum pmux_pingrp grp[] = {PMUX_PINGRP_KBCA,
212*09f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCB, PMUX_PINGRP_KBCC,
213*09f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCD, PMUX_PINGRP_KBCE,
214*09f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCF};
215*09f455dcSMasahiro Yamada 			int i;
216*09f455dcSMasahiro Yamada 
217*09f455dcSMasahiro Yamada 			for (i = 0; i < ARRAY_SIZE(grp); i++) {
218*09f455dcSMasahiro Yamada 				pinmux_tristate_disable(grp[i]);
219*09f455dcSMasahiro Yamada 				pinmux_set_func(grp[i], PMUX_FUNC_KBC);
220*09f455dcSMasahiro Yamada 				pinmux_set_pullupdown(grp[i], PMUX_PULL_UP);
221*09f455dcSMasahiro Yamada 			}
222*09f455dcSMasahiro Yamada 		}
223*09f455dcSMasahiro Yamada 		break;
224*09f455dcSMasahiro Yamada 
225*09f455dcSMasahiro Yamada 	case PERIPH_ID_USB2:
226*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_USB2_ULPI) {
227*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_ULPI);
228*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_ULPI);
229*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UDA, PMUX_FUNC_ULPI);
230*09f455dcSMasahiro Yamada 
231*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAA);
232*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAB);
233*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UDA);
234*09f455dcSMasahiro Yamada 		}
235*09f455dcSMasahiro Yamada 		break;
236*09f455dcSMasahiro Yamada 
237*09f455dcSMasahiro Yamada 	case PERIPH_ID_SPI1:
238*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_SPI1_GMC_GMD) {
239*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_SFLASH);
240*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMD, PMUX_FUNC_SFLASH);
241*09f455dcSMasahiro Yamada 
242*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMC);
243*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMD);
244*09f455dcSMasahiro Yamada 		}
245*09f455dcSMasahiro Yamada 		break;
246*09f455dcSMasahiro Yamada 
247*09f455dcSMasahiro Yamada 	case PERIPH_ID_NDFLASH:
248*09f455dcSMasahiro Yamada 		switch (config) {
249*09f455dcSMasahiro Yamada 		case FUNCMUX_NDFLASH_ATC:
250*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_NAND);
251*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATC);
252*09f455dcSMasahiro Yamada 			break;
253*09f455dcSMasahiro Yamada 		case FUNCMUX_NDFLASH_KBC_8_BIT:
254*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCA, PMUX_FUNC_NAND);
255*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCC, PMUX_FUNC_NAND);
256*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCD, PMUX_FUNC_NAND);
257*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCE, PMUX_FUNC_NAND);
258*09f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCF, PMUX_FUNC_NAND);
259*09f455dcSMasahiro Yamada 
260*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCA);
261*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCC);
262*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCD);
263*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCE);
264*09f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCF);
265*09f455dcSMasahiro Yamada 
266*09f455dcSMasahiro Yamada 			bad_config = 0;
267*09f455dcSMasahiro Yamada 			break;
268*09f455dcSMasahiro Yamada 		}
269*09f455dcSMasahiro Yamada 		break;
270*09f455dcSMasahiro Yamada 	case PERIPH_ID_DISP1:
271*09f455dcSMasahiro Yamada 		if (config == FUNCMUX_DEFAULT) {
272*09f455dcSMasahiro Yamada 			int i;
273*09f455dcSMasahiro Yamada 
274*09f455dcSMasahiro Yamada 			for (i = PMUX_PINGRP_LD0; i <= PMUX_PINGRP_LD17; i++) {
275*09f455dcSMasahiro Yamada 				pinmux_set_func(i, PMUX_FUNC_DISPA);
276*09f455dcSMasahiro Yamada 				pinmux_tristate_disable(i);
277*09f455dcSMasahiro Yamada 				pinmux_set_pullupdown(i, PMUX_PULL_NORMAL);
278*09f455dcSMasahiro Yamada 			}
279*09f455dcSMasahiro Yamada 			pinmux_config_pingrp_table(disp1_default,
280*09f455dcSMasahiro Yamada 						   ARRAY_SIZE(disp1_default));
281*09f455dcSMasahiro Yamada 		}
282*09f455dcSMasahiro Yamada 		break;
283*09f455dcSMasahiro Yamada 
284*09f455dcSMasahiro Yamada 	default:
285*09f455dcSMasahiro Yamada 		debug("%s: invalid periph_id %d", __func__, id);
286*09f455dcSMasahiro Yamada 		return -1;
287*09f455dcSMasahiro Yamada 	}
288*09f455dcSMasahiro Yamada 
289*09f455dcSMasahiro Yamada 	if (bad_config) {
290*09f455dcSMasahiro Yamada 		debug("%s: invalid config %d for periph_id %d", __func__,
291*09f455dcSMasahiro Yamada 		      config, id);
292*09f455dcSMasahiro Yamada 		return -1;
293*09f455dcSMasahiro Yamada 	}
294*09f455dcSMasahiro Yamada 
295*09f455dcSMasahiro Yamada 	return 0;
296*09f455dcSMasahiro Yamada }
297