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> 18b0e6ef46SSimon Glass #include <dm.h> 1907067145STom Warren #include <asm/arch/pinmux.h> 202a04a317STom Warren #include <asm/arch/gp_padctrl.h> 2107067145STom Warren #include "pinmux-config-dalmore.h" 226d9ea159STom Warren #include <i2c.h> 236d9ea159STom Warren 246d9ea159STom Warren #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */ 256d9ea159STom Warren #define PMU_I2C_ADDRESS 0x58 /* TPS65913 PMU */ 2607067145STom Warren 2707067145STom Warren /* 2807067145STom Warren * Routine: pinmux_init 2907067145STom Warren * Description: Do individual peripheral pinmux configs 3007067145STom Warren */ 3107067145STom Warren void pinmux_init(void) 3207067145STom Warren { 33dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_set_nontristate, 348b7776b9STom Warren ARRAY_SIZE(tegra114_pinmux_set_nontristate)); 358b7776b9STom Warren 36dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_common, 3707067145STom Warren ARRAY_SIZE(tegra114_pinmux_common)); 3807067145STom Warren 39dfb42fc9SStephen Warren pinmux_config_pingrp_table(unused_pins_lowpower, 4007067145STom Warren ARRAY_SIZE(unused_pins_lowpower)); 412a04a317STom Warren 422a04a317STom Warren /* Initialize any non-default pad configs (APB_MISC_GP regs) */ 43dfb42fc9SStephen Warren pinmux_config_drvgrp_table(dalmore_padctrl, 44dfb42fc9SStephen Warren ARRAY_SIZE(dalmore_padctrl)); 4507067145STom Warren } 466d9ea159STom Warren 476d9ea159STom Warren #if defined(CONFIG_TEGRA_MMC) 486d9ea159STom Warren /* 496d9ea159STom Warren * Do I2C/PMU writes to bring up SD card bus power 506d9ea159STom Warren * 516d9ea159STom Warren */ 526d9ea159STom Warren void board_sdmmc_voltage_init(void) 536d9ea159STom Warren { 54b0e6ef46SSimon Glass struct udevice *dev; 556d9ea159STom Warren uchar reg, data_buffer[1]; 566d9ea159STom Warren int ret; 576d9ea159STom Warren 58*25ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev); 59b0e6ef46SSimon Glass if (ret) { 60b0e6ef46SSimon Glass debug("%s: Cannot find PMIC I2C chip\n", __func__); 61b0e6ef46SSimon Glass return; 62b0e6ef46SSimon Glass } 636d9ea159STom Warren 646d9ea159STom Warren /* TPS65913: LDO9_VOLTAGE = 3.3V */ 656d9ea159STom Warren data_buffer[0] = 0x31; 666d9ea159STom Warren reg = 0x61; 676d9ea159STom Warren 68f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 696d9ea159STom Warren if (ret) 706d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 716d9ea159STom Warren __func__, reg, data_buffer[0], ret); 726d9ea159STom Warren 736d9ea159STom Warren /* TPS65913: LDO9_CTRL = Active */ 746d9ea159STom Warren data_buffer[0] = 0x01; 756d9ea159STom Warren reg = 0x60; 766d9ea159STom Warren 77f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 786d9ea159STom Warren if (ret) 796d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 806d9ea159STom Warren __func__, reg, data_buffer[0], ret); 816d9ea159STom Warren 826d9ea159STom Warren /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */ 836d9ea159STom Warren data_buffer[0] = 0x03; 846d9ea159STom Warren reg = 0x14; 856d9ea159STom Warren 86*25ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, 1, &dev); 87b0e6ef46SSimon Glass if (ret) { 88b0e6ef46SSimon Glass debug("%s: Cannot find charger I2C chip\n", __func__); 89b0e6ef46SSimon Glass return; 90b0e6ef46SSimon Glass } 91f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 926d9ea159STom Warren if (ret) 936d9ea159STom Warren printf("%s: BAT i2c_write %02X<-%02X returned %d\n", 946d9ea159STom Warren __func__, reg, data_buffer[0], ret); 956d9ea159STom Warren } 966d9ea159STom Warren 976d9ea159STom Warren /* 986d9ea159STom Warren * Routine: pin_mux_mmc 996d9ea159STom Warren * Description: setup the MMC muxes, power rails, etc. 1006d9ea159STom Warren */ 1016d9ea159STom Warren void pin_mux_mmc(void) 1026d9ea159STom Warren { 1036d9ea159STom Warren /* 1046d9ea159STom Warren * NOTE: We don't do mmc-specific pin muxes here. 1056d9ea159STom Warren * They were done globally in pinmux_init(). 1066d9ea159STom Warren */ 1076d9ea159STom Warren 1086d9ea159STom Warren /* Bring up the SDIO3 power rail */ 1096d9ea159STom Warren board_sdmmc_voltage_init(); 1106d9ea159STom Warren } 1116d9ea159STom Warren #endif /* MMC */ 112