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