xref: /openbmc/u-boot/arch/arm/mach-tegra/tegra20/funcmux.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
209f455dcSMasahiro Yamada /*
309f455dcSMasahiro Yamada  * Copyright (c) 2011 The Chromium OS Authors.
409f455dcSMasahiro Yamada  */
509f455dcSMasahiro Yamada 
609f455dcSMasahiro Yamada /* Tegra20 high-level function multiplexing */
709f455dcSMasahiro Yamada #include <common.h>
809f455dcSMasahiro Yamada #include <asm/arch/clock.h>
909f455dcSMasahiro Yamada #include <asm/arch/funcmux.h>
1009f455dcSMasahiro Yamada #include <asm/arch/pinmux.h>
1109f455dcSMasahiro Yamada 
1209f455dcSMasahiro Yamada /*
1309f455dcSMasahiro Yamada  * The PINMUX macro is used to set up pinmux tables.
1409f455dcSMasahiro Yamada  */
1509f455dcSMasahiro Yamada #define PINMUX(grp, mux, pupd, tri)                   \
1609f455dcSMasahiro Yamada 	{PMUX_PINGRP_##grp, PMUX_FUNC_##mux, PMUX_PULL_##pupd, PMUX_TRI_##tri}
1709f455dcSMasahiro Yamada 
1809f455dcSMasahiro Yamada static const struct pmux_pingrp_config disp1_default[] = {
1909f455dcSMasahiro Yamada 	PINMUX(LDI,   DISPA,      NORMAL,    NORMAL),
2009f455dcSMasahiro Yamada 	PINMUX(LHP0,  DISPA,      NORMAL,    NORMAL),
2109f455dcSMasahiro Yamada 	PINMUX(LHP1,  DISPA,      NORMAL,    NORMAL),
2209f455dcSMasahiro Yamada 	PINMUX(LHP2,  DISPA,      NORMAL,    NORMAL),
2309f455dcSMasahiro Yamada 	PINMUX(LHS,   DISPA,      NORMAL,    NORMAL),
2409f455dcSMasahiro Yamada 	PINMUX(LM0,   RSVD4,      NORMAL,    NORMAL),
2509f455dcSMasahiro Yamada 	PINMUX(LPP,   DISPA,      NORMAL,    NORMAL),
2609f455dcSMasahiro Yamada 	PINMUX(LPW0,  DISPA,      NORMAL,    NORMAL),
2709f455dcSMasahiro Yamada 	PINMUX(LPW2,  DISPA,      NORMAL,    NORMAL),
2809f455dcSMasahiro Yamada 	PINMUX(LSC0,  DISPA,      NORMAL,    NORMAL),
2909f455dcSMasahiro Yamada 	PINMUX(LSPI,  DISPA,      NORMAL,    NORMAL),
3009f455dcSMasahiro Yamada 	PINMUX(LVP1,  DISPA,      NORMAL,    NORMAL),
3109f455dcSMasahiro Yamada 	PINMUX(LVS,   DISPA,      NORMAL,    NORMAL),
3209f455dcSMasahiro Yamada 	PINMUX(SLXD,  SPDIF,      NORMAL,    NORMAL),
3309f455dcSMasahiro Yamada };
3409f455dcSMasahiro Yamada 
3509f455dcSMasahiro Yamada 
funcmux_select(enum periph_id id,int config)3609f455dcSMasahiro Yamada int funcmux_select(enum periph_id id, int config)
3709f455dcSMasahiro Yamada {
3809f455dcSMasahiro Yamada 	int bad_config = config != FUNCMUX_DEFAULT;
3909f455dcSMasahiro Yamada 
4009f455dcSMasahiro Yamada 	switch (id) {
4109f455dcSMasahiro Yamada 	case PERIPH_ID_UART1:
4209f455dcSMasahiro Yamada 		switch (config) {
4309f455dcSMasahiro Yamada 		case FUNCMUX_UART1_IRRX_IRTX:
4409f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_IRRX, PMUX_FUNC_UARTA);
4509f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_IRTX, PMUX_FUNC_UARTA);
4609f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_IRRX);
4709f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_IRTX);
4809f455dcSMasahiro Yamada 			break;
4909f455dcSMasahiro Yamada 		case FUNCMUX_UART1_UAA_UAB:
5009f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_UARTA);
5109f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_UARTA);
5209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAA);
5309f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAB);
5409f455dcSMasahiro Yamada 			bad_config = 0;
5509f455dcSMasahiro Yamada 			break;
5609f455dcSMasahiro Yamada 		case FUNCMUX_UART1_GPU:
5709f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GPU, PMUX_FUNC_UARTA);
5809f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GPU);
5909f455dcSMasahiro Yamada 			bad_config = 0;
6009f455dcSMasahiro Yamada 			break;
6109f455dcSMasahiro Yamada 		case FUNCMUX_UART1_SDIO1:
6209f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_UARTA);
6309f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDIO1);
6409f455dcSMasahiro Yamada 			bad_config = 0;
6509f455dcSMasahiro Yamada 			break;
6609f455dcSMasahiro Yamada 		}
6709f455dcSMasahiro Yamada 		if (!bad_config) {
6809f455dcSMasahiro Yamada 			/*
6909f455dcSMasahiro Yamada 			 * Tegra appears to boot with function UARTA pre-
7009f455dcSMasahiro Yamada 			 * selected on mux group SDB. If two mux groups are
7109f455dcSMasahiro Yamada 			 * both set to the same function, it's unclear which
7209f455dcSMasahiro Yamada 			 * group's pins drive the RX signals into the HW.
7309f455dcSMasahiro Yamada 			 * For UARTA, SDB certainly overrides group IRTX in
7409f455dcSMasahiro Yamada 			 * practice. To solve this, configure some alternative
7509f455dcSMasahiro Yamada 			 * function on SDB to avoid the conflict. Also, tri-
7609f455dcSMasahiro Yamada 			 * state the group to avoid driving any signal onto it
7709f455dcSMasahiro Yamada 			 * until we know what's connected.
7809f455dcSMasahiro Yamada 			 */
7909f455dcSMasahiro Yamada 			pinmux_tristate_enable(PMUX_PINGRP_SDB);
8009f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDB,  PMUX_FUNC_SDIO3);
8109f455dcSMasahiro Yamada 		}
8209f455dcSMasahiro Yamada 		break;
8309f455dcSMasahiro Yamada 
8409f455dcSMasahiro Yamada 	case PERIPH_ID_UART2:
8509f455dcSMasahiro Yamada 		if (config == FUNCMUX_UART2_UAD) {
8609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAD, PMUX_FUNC_UARTB);
8709f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAD);
8809f455dcSMasahiro Yamada 		}
8909f455dcSMasahiro Yamada 		break;
9009f455dcSMasahiro Yamada 
9109f455dcSMasahiro Yamada 	case PERIPH_ID_UART4:
9209f455dcSMasahiro Yamada 		if (config == FUNCMUX_UART4_GMC) {
9309f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_UARTD);
9409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMC);
9509f455dcSMasahiro Yamada 		}
9609f455dcSMasahiro Yamada 		break;
9709f455dcSMasahiro Yamada 
9809f455dcSMasahiro Yamada 	case PERIPH_ID_DVC_I2C:
9909f455dcSMasahiro Yamada 		/* there is only one selection, pinmux_config is ignored */
10009f455dcSMasahiro Yamada 		if (config == FUNCMUX_DVC_I2CP) {
10109f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_I2CP, PMUX_FUNC_I2C);
10209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_I2CP);
10309f455dcSMasahiro Yamada 		}
10409f455dcSMasahiro Yamada 		break;
10509f455dcSMasahiro Yamada 
10609f455dcSMasahiro Yamada 	case PERIPH_ID_I2C1:
10709f455dcSMasahiro Yamada 		/* support pinmux_config of 0 for now, */
10809f455dcSMasahiro Yamada 		if (config == FUNCMUX_I2C1_RM) {
10909f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_RM, PMUX_FUNC_I2C);
11009f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_RM);
11109f455dcSMasahiro Yamada 		}
11209f455dcSMasahiro Yamada 		break;
11309f455dcSMasahiro Yamada 	case PERIPH_ID_I2C2: /* I2C2 */
11409f455dcSMasahiro Yamada 		switch (config) {
11509f455dcSMasahiro Yamada 		case FUNCMUX_I2C2_DDC:	/* DDC pin group, select I2C2 */
11609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_I2C2);
11709f455dcSMasahiro Yamada 			/* PTA to HDMI */
11809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_HDMI);
11909f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DDC);
12009f455dcSMasahiro Yamada 			break;
12109f455dcSMasahiro Yamada 		case FUNCMUX_I2C2_PTA:	/* PTA pin group, select I2C2 */
12209f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_PTA, PMUX_FUNC_I2C2);
12309f455dcSMasahiro Yamada 			/* set DDC_SEL to RSVDx (RSVD2 works for now) */
12409f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DDC, PMUX_FUNC_RSVD2);
12509f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_PTA);
12609f455dcSMasahiro Yamada 			bad_config = 0;
12709f455dcSMasahiro Yamada 			break;
12809f455dcSMasahiro Yamada 		}
12909f455dcSMasahiro Yamada 		break;
13009f455dcSMasahiro Yamada 	case PERIPH_ID_I2C3: /* I2C3 */
13109f455dcSMasahiro Yamada 		/* support pinmux_config of 0 for now */
13209f455dcSMasahiro Yamada 		if (config == FUNCMUX_I2C3_DTF) {
13309f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTF, PMUX_FUNC_I2C3);
13409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTF);
13509f455dcSMasahiro Yamada 		}
13609f455dcSMasahiro Yamada 		break;
13709f455dcSMasahiro Yamada 
13809f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC1:
13909f455dcSMasahiro Yamada 		if (config == FUNCMUX_SDMMC1_SDIO1_4BIT) {
14009f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDIO1, PMUX_FUNC_SDIO1);
14109f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDIO1);
14209f455dcSMasahiro Yamada 		}
14309f455dcSMasahiro Yamada 		break;
14409f455dcSMasahiro Yamada 
14509f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC2:
14609f455dcSMasahiro Yamada 		if (config == FUNCMUX_SDMMC2_DTA_DTD_8BIT) {
14709f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTA, PMUX_FUNC_SDIO2);
14809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_DTD, PMUX_FUNC_SDIO2);
14909f455dcSMasahiro Yamada 
15009f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTA);
15109f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_DTD);
15209f455dcSMasahiro Yamada 		}
15309f455dcSMasahiro Yamada 		break;
15409f455dcSMasahiro Yamada 
15509f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC3:
15609f455dcSMasahiro Yamada 		switch (config) {
15709f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC3_SDB_SLXA_8BIT:
15809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXA, PMUX_FUNC_SDIO3);
15909f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXC, PMUX_FUNC_SDIO3);
16009f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXD, PMUX_FUNC_SDIO3);
16109f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SLXK, PMUX_FUNC_SDIO3);
16209f455dcSMasahiro Yamada 
16309f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXA);
16409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXC);
16509f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXD);
16609f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SLXK);
16709f455dcSMasahiro Yamada 			/* fall through */
16809f455dcSMasahiro Yamada 
16909f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC3_SDB_4BIT:
17009f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDB, PMUX_FUNC_SDIO3);
17109f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDC, PMUX_FUNC_SDIO3);
17209f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_SDD, PMUX_FUNC_SDIO3);
17309f455dcSMasahiro Yamada 
17409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDB);
17509f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDC);
17609f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_SDD);
17709f455dcSMasahiro Yamada 			bad_config = 0;
17809f455dcSMasahiro Yamada 			break;
17909f455dcSMasahiro Yamada 		}
18009f455dcSMasahiro Yamada 		break;
18109f455dcSMasahiro Yamada 
18209f455dcSMasahiro Yamada 	case PERIPH_ID_SDMMC4:
18309f455dcSMasahiro Yamada 		switch (config) {
18409f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATC_ATD_8BIT:
18509f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_SDIO4);
18609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATD, PMUX_FUNC_SDIO4);
18709f455dcSMasahiro Yamada 
18809f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATC);
18909f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATD);
19009f455dcSMasahiro Yamada 			break;
19109f455dcSMasahiro Yamada 
19209f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT:
19309f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GME, PMUX_FUNC_SDIO4);
19409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GME);
19509f455dcSMasahiro Yamada 			/* fall through */
19609f455dcSMasahiro Yamada 
19709f455dcSMasahiro Yamada 		case FUNCMUX_SDMMC4_ATB_GMA_4_BIT:
19809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATB, PMUX_FUNC_SDIO4);
19909f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMA, PMUX_FUNC_SDIO4);
20009f455dcSMasahiro Yamada 
20109f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATB);
20209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMA);
20309f455dcSMasahiro Yamada 			bad_config = 0;
20409f455dcSMasahiro Yamada 			break;
20509f455dcSMasahiro Yamada 		}
20609f455dcSMasahiro Yamada 		break;
20709f455dcSMasahiro Yamada 
20809f455dcSMasahiro Yamada 	case PERIPH_ID_KBC:
20909f455dcSMasahiro Yamada 		if (config == FUNCMUX_DEFAULT) {
21009f455dcSMasahiro Yamada 			enum pmux_pingrp grp[] = {PMUX_PINGRP_KBCA,
21109f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCB, PMUX_PINGRP_KBCC,
21209f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCD, PMUX_PINGRP_KBCE,
21309f455dcSMasahiro Yamada 				PMUX_PINGRP_KBCF};
21409f455dcSMasahiro Yamada 			int i;
21509f455dcSMasahiro Yamada 
21609f455dcSMasahiro Yamada 			for (i = 0; i < ARRAY_SIZE(grp); i++) {
21709f455dcSMasahiro Yamada 				pinmux_tristate_disable(grp[i]);
21809f455dcSMasahiro Yamada 				pinmux_set_func(grp[i], PMUX_FUNC_KBC);
21909f455dcSMasahiro Yamada 				pinmux_set_pullupdown(grp[i], PMUX_PULL_UP);
22009f455dcSMasahiro Yamada 			}
22109f455dcSMasahiro Yamada 		}
22209f455dcSMasahiro Yamada 		break;
22309f455dcSMasahiro Yamada 
22409f455dcSMasahiro Yamada 	case PERIPH_ID_USB2:
22509f455dcSMasahiro Yamada 		if (config == FUNCMUX_USB2_ULPI) {
22609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAA, PMUX_FUNC_ULPI);
22709f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UAB, PMUX_FUNC_ULPI);
22809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_UDA, PMUX_FUNC_ULPI);
22909f455dcSMasahiro Yamada 
23009f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAA);
23109f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UAB);
23209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_UDA);
23309f455dcSMasahiro Yamada 		}
23409f455dcSMasahiro Yamada 		break;
23509f455dcSMasahiro Yamada 
23609f455dcSMasahiro Yamada 	case PERIPH_ID_SPI1:
23709f455dcSMasahiro Yamada 		if (config == FUNCMUX_SPI1_GMC_GMD) {
23809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMC, PMUX_FUNC_SFLASH);
23909f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMD, PMUX_FUNC_SFLASH);
24009f455dcSMasahiro Yamada 
24109f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMC);
24209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMD);
24309f455dcSMasahiro Yamada 		}
24409f455dcSMasahiro Yamada 		break;
24509f455dcSMasahiro Yamada 
24609f455dcSMasahiro Yamada 	case PERIPH_ID_NDFLASH:
24709f455dcSMasahiro Yamada 		switch (config) {
24809f455dcSMasahiro Yamada 		case FUNCMUX_NDFLASH_ATC:
24909f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_NAND);
25009f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_ATC);
25109f455dcSMasahiro Yamada 			break;
25209f455dcSMasahiro Yamada 		case FUNCMUX_NDFLASH_KBC_8_BIT:
25309f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCA, PMUX_FUNC_NAND);
2549b219d4dSLucas Stach 			pinmux_set_func(PMUX_PINGRP_KBCB, PMUX_FUNC_NAND);
25509f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCC, PMUX_FUNC_NAND);
25609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCD, PMUX_FUNC_NAND);
25709f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCE, PMUX_FUNC_NAND);
25809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_KBCF, PMUX_FUNC_NAND);
25909f455dcSMasahiro Yamada 
26009f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCA);
2619b219d4dSLucas Stach 			pinmux_tristate_disable(PMUX_PINGRP_KBCB);
26209f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCC);
26309f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCD);
26409f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCE);
26509f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_KBCF);
26609f455dcSMasahiro Yamada 
26709f455dcSMasahiro Yamada 			bad_config = 0;
26809f455dcSMasahiro Yamada 			break;
26909f455dcSMasahiro Yamada 		}
27009f455dcSMasahiro Yamada 		break;
27109f455dcSMasahiro Yamada 	case PERIPH_ID_DISP1:
27209f455dcSMasahiro Yamada 		if (config == FUNCMUX_DEFAULT) {
27309f455dcSMasahiro Yamada 			int i;
27409f455dcSMasahiro Yamada 
27509f455dcSMasahiro Yamada 			for (i = PMUX_PINGRP_LD0; i <= PMUX_PINGRP_LD17; i++) {
27609f455dcSMasahiro Yamada 				pinmux_set_func(i, PMUX_FUNC_DISPA);
27709f455dcSMasahiro Yamada 				pinmux_tristate_disable(i);
27809f455dcSMasahiro Yamada 				pinmux_set_pullupdown(i, PMUX_PULL_NORMAL);
27909f455dcSMasahiro Yamada 			}
28009f455dcSMasahiro Yamada 			pinmux_config_pingrp_table(disp1_default,
28109f455dcSMasahiro Yamada 						   ARRAY_SIZE(disp1_default));
28209f455dcSMasahiro Yamada 		}
28309f455dcSMasahiro Yamada 		break;
28409f455dcSMasahiro Yamada 
28509f455dcSMasahiro Yamada 	default:
28609f455dcSMasahiro Yamada 		debug("%s: invalid periph_id %d", __func__, id);
28709f455dcSMasahiro Yamada 		return -1;
28809f455dcSMasahiro Yamada 	}
28909f455dcSMasahiro Yamada 
29009f455dcSMasahiro Yamada 	if (bad_config) {
29109f455dcSMasahiro Yamada 		debug("%s: invalid config %d for periph_id %d", __func__,
29209f455dcSMasahiro Yamada 		      config, id);
29309f455dcSMasahiro Yamada 		return -1;
29409f455dcSMasahiro Yamada 	}
29509f455dcSMasahiro Yamada 
29609f455dcSMasahiro Yamada 	return 0;
29709f455dcSMasahiro Yamada }
298