1 /* 2 * Copyright (c) 2010-2013, NVIDIA CORPORATION. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms and conditions of the GNU General Public License, 6 * version 2, as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 11 * more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #include <common.h> 18 #include <asm/arch/pinmux.h> 19 #include <asm/arch/gp_padctrl.h> 20 #include "pinmux-config-dalmore.h" 21 #include <i2c.h> 22 23 #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */ 24 #define PMU_I2C_ADDRESS 0x58 /* TPS65913 PMU */ 25 26 /* 27 * Routine: pinmux_init 28 * Description: Do individual peripheral pinmux configs 29 */ 30 void pinmux_init(void) 31 { 32 pinmux_config_table(tegra114_pinmux_set_nontristate, 33 ARRAY_SIZE(tegra114_pinmux_set_nontristate)); 34 35 pinmux_config_table(tegra114_pinmux_common, 36 ARRAY_SIZE(tegra114_pinmux_common)); 37 38 pinmux_config_table(unused_pins_lowpower, 39 ARRAY_SIZE(unused_pins_lowpower)); 40 41 /* Initialize any non-default pad configs (APB_MISC_GP regs) */ 42 padgrp_config_table(dalmore_padctrl, ARRAY_SIZE(dalmore_padctrl)); 43 } 44 45 #if defined(CONFIG_TEGRA_MMC) 46 /* 47 * Do I2C/PMU writes to bring up SD card bus power 48 * 49 */ 50 void board_sdmmc_voltage_init(void) 51 { 52 uchar reg, data_buffer[1]; 53 int ret; 54 55 ret = i2c_set_bus_num(0);/* PMU is on bus 0 */ 56 if (ret) 57 printf("%s: i2c_set_bus_num returned %d\n", __func__, ret); 58 59 /* TPS65913: LDO9_VOLTAGE = 3.3V */ 60 data_buffer[0] = 0x31; 61 reg = 0x61; 62 63 ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 64 if (ret) 65 printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 66 __func__, reg, data_buffer[0], ret); 67 68 /* TPS65913: LDO9_CTRL = Active */ 69 data_buffer[0] = 0x01; 70 reg = 0x60; 71 72 ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1); 73 if (ret) 74 printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 75 __func__, reg, data_buffer[0], ret); 76 77 /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */ 78 data_buffer[0] = 0x03; 79 reg = 0x14; 80 81 ret = i2c_write(BAT_I2C_ADDRESS, reg, 1, data_buffer, 1); 82 if (ret) 83 printf("%s: BAT i2c_write %02X<-%02X returned %d\n", 84 __func__, reg, data_buffer[0], ret); 85 } 86 87 /* 88 * Routine: pin_mux_mmc 89 * Description: setup the MMC muxes, power rails, etc. 90 */ 91 void pin_mux_mmc(void) 92 { 93 /* 94 * NOTE: We don't do mmc-specific pin muxes here. 95 * They were done globally in pinmux_init(). 96 */ 97 98 /* Bring up the SDIO3 power rail */ 99 board_sdmmc_voltage_init(); 100 } 101 #endif /* MMC */ 102