xref: /rk3399_rockchip-uboot/board/nvidia/dalmore/dalmore.c (revision 1d2c0506d31a9997e5ffc22e90942902f673b107)
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