107067145STom Warren /* 207067145STom Warren * Copyright (c) 2010-2013, NVIDIA CORPORATION. All rights reserved. 307067145STom Warren * 407067145STom Warren * This program is free software; you can redistribute it and/or modify it 507067145STom Warren * under the terms and conditions of the GNU General Public License, 607067145STom Warren * version 2, as published by the Free Software Foundation. 707067145STom Warren * 807067145STom Warren * This program is distributed in the hope it will be useful, but WITHOUT 907067145STom Warren * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1007067145STom Warren * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 1107067145STom Warren * more details. 1207067145STom Warren * 1307067145STom Warren * You should have received a copy of the GNU General Public License 1407067145STom Warren * along with this program. If not, see <http://www.gnu.org/licenses/>. 1507067145STom Warren */ 1607067145STom Warren 1707067145STom Warren #include <common.h> 1807067145STom Warren #include <asm/arch/pinmux.h> 192a04a317STom Warren #include <asm/arch/gp_padctrl.h> 2007067145STom Warren #include "pinmux-config-dalmore.h" 21*6d9ea159STom Warren #include <i2c.h> 22*6d9ea159STom Warren 23*6d9ea159STom Warren #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */ 24*6d9ea159STom Warren #define PMU_I2C_ADDRESS 0x58 /* TPS65913 PMU */ 2507067145STom Warren 2607067145STom Warren /* 2707067145STom Warren * Routine: pinmux_init 2807067145STom Warren * Description: Do individual peripheral pinmux configs 2907067145STom Warren */ 3007067145STom Warren void pinmux_init(void) 3107067145STom Warren { 328b7776b9STom Warren pinmux_config_table(tegra114_pinmux_set_nontristate, 338b7776b9STom Warren ARRAY_SIZE(tegra114_pinmux_set_nontristate)); 348b7776b9STom Warren 3507067145STom Warren pinmux_config_table(tegra114_pinmux_common, 3607067145STom Warren ARRAY_SIZE(tegra114_pinmux_common)); 3707067145STom Warren 3807067145STom Warren pinmux_config_table(unused_pins_lowpower, 3907067145STom Warren ARRAY_SIZE(unused_pins_lowpower)); 402a04a317STom Warren 412a04a317STom Warren /* Initialize any non-default pad configs (APB_MISC_GP regs) */ 422a04a317STom Warren padgrp_config_table(dalmore_padctrl, ARRAY_SIZE(dalmore_padctrl)); 4307067145STom Warren } 44*6d9ea159STom Warren 45*6d9ea159STom Warren #if defined(CONFIG_TEGRA_MMC) 46*6d9ea159STom Warren /* 47*6d9ea159STom Warren * Do I2C/PMU writes to bring up SD card bus power 48*6d9ea159STom Warren * 49*6d9ea159STom Warren */ 50*6d9ea159STom Warren void board_sdmmc_voltage_init(void) 51*6d9ea159STom Warren { 52*6d9ea159STom Warren uchar reg, data_buffer[1]; 53*6d9ea159STom Warren int ret; 54*6d9ea159STom Warren 55*6d9ea159STom Warren ret = i2c_set_bus_num(0);/* PMU is on bus 0 */ 56*6d9ea159STom Warren if (ret) 57*6d9ea159STom Warren printf("%s: i2c_set_bus_num returned %d\n", __func__, ret); 58*6d9ea159STom Warren 59*6d9ea159STom Warren /* TPS65913: LDO9_VOLTAGE = 3.3V */ 60*6d9ea159STom Warren data_buffer[0] = 0x31; 61*6d9ea159STom Warren reg = 0x61; 62*6d9ea159STom Warren 63*6d9ea159STom Warren ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 64*6d9ea159STom Warren if (ret) 65*6d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 66*6d9ea159STom Warren __func__, reg, data_buffer[0], ret); 67*6d9ea159STom Warren 68*6d9ea159STom Warren /* TPS65913: LDO9_CTRL = Active */ 69*6d9ea159STom Warren data_buffer[0] = 0x01; 70*6d9ea159STom Warren reg = 0x60; 71*6d9ea159STom Warren 72*6d9ea159STom Warren ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 73*6d9ea159STom Warren if (ret) 74*6d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 75*6d9ea159STom Warren __func__, reg, data_buffer[0], ret); 76*6d9ea159STom Warren 77*6d9ea159STom Warren /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */ 78*6d9ea159STom Warren data_buffer[0] = 0x03; 79*6d9ea159STom Warren reg = 0x14; 80*6d9ea159STom Warren 81*6d9ea159STom Warren ret = i2c_write(BAT_I2C_ADDRESS, reg, 1, data_buffer, 1); 82*6d9ea159STom Warren if (ret) 83*6d9ea159STom Warren printf("%s: BAT i2c_write %02X<-%02X returned %d\n", 84*6d9ea159STom Warren __func__, reg, data_buffer[0], ret); 85*6d9ea159STom Warren } 86*6d9ea159STom Warren 87*6d9ea159STom Warren /* 88*6d9ea159STom Warren * Routine: pin_mux_mmc 89*6d9ea159STom Warren * Description: setup the MMC muxes, power rails, etc. 90*6d9ea159STom Warren */ 91*6d9ea159STom Warren void pin_mux_mmc(void) 92*6d9ea159STom Warren { 93*6d9ea159STom Warren /* 94*6d9ea159STom Warren * NOTE: We don't do mmc-specific pin muxes here. 95*6d9ea159STom Warren * They were done globally in pinmux_init(). 96*6d9ea159STom Warren */ 97*6d9ea159STom Warren 98*6d9ea159STom Warren /* Bring up the SDIO3 power rail */ 99*6d9ea159STom Warren board_sdmmc_voltage_init(); 100*6d9ea159STom Warren } 101*6d9ea159STom Warren #endif /* MMC */ 102