These powerrails are currently needed for kernel boot. This will
be move to a pmic-specific driver (or even better moved to the
kernel) at a later date.

Signed-off-by: Tom Warren <twar...@nvidia.com>
Change-Id: Id1654e6338b11cb22715fa3caba644cfe6e2410b
---
 arch/arm/include/asm/arch-tegra/board.h |   3 +
 board/nvidia/common/board.c             |   4 +
 board/nvidia/dalmore/dalmore.c          | 154 +++++++++++++++++++++++++++-----
 include/configs/dalmore.h               |   3 +
 4 files changed, 140 insertions(+), 24 deletions(-)

diff --git a/arch/arm/include/asm/arch-tegra/board.h 
b/arch/arm/include/asm/arch-tegra/board.h
index 0e69864..b148b25 100644
--- a/arch/arm/include/asm/arch-tegra/board.h
+++ b/arch/arm/include/asm/arch-tegra/board.h
@@ -29,4 +29,7 @@ void pin_mux_spi(void);      /* overrideable SPI pinmux setup 
    */
 void pin_mux_nand(void);     /* overrideable NAND pinmux setup    */
 void pin_mux_display(void);  /* overrideable DISPLAY pinmux setup */
 
+/* Enable needed power rails */
+void board_vreg_init(void);
+
 #endif
diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c
index 126e56e..c479958 100644
--- a/board/nvidia/common/board.c
+++ b/board/nvidia/common/board.c
@@ -151,6 +151,10 @@ int board_init(void)
 # endif /* CONFIG_TEGRA_PMU */
 #endif /* CONFIG_SYS_I2C_TEGRA */
 
+#ifdef CONFIG_TEGRA114
+       /* Enable needed power rails. TBD: Move to kernel or driver init. */
+       board_vreg_init();
+#endif
 #ifdef CONFIG_USB_EHCI_TEGRA
        pin_mux_usb();
        board_usb_init(gd->fdt_blob);
diff --git a/board/nvidia/dalmore/dalmore.c b/board/nvidia/dalmore/dalmore.c
index 2c23a29..27f9ab2 100644
--- a/board/nvidia/dalmore/dalmore.c
+++ b/board/nvidia/dalmore/dalmore.c
@@ -15,8 +15,10 @@
  */
 
 #include <common.h>
-#include <asm/arch/pinmux.h>
+#include <asm-generic/gpio.h>
+#include <asm/arch/gpio.h>
 #include <asm/arch/gp_padctrl.h>
+#include <asm/arch/pinmux.h>
 #include "pinmux-config-dalmore.h"
 #include <i2c.h>
 
@@ -42,6 +44,20 @@ void pinmux_init(void)
        padgrp_config_table(dalmore_padctrl, ARRAY_SIZE(dalmore_padctrl));
 }
 
+/* Writes val to reg @ chip address pmu */
+void i2c_write_pmic(uchar pmu, uchar reg, uchar val)
+{
+       uchar data_buffer[1];
+       int ret;
+
+       data_buffer[0] = val;
+
+       ret = i2c_write(pmu, reg, 1, data_buffer, 1);
+       if (ret)
+               printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
+                       __func__, reg, data_buffer[0], ret);
+}
+
 #if defined(CONFIG_TEGRA_MMC)
 /*
  * Do I2C/PMU writes to bring up SD card bus power
@@ -49,39 +65,129 @@ void pinmux_init(void)
  */
 void board_sdmmc_voltage_init(void)
 {
-       uchar reg, data_buffer[1];
-       int ret;
-
-       ret = i2c_set_bus_num(0);/* PMU is on bus 0 */
+       int ret = i2c_set_bus_num(0);   /* PMU is on bus 0 */
        if (ret)
                printf("%s: i2c_set_bus_num returned %d\n", __func__, ret);
 
        /* TPS65913: LDO9_VOLTAGE = 3.3V */
-       data_buffer[0] = 0x31;
-       reg = 0x61;
-
-       ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1);
-       if (ret)
-               printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
-                       __func__, reg, data_buffer[0], ret);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x61, 0x31);
 
        /* TPS65913: LDO9_CTRL = Active */
-       data_buffer[0] = 0x01;
-       reg = 0x60;
-
-       ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1);
-       if (ret)
-               printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
-                       __func__, reg, data_buffer[0], ret);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x60, 0x01);
 
        /* TPS65090: FET6_CTRL = enable output auto discharge, enable FET6 */
-       data_buffer[0] = 0x03;
-       reg = 0x14;
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x14, 0x03);
+}
 
-       ret = i2c_write(BAT_I2C_ADDRESS, reg, 1, data_buffer, 1);
+void board_vreg_init(void)
+{
+       int ret = i2c_set_bus_num(0);   /* PMU is on bus 0 */
        if (ret)
-               printf("%s: BAT i2c_write %02X<-%02X returned %d\n",
-                       __func__, reg, data_buffer[0], ret);
+               printf("%s: i2c_set_bus_num returned %d\n", __func__, ret);
+
+       /*
+        * Enable USB voltage: AVDD_USB_HDMI for AVDD_USB_AP
+        *                      and AVDD_HDMI_AP
+        *   LDOUSB_VOLTAGE = 3.3v
+        *   LDOUSB_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x65, 0x31);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x64, 0x01);
+
+       /*
+        * Enable HVDD_USB3 voltage: HVDD_USB3_AP
+        *   LDOLN_VOLTAGE = 3.3v
+        *   LDOLN_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x63, 0x31);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x62, 0x01);
+
+       /*
+        * Enable additional VDD_1V1_CORE
+        *
+        *   SMPS7_CTRL: enable active: auto
+        *
+        *   VDD_CORE is provided by SMPS4_SW, 5 and 7 where
+        *   4 and 5 are enabled after power on.
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x30, 0x05);
+
+       /*
+        * Set and enable AVDD_2V8_CAM1
+        *   LDO1_VOLTAGE = 2.8v
+        *   LDO1_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x51, 0x27);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x50, 0x01);
+
+       /*
+        * Set and enable AVDD_2V8_CAM2
+        *   LDO2_VOLTAGE = 2.8v
+        *   LDO2_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x53, 0x27);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x52, 0x01);
+
+       /*
+        * Set and enable AVDD_1V2 for VDDIO_HSIC_AP and AVDD_DSI_CSI_AP
+        *   LDO3_VOLTAGE = 1.2v
+        *   LDO3_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x55, 0x07);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x54, 0x01);
+
+       /*
+        * Set and enable VPP_FUSE_APP
+        *   LDO4_VOLTAGE = 1.8v
+        *   LDO4_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x57, 0x13);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x56, 0x01);
+
+       /*
+        * Set and enable VDD_1V2_LCD
+        *   LDO5_VOLTAGE = 1.2v (TPS65913)
+        *   LDO5_CTRL = Active
+        *
+        * Enable VDD_LCD_BL
+        *   VOUT1 (FET1) (TPS65090): auto discharge and enable
+        *
+        * Enable AVDD_LCD
+        *   VOUT4 (FET4) (TPS65090): auto discharge and enable
+        *
+        * Enable VDD_LVDS
+        *   VOUT5 (FET5) (TPS65090): auto discharge and enable
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x59, 0x07); /* LDO5_VOLTAGE */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x58, 0x01); /* LD05_CTRL */
+       i2c_write_pmic(BAT_I2C_ADDRESS, 0x0F, 0x03); /* VOUT1 (FET1) */
+       i2c_write_pmic(BAT_I2C_ADDRESS, 0x12, 0x03); /* VOUT4 (FET4) */
+       i2c_write_pmic(BAT_I2C_ADDRESS, 0x13, 0x03); /* VOUT5 (FET5) */
+
+       /*
+        * Set and enable VDD_SENSOR
+        *   LDO6_VOLTAGE = 2.85v
+        *   LDO6_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x5B, 0x28);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x5A, 0x01);
+
+       /*
+        * Set and enable AVDD_2V8_CAM_AF1
+        *   LDO7_VOLTAGE = 2.8v
+        *   LDO7_CTRL = Active
+        */
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x5D, 0x27);
+       i2c_write_pmic(PMU_I2C_ADDRESS, 0x5C, 0x01);
+
+       /*
+        * Enable VDD_3V3_COM
+        *   VOUT7 (FET7) (TPS65090): auto discharge and enable
+        */
+       i2c_write_pmic(BAT_I2C_ADDRESS, 0x15, 0x03);
+
+       /* Enable LCD backlight */
+       gpio_direction_output(DSI_PANEL_BL_EN_GPIO, 1);
 }
 
 /*
diff --git a/include/configs/dalmore.h b/include/configs/dalmore.h
index bdf012b..ec285b0 100644
--- a/include/configs/dalmore.h
+++ b/include/configs/dalmore.h
@@ -87,6 +87,9 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_DHCP
 
+/* Backlight enable GPIO. TBD - move to DT when LCD driver added */
+#define DSI_PANEL_BL_EN_GPIO           GPIO_PH2
+
 #include "tegra-common-post.h"
 
 #endif /* __CONFIG_H */
-- 
1.8.1.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to