xref: /rk3399_rockchip-uboot/board/nvidia/p2371-2180/p2371-2180.c (revision 9f84da8de1873593d9b708aa4a8a24f46e67c744)
125734281SStephen Warren /*
225734281SStephen Warren  * (C) Copyright 2013-2015
325734281SStephen Warren  * NVIDIA Corporation <www.nvidia.com>
425734281SStephen Warren  *
525734281SStephen Warren  * SPDX-License-Identifier:     GPL-2.0+
625734281SStephen Warren  */
725734281SStephen Warren 
825734281SStephen Warren #include <common.h>
925734281SStephen Warren #include <i2c.h>
1025734281SStephen Warren #include <asm/arch/gpio.h>
1125734281SStephen Warren #include <asm/arch/pinmux.h>
1225734281SStephen Warren #include "../p2571/max77620_init.h"
1325734281SStephen Warren #include "pinmux-config-p2371-2180.h"
1425734281SStephen Warren 
pin_mux_mmc(void)1525734281SStephen Warren void pin_mux_mmc(void)
1625734281SStephen Warren {
1725734281SStephen Warren 	struct udevice *dev;
1825734281SStephen Warren 	uchar val;
1925734281SStephen Warren 	int ret;
2025734281SStephen Warren 
2125734281SStephen Warren 	/* Turn on MAX77620 LDO2 to 3.3V for SD card power */
2225734281SStephen Warren 	debug("%s: Set LDO2 for VDDIO_SDMMC_AP power to 3.3V\n", __func__);
2325734281SStephen Warren 	ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
2425734281SStephen Warren 	if (ret) {
2525734281SStephen Warren 		printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
2625734281SStephen Warren 		return;
2725734281SStephen Warren 	}
2825734281SStephen Warren 	/* 0xF2 for 3.3v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
2925734281SStephen Warren 	val = 0xF2;
3025734281SStephen Warren 	ret = dm_i2c_write(dev, MAX77620_CNFG1_L2_REG, &val, 1);
3125734281SStephen Warren 	if (ret)
3225734281SStephen Warren 		printf("i2c_write 0 0x3c 0x27 failed: %d\n", ret);
33*efbb3d49SStephen Warren 
34*efbb3d49SStephen Warren 	/* Disable LDO4 discharge */
35*efbb3d49SStephen Warren 	ret = dm_i2c_read(dev, MAX77620_CNFG2_L4_REG, &val, 1);
36*efbb3d49SStephen Warren 	if (ret) {
37*efbb3d49SStephen Warren 		printf("i2c_read 0 0x3c 0x2c failed: %d\n", ret);
38*efbb3d49SStephen Warren 	} else {
39*efbb3d49SStephen Warren 		val &= ~BIT(1); /* ADE */
40*efbb3d49SStephen Warren 		ret = dm_i2c_write(dev, MAX77620_CNFG2_L4_REG, &val, 1);
41*efbb3d49SStephen Warren 		if (ret)
42*efbb3d49SStephen Warren 			printf("i2c_write 0 0x3c 0x2c failed: %d\n", ret);
43*efbb3d49SStephen Warren 	}
44*efbb3d49SStephen Warren 
45*efbb3d49SStephen Warren 	/* Set MBLPD */
46*efbb3d49SStephen Warren 	ret = dm_i2c_read(dev, MAX77620_CNFGGLBL1_REG, &val, 1);
47*efbb3d49SStephen Warren 	if (ret) {
48*efbb3d49SStephen Warren 		printf("i2c_write 0 0x3c 0x00 failed: %d\n", ret);
49*efbb3d49SStephen Warren 	} else {
50*efbb3d49SStephen Warren 		val |= BIT(6); /* MBLPD */
51*efbb3d49SStephen Warren 		ret = dm_i2c_write(dev, MAX77620_CNFGGLBL1_REG, &val, 1);
52*efbb3d49SStephen Warren 		if (ret)
53*efbb3d49SStephen Warren 			printf("i2c_write 0 0x3c 0x00 failed: %d\n", ret);
54*efbb3d49SStephen Warren 	}
5525734281SStephen Warren }
5625734281SStephen Warren 
5725734281SStephen Warren /*
5825734281SStephen Warren  * Routine: pinmux_init
5925734281SStephen Warren  * Description: Do individual peripheral pinmux configs
6025734281SStephen Warren  */
pinmux_init(void)6125734281SStephen Warren void pinmux_init(void)
6225734281SStephen Warren {
6325734281SStephen Warren 	pinmux_clear_tristate_input_clamping();
6425734281SStephen Warren 
6525734281SStephen Warren 	gpio_config_table(p2371_2180_gpio_inits,
6625734281SStephen Warren 			  ARRAY_SIZE(p2371_2180_gpio_inits));
6725734281SStephen Warren 
6825734281SStephen Warren 	pinmux_config_pingrp_table(p2371_2180_pingrps,
6925734281SStephen Warren 				   ARRAY_SIZE(p2371_2180_pingrps));
7025734281SStephen Warren 
7125734281SStephen Warren 	pinmux_config_drvgrp_table(p2371_2180_drvgrps,
7225734281SStephen Warren 				   ARRAY_SIZE(p2371_2180_drvgrps));
7325734281SStephen Warren }
74019bc625SStephen Warren 
75019bc625SStephen Warren #ifdef CONFIG_PCI_TEGRA
tegra_pcie_board_init(void)76019bc625SStephen Warren int tegra_pcie_board_init(void)
77019bc625SStephen Warren {
78019bc625SStephen Warren 	struct udevice *dev;
79019bc625SStephen Warren 	uchar val;
80019bc625SStephen Warren 	int ret;
81019bc625SStephen Warren 
82019bc625SStephen Warren 	/* Turn on MAX77620 LDO1 to 1.05V for PEX power */
83019bc625SStephen Warren 	debug("%s: Set LDO1 for PEX power to 1.05V\n", __func__);
84019bc625SStephen Warren 	ret = i2c_get_chip_for_busnum(0, MAX77620_I2C_ADDR_7BIT, 1, &dev);
85019bc625SStephen Warren 	if (ret) {
86019bc625SStephen Warren 		printf("%s: Cannot find MAX77620 I2C chip\n", __func__);
87019bc625SStephen Warren 		return -1;
88019bc625SStephen Warren 	}
89019bc625SStephen Warren 	/* 0xCA for 1.05v, enabled: bit7:6 = 11 = enable, bit5:0 = voltage */
90019bc625SStephen Warren 	val = 0xCA;
91019bc625SStephen Warren 	ret = dm_i2c_write(dev, MAX77620_CNFG1_L1_REG, &val, 1);
92019bc625SStephen Warren 	if (ret)
93019bc625SStephen Warren 		printf("i2c_write 0 0x3c 0x25 failed: %d\n", ret);
94019bc625SStephen Warren 
95019bc625SStephen Warren 	return 0;
96019bc625SStephen Warren }
97019bc625SStephen Warren #endif /* PCI */
98