107067145STom Warren /*
207067145STom Warren * Copyright (c) 2010-2013, NVIDIA CORPORATION. All rights reserved.
307067145STom Warren *
45b8031ccSTom Rini * SPDX-License-Identifier: GPL-2.0
507067145STom Warren */
607067145STom Warren
707067145STom Warren #include <common.h>
8b0e6ef46SSimon Glass #include <dm.h>
907067145STom Warren #include <asm/arch/pinmux.h>
102a04a317STom Warren #include <asm/arch/gp_padctrl.h>
1107067145STom Warren #include "pinmux-config-dalmore.h"
126d9ea159STom Warren #include <i2c.h>
136d9ea159STom Warren
146d9ea159STom Warren #define BAT_I2C_ADDRESS 0x48 /* TPS65090 charger */
156d9ea159STom Warren #define PMU_I2C_ADDRESS 0x58 /* TPS65913 PMU */
1607067145STom Warren
1707067145STom Warren /*
1807067145STom Warren * Routine: pinmux_init
1907067145STom Warren * Description: Do individual peripheral pinmux configs
2007067145STom Warren */
pinmux_init(void)2107067145STom Warren void pinmux_init(void)
2207067145STom Warren {
23dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_set_nontristate,
248b7776b9STom Warren ARRAY_SIZE(tegra114_pinmux_set_nontristate));
258b7776b9STom Warren
26dfb42fc9SStephen Warren pinmux_config_pingrp_table(tegra114_pinmux_common,
2707067145STom Warren ARRAY_SIZE(tegra114_pinmux_common));
2807067145STom Warren
29dfb42fc9SStephen Warren pinmux_config_pingrp_table(unused_pins_lowpower,
3007067145STom Warren ARRAY_SIZE(unused_pins_lowpower));
312a04a317STom Warren
322a04a317STom Warren /* Initialize any non-default pad configs (APB_MISC_GP regs) */
33dfb42fc9SStephen Warren pinmux_config_drvgrp_table(dalmore_padctrl,
34dfb42fc9SStephen Warren ARRAY_SIZE(dalmore_padctrl));
3507067145STom Warren }
366d9ea159STom Warren
37*1d2c0506SMasahiro Yamada #if defined(CONFIG_MMC_SDHCI_TEGRA)
386d9ea159STom Warren /*
396d9ea159STom Warren * Do I2C/PMU writes to bring up SD card bus power
406d9ea159STom Warren *
416d9ea159STom Warren */
board_sdmmc_voltage_init(void)426d9ea159STom Warren void board_sdmmc_voltage_init(void)
436d9ea159STom Warren {
44b0e6ef46SSimon Glass struct udevice *dev;
456d9ea159STom Warren uchar reg, data_buffer[1];
466d9ea159STom Warren int ret;
476d9ea159STom Warren
4825ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
49b0e6ef46SSimon Glass if (ret) {
50b0e6ef46SSimon Glass debug("%s: Cannot find PMIC I2C chip\n", __func__);
51b0e6ef46SSimon Glass return;
52b0e6ef46SSimon Glass }
536d9ea159STom Warren
546d9ea159STom Warren /* TPS65913: LDO9_VOLTAGE = 3.3V */
556d9ea159STom Warren data_buffer[0] = 0x31;
566d9ea159STom Warren reg = 0x61;
576d9ea159STom Warren
58f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1);
596d9ea159STom Warren if (ret)
606d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
616d9ea159STom Warren __func__, reg, data_buffer[0], ret);
626d9ea159STom Warren
636d9ea159STom Warren /* TPS65913: LDO9_CTRL = Active */
646d9ea159STom Warren data_buffer[0] = 0x01;
656d9ea159STom Warren reg = 0x60;
666d9ea159STom Warren
67f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1);
686d9ea159STom Warren if (ret)
696d9ea159STom Warren printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
706d9ea159STom Warren __func__, reg, data_buffer[0], ret);
716d9ea159STom Warren
726d9ea159STom Warren /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */
736d9ea159STom Warren data_buffer[0] = 0x03;
746d9ea159STom Warren reg = 0x14;
756d9ea159STom Warren
7625ab4b03SSimon Glass ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, 1, &dev);
77b0e6ef46SSimon Glass if (ret) {
78b0e6ef46SSimon Glass debug("%s: Cannot find charger I2C chip\n", __func__);
79b0e6ef46SSimon Glass return;
80b0e6ef46SSimon Glass }
81f9a4c2daSSimon Glass ret = dm_i2c_write(dev, reg, data_buffer, 1);
826d9ea159STom Warren if (ret)
836d9ea159STom Warren printf("%s: BAT i2c_write %02X<-%02X returned %d\n",
846d9ea159STom Warren __func__, reg, data_buffer[0], ret);
856d9ea159STom Warren }
866d9ea159STom Warren
876d9ea159STom Warren /*
886d9ea159STom Warren * Routine: pin_mux_mmc
896d9ea159STom Warren * Description: setup the MMC muxes, power rails, etc.
906d9ea159STom Warren */
pin_mux_mmc(void)916d9ea159STom Warren void pin_mux_mmc(void)
926d9ea159STom Warren {
936d9ea159STom Warren /*
946d9ea159STom Warren * NOTE: We don't do mmc-specific pin muxes here.
956d9ea159STom Warren * They were done globally in pinmux_init().
966d9ea159STom Warren */
976d9ea159STom Warren
986d9ea159STom Warren /* Bring up the SDIO3 power rail */
996d9ea159STom Warren board_sdmmc_voltage_init();
1006d9ea159STom Warren }
1016d9ea159STom Warren #endif /* MMC */
102