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" 216d9ea159STom Warren #include <i2c.h> 226d9ea159STom Warren 236d9ea159STom Warren #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */ 246d9ea159STom 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 { 32*dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_set_nontristate, 338b7776b9STom Warren ARRAY_SIZE(tegra114_pinmux_set_nontristate)); 348b7776b9STom Warren 35*dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_common, 3607067145STom Warren ARRAY_SIZE(tegra114_pinmux_common)); 3707067145STom Warren 38*dfb42fc9SStephen Warren pinmux_config_pingrp_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) */ 42*dfb42fc9SStephen Warren pinmux_config_drvgrp_table(dalmore_padctrl, 43*dfb42fc9SStephen Warren ARRAY_SIZE(dalmore_padctrl)); 4407067145STom Warren } 456d9ea159STom Warren 466d9ea159STom Warren #if defined(CONFIG_TEGRA_MMC) 476d9ea159STom Warren /* 486d9ea159STom Warren * Do I2C/PMU writes to bring up SD card bus power 496d9ea159STom Warren * 506d9ea159STom Warren */ 516d9ea159STom Warren void board_sdmmc_voltage_init(void) 526d9ea159STom Warren { 536d9ea159STom Warren uchar reg, data_buffer[1]; 546d9ea159STom Warren int ret; 556d9ea159STom Warren 566d9ea159STom Warren ret = i2c_set_bus_num(0);/* PMU is on bus 0 */ 576d9ea159STom Warren if (ret) 586d9ea159STom Warren printf("%s: i2c_set_bus_num returned %d\n", __func__, ret); 596d9ea159STom Warren 606d9ea159STom Warren /* TPS65913: LDO9_VOLTAGE = 3.3V */ 616d9ea159STom Warren data_buffer[0] = 0x31; 626d9ea159STom Warren reg = 0x61; 636d9ea159STom Warren 646d9ea159STom Warren ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 656d9ea159STom Warren if (ret) 666d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 676d9ea159STom Warren __func__, reg, data_buffer[0], ret); 686d9ea159STom Warren 696d9ea159STom Warren /* TPS65913: LDO9_CTRL = Active */ 706d9ea159STom Warren data_buffer[0] = 0x01; 716d9ea159STom Warren reg = 0x60; 726d9ea159STom Warren 736d9ea159STom Warren ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 746d9ea159STom Warren if (ret) 756d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 766d9ea159STom Warren __func__, reg, data_buffer[0], ret); 776d9ea159STom Warren 786d9ea159STom Warren /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */ 796d9ea159STom Warren data_buffer[0] = 0x03; 806d9ea159STom Warren reg = 0x14; 816d9ea159STom Warren 826d9ea159STom Warren ret = i2c_write(BAT_I2C_ADDRESS, reg, 1, data_buffer, 1); 836d9ea159STom Warren if (ret) 846d9ea159STom Warren printf("%s: BAT i2c_write %02X<-%02X returned %d\n", 856d9ea159STom Warren __func__, reg, data_buffer[0], ret); 866d9ea159STom Warren } 876d9ea159STom Warren 886d9ea159STom Warren /* 896d9ea159STom Warren * Routine: pin_mux_mmc 906d9ea159STom Warren * Description: setup the MMC muxes, power rails, etc. 916d9ea159STom Warren */ 926d9ea159STom Warren void pin_mux_mmc(void) 936d9ea159STom Warren { 946d9ea159STom Warren /* 956d9ea159STom Warren * NOTE: We don't do mmc-specific pin muxes here. 966d9ea159STom Warren * They were done globally in pinmux_init(). 976d9ea159STom Warren */ 986d9ea159STom Warren 996d9ea159STom Warren /* Bring up the SDIO3 power rail */ 1006d9ea159STom Warren board_sdmmc_voltage_init(); 1016d9ea159STom Warren } 1026d9ea159STom Warren #endif /* MMC */ 103