1 /*
2  *  Copyright (C) 2012 Lucas Stach
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #include <common.h>
8 #include <asm/arch/clock.h>
9 #include <asm/arch/funcmux.h>
10 #include <asm/arch/pinmux.h>
11 #include <asm/arch-tegra/board.h>
12 #include <asm/gpio.h>
13 
14 #ifdef CONFIG_TEGRA_MMC
15 /*
16  * Routine: pin_mux_mmc
17  * Description: setup the pin muxes/tristate values for the SDMMC(s)
18  */
19 void pin_mux_mmc(void)
20 {
21 	funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_4_BIT);
22 	pinmux_tristate_disable(PMUX_PINGRP_GMB);
23 }
24 #endif
25 
26 #ifdef CONFIG_TEGRA_NAND
27 void pin_mux_nand(void)
28 {
29 	funcmux_select(PERIPH_ID_NDFLASH, FUNCMUX_NDFLASH_KBC_8_BIT);
30 
31 	/*
32 	 * configure pingroup ATC to something unrelated to
33 	 * avoid ATC overriding KBC
34 	 */
35 	pinmux_set_func(PMUX_PINGRP_ATC, PMUX_FUNC_GMI);
36 }
37 #endif
38 
39 #ifdef CONFIG_USB_EHCI_TEGRA
40 void pin_mux_usb(void)
41 {
42 	/* module internal USB bus to connect ethernet chipset */
43 	funcmux_select(PERIPH_ID_USB2, FUNCMUX_USB2_ULPI);
44 
45 	/* ULPI reference clock output */
46 	pinmux_set_func(PMUX_PINGRP_CDEV2, PMUX_FUNC_PLLP_OUT4);
47 	pinmux_tristate_disable(PMUX_PINGRP_CDEV2);
48 
49 	/* PHY reset GPIO */
50 	pinmux_tristate_disable(PMUX_PINGRP_UAC);
51 
52 	/* VBus GPIO */
53 	pinmux_tristate_disable(PMUX_PINGRP_DTE);
54 
55 	/* Reset ASIX using LAN_RESET */
56 	gpio_request(GPIO_PV4, "LAN_RESET");
57 	gpio_direction_output(GPIO_PV4, 0);
58 	pinmux_tristate_disable(PMUX_PINGRP_GPV);
59 	udelay(5);
60 	gpio_set_value(GPIO_PV4, 1);
61 
62 	/* USBH_PEN: USB 1 aka Tegra USB port 3 VBus */
63 	pinmux_tristate_disable(PMUX_PINGRP_SPIG);
64 }
65 #endif
66