1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0 207067145STom Warren /* 307067145STom Warren * Copyright (c) 2010-2013, NVIDIA CORPORATION. All rights reserved. 407067145STom Warren */ 507067145STom Warren 607067145STom Warren #include <common.h> 7b0e6ef46SSimon Glass #include <dm.h> 807067145STom Warren #include <asm/arch/pinmux.h> 92a04a317STom Warren #include <asm/arch/gp_padctrl.h> 1007067145STom Warren #include "pinmux-config-dalmore.h" 116d9ea159STom Warren #include <i2c.h> 126d9ea159STom Warren 136d9ea159STom Warren #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */ 146d9ea159STom Warren #define PMU_I2C_ADDRESS 0x58 /* TPS65913 PMU */ 1507067145STom Warren 1607067145STom Warren /* 1707067145STom Warren * Routine: pinmux_init 1807067145STom Warren * Description: Do individual peripheral pinmux configs 1907067145STom Warren */ 2007067145STom Warren void pinmux_init(void) 2107067145STom Warren { 22dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_set_nontristate, 238b7776b9STom Warren ARRAY_SIZE(tegra114_pinmux_set_nontristate)); 248b7776b9STom Warren 25dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_common, 2607067145STom Warren ARRAY_SIZE(tegra114_pinmux_common)); 2707067145STom Warren 28dfb42fc9SStephen Warren pinmux_config_pingrp_table(unused_pins_lowpower, 2907067145STom Warren ARRAY_SIZE(unused_pins_lowpower)); 302a04a317STom Warren 312a04a317STom Warren /* Initialize any non-default pad configs (APB_MISC_GP regs) */ 32dfb42fc9SStephen Warren pinmux_config_drvgrp_table(dalmore_padctrl, 33dfb42fc9SStephen Warren ARRAY_SIZE(dalmore_padctrl)); 3407067145STom Warren } 356d9ea159STom Warren 361d2c0506SMasahiro Yamada #if defined(CONFIG_MMC_SDHCI_TEGRA) 376d9ea159STom Warren /* 386d9ea159STom Warren * Do I2C/PMU writes to bring up SD card bus power 396d9ea159STom Warren * 406d9ea159STom Warren */ 416d9ea159STom Warren void board_sdmmc_voltage_init(void) 426d9ea159STom Warren { 43b0e6ef46SSimon Glass struct udevice *dev; 446d9ea159STom Warren uchar reg, data_buffer[1]; 456d9ea159STom Warren int ret; 466d9ea159STom Warren 4725ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev); 48b0e6ef46SSimon Glass if (ret) { 49b0e6ef46SSimon Glass debug("%s: Cannot find PMIC I2C chip\n", __func__); 50b0e6ef46SSimon Glass return; 51b0e6ef46SSimon Glass } 526d9ea159STom Warren 536d9ea159STom Warren /* TPS65913: LDO9_VOLTAGE = 3.3V */ 546d9ea159STom Warren data_buffer[0] = 0x31; 556d9ea159STom Warren reg = 0x61; 566d9ea159STom Warren 57f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 586d9ea159STom Warren if (ret) 596d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 606d9ea159STom Warren __func__, reg, data_buffer[0], ret); 616d9ea159STom Warren 626d9ea159STom Warren /* TPS65913: LDO9_CTRL = Active */ 636d9ea159STom Warren data_buffer[0] = 0x01; 646d9ea159STom Warren reg = 0x60; 656d9ea159STom Warren 66f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 676d9ea159STom Warren if (ret) 686d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n", 696d9ea159STom Warren __func__, reg, data_buffer[0], ret); 706d9ea159STom Warren 716d9ea159STom Warren /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */ 726d9ea159STom Warren data_buffer[0] = 0x03; 736d9ea159STom Warren reg = 0x14; 746d9ea159STom Warren 7525ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, 1, &dev); 76b0e6ef46SSimon Glass if (ret) { 77b0e6ef46SSimon Glass debug("%s: Cannot find charger I2C chip\n", __func__); 78b0e6ef46SSimon Glass return; 79b0e6ef46SSimon Glass } 80f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1); 816d9ea159STom Warren if (ret) 826d9ea159STom Warren printf("%s: BAT i2c_write %02X<-%02X returned %d\n", 836d9ea159STom Warren __func__, reg, data_buffer[0], ret); 846d9ea159STom Warren } 856d9ea159STom Warren 866d9ea159STom Warren /* 876d9ea159STom Warren * Routine: pin_mux_mmc 886d9ea159STom Warren * Description: setup the MMC muxes, power rails, etc. 896d9ea159STom Warren */ 906d9ea159STom Warren void pin_mux_mmc(void) 916d9ea159STom Warren { 926d9ea159STom Warren /* 936d9ea159STom Warren * NOTE: We don't do mmc-specific pin muxes here. 946d9ea159STom Warren * They were done globally in pinmux_init(). 956d9ea159STom Warren */ 966d9ea159STom Warren 976d9ea159STom Warren /* Bring up the SDIO3 power rail */ 986d9ea159STom Warren board_sdmmc_voltage_init(); 996d9ea159STom Warren } 1006d9ea159STom Warren #endif /* MMC */ 101