xref: /rk3399_rockchip-uboot/arch/arm/mach-tegra/tegra114/funcmux.c (revision 5b8031ccb4ed6e84457d883198d77efc307085dc)
109f455dcSMasahiro Yamada /*
209f455dcSMasahiro Yamada  * Copyright (c) 2010-2013, NVIDIA CORPORATION.  All rights reserved.
309f455dcSMasahiro Yamada  *
4*5b8031ccSTom Rini  * SPDX-License-Identifier:	GPL-2.0
509f455dcSMasahiro Yamada  */
609f455dcSMasahiro Yamada 
709f455dcSMasahiro Yamada /* Tegra114 high-level function multiplexing */
809f455dcSMasahiro Yamada 
909f455dcSMasahiro Yamada #include <common.h>
1009f455dcSMasahiro Yamada #include <asm/arch/clock.h>
1109f455dcSMasahiro Yamada #include <asm/arch/funcmux.h>
1209f455dcSMasahiro Yamada #include <asm/arch/pinmux.h>
1309f455dcSMasahiro Yamada 
funcmux_select(enum periph_id id,int config)1409f455dcSMasahiro Yamada int funcmux_select(enum periph_id id, int config)
1509f455dcSMasahiro Yamada {
1609f455dcSMasahiro Yamada 	int bad_config = config != FUNCMUX_DEFAULT;
1709f455dcSMasahiro Yamada 
1809f455dcSMasahiro Yamada 	switch (id) {
1909f455dcSMasahiro Yamada 	case PERIPH_ID_UART4:
2009f455dcSMasahiro Yamada 		switch (config) {
2109f455dcSMasahiro Yamada 		case FUNCMUX_UART4_GMI:
2209f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMI_A16_PJ7,
2309f455dcSMasahiro Yamada 					PMUX_FUNC_UARTD);
2409f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMI_A17_PB0,
2509f455dcSMasahiro Yamada 					PMUX_FUNC_UARTD);
2609f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMI_A18_PB1,
2709f455dcSMasahiro Yamada 					PMUX_FUNC_UARTD);
2809f455dcSMasahiro Yamada 			pinmux_set_func(PMUX_PINGRP_GMI_A19_PK7,
2909f455dcSMasahiro Yamada 					PMUX_FUNC_UARTD);
3009f455dcSMasahiro Yamada 
3109f455dcSMasahiro Yamada 			pinmux_set_io(PMUX_PINGRP_GMI_A16_PJ7, PMUX_PIN_OUTPUT);
3209f455dcSMasahiro Yamada 			pinmux_set_io(PMUX_PINGRP_GMI_A17_PB0, PMUX_PIN_INPUT);
3309f455dcSMasahiro Yamada 			pinmux_set_io(PMUX_PINGRP_GMI_A18_PB1, PMUX_PIN_INPUT);
3409f455dcSMasahiro Yamada 			pinmux_set_io(PMUX_PINGRP_GMI_A19_PK7, PMUX_PIN_OUTPUT);
3509f455dcSMasahiro Yamada 
3609f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMI_A16_PJ7);
3709f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMI_A17_PB0);
3809f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMI_A18_PB1);
3909f455dcSMasahiro Yamada 			pinmux_tristate_disable(PMUX_PINGRP_GMI_A19_PK7);
4009f455dcSMasahiro Yamada 			break;
4109f455dcSMasahiro Yamada 		}
4209f455dcSMasahiro Yamada 		break;
4309f455dcSMasahiro Yamada 
4409f455dcSMasahiro Yamada 	/* Add other periph IDs here as needed */
4509f455dcSMasahiro Yamada 
4609f455dcSMasahiro Yamada 	default:
4709f455dcSMasahiro Yamada 		debug("%s: invalid periph_id %d", __func__, id);
4809f455dcSMasahiro Yamada 		return -1;
4909f455dcSMasahiro Yamada 	}
5009f455dcSMasahiro Yamada 
5109f455dcSMasahiro Yamada 	if (bad_config) {
5209f455dcSMasahiro Yamada 		debug("%s: invalid config %d for periph_id %d", __func__,
5309f455dcSMasahiro Yamada 		      config, id);
5409f455dcSMasahiro Yamada 		return -1;
5509f455dcSMasahiro Yamada 	}
5609f455dcSMasahiro Yamada 	return 0;
5709f455dcSMasahiro Yamada }
58