1f4ef6668STom Warren /*
2f4ef6668STom Warren * (C) Copyright 2010,2011
3f4ef6668STom Warren * NVIDIA Corporation <www.nvidia.com>
4f4ef6668STom Warren *
51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+
6f4ef6668STom Warren */
7f4ef6668STom Warren
8f4ef6668STom Warren #include <common.h>
9f4ef6668STom Warren #include <asm/io.h>
10*c62db35dSSimon Glass #include <asm/mach-types.h>
11150c2493STom Warren #include <asm/arch/tegra.h>
1219d7bf3dSJeroen Hofstee #include <asm/arch-tegra/board.h>
13ca28090dSSimon Glass #include <asm/arch/clock.h>
14ca28090dSSimon Glass #include <asm/arch/funcmux.h>
15a2ab6b7dSStephen Warren #include <asm/arch/gpio.h>
16ae03661fSStephen Warren #include <asm/arch/pinmux.h>
17ccf7988bSTom Warren #include <asm/gpio.h>
18f4ef6668STom Warren
19a04eba99SSimon Glass /* TODO: Remove this code when the SPI switch is working */
209000652dSAllen Martin #if (CONFIG_MACH_TYPE != MACH_TYPE_VENTANA)
gpio_early_init_uart(void)210cd10c7aSLucas Stach void gpio_early_init_uart(void)
22d5ef19b9SStephen Warren {
23a2ab6b7dSStephen Warren /* Enable UART via GPIO_PI3 (port 8, bit 3) so serial console works */
2401a97a11SStephen Warren gpio_request(TEGRA_GPIO(I, 3), "uart_en");
2501a97a11SStephen Warren gpio_direction_output(TEGRA_GPIO(I, 3), 0);
26d5ef19b9SStephen Warren }
27a04eba99SSimon Glass #endif
28d5ef19b9SStephen Warren
291d2c0506SMasahiro Yamada #ifdef CONFIG_MMC_SDHCI_TEGRA
30ccf7988bSTom Warren /*
31ae03661fSStephen Warren * Routine: pin_mux_mmc
32ae03661fSStephen Warren * Description: setup the pin muxes/tristate values for the SDMMC(s)
33ae03661fSStephen Warren */
pin_mux_mmc(void)34c9aa831eSTom Warren void pin_mux_mmc(void)
35ae03661fSStephen Warren {
36ca28090dSSimon Glass funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_GME_8_BIT);
37ca28090dSSimon Glass funcmux_select(PERIPH_ID_SDMMC3, FUNCMUX_SDMMC3_SDB_4BIT);
38ae03661fSStephen Warren
39ae03661fSStephen Warren /* For power GPIO PI6 */
4070ad375eSStephen Warren pinmux_tristate_disable(PMUX_PINGRP_ATA);
41ae03661fSStephen Warren /* For CD GPIO PI5 */
4270ad375eSStephen Warren pinmux_tristate_disable(PMUX_PINGRP_ATC);
43ae03661fSStephen Warren }
44ccf7988bSTom Warren #endif
45f10393e5SSimon Glass
pin_mux_usb(void)46f10393e5SSimon Glass void pin_mux_usb(void)
47f10393e5SSimon Glass {
486dca554fSStephen Warren /* For USB0's GPIO PD0. For now, since we have no pinmux in fdt */
4970ad375eSStephen Warren pinmux_tristate_disable(PMUX_PINGRP_SLXK);
506dca554fSStephen Warren /* For USB1's ULPI signals */
516dca554fSStephen Warren funcmux_select(PERIPH_ID_USB2, FUNCMUX_USB2_ULPI);
526dca554fSStephen Warren pinmux_set_func(PMUX_PINGRP_CDEV2, PMUX_FUNC_PLLP_OUT4);
536dca554fSStephen Warren pinmux_tristate_disable(PMUX_PINGRP_CDEV2);
546dca554fSStephen Warren /* USB1 PHY reset GPIO */
556dca554fSStephen Warren pinmux_tristate_disable(PMUX_PINGRP_UAC);
56f10393e5SSimon Glass }
57