xref: /openbmc/u-boot/board/nvidia/dalmore/dalmore.c (revision e8f80a5a)
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  */
pinmux_init(void)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  */
board_sdmmc_voltage_init(void)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  */
pin_mux_mmc(void)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