Tegra2: Do pinmux_init more early.
Do pinmux_init early to make LCD power signals keep on
low level before LCD power on.
Add the delay T1 between between panel power on and data out.
Note: Other corresponding change is:
http://gerrit.chromium.org/gerrit/3308
BUG=chrome-os-partner:1957
TEST=test on Kaen, Foxconn confirmed the timing already
can meet panel spec about power on sequence.
Change-Id: I22636a8c8d1f6ee715babe7828c80613a8f3ba1c
Signed-off-by: Dilan Lee <dilee@nvidia.com>
Reviewed-on: http://gerrit.chromium.org/gerrit/3309
Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/board/tegra2/generic/board.c b/board/tegra2/generic/board.c
index 3d3d82c..924bbb1 100644
--- a/board/tegra2/generic/board.c
+++ b/board/tegra2/generic/board.c
@@ -1,4 +1,4 @@
-/*
+/*
* (C) Copyright 2010
* NVIDIA Corporation <www.nvidia.com>
*
@@ -36,6 +36,7 @@
#include "sdmmc/nvboot_clocks_int.h"
#include "board.h"
#include <asm/arch/gpio.h>
+#include "lcd/gpinit/gp-util.h"
/******************************************************************************
* PLL CONFIGURATION & PARAMETERS for different clock generators:
@@ -118,6 +119,11 @@
void board_usb_init(void);
void board_spi_init(void);
+static void pinmux_init(void)
+{
+ tegra_pinmux_config_table(tegra2_gp_pinmux, tegra2_gp_pinmux_tab_len);
+}
+
/*
* Routine: board_init
* Description: Early hardware init.
@@ -131,6 +137,12 @@
/* board id for Linux */
gd->bd->bi_arch_number = LINUX_MACH_TYPE;
+ /*
+ * do pinmux_init early to make LCD power signals
+ * keep on low level before LCD power on
+ */
+ pinmux_init();
+
#ifdef CONFIG_TEGRA2_LCD
gd->fb_base = LCD_FB_ADDR;
#endif
diff --git a/board/tegra2/generic/lcd/gpinit/gp-util.c b/board/tegra2/generic/lcd/gpinit/gp-util.c
index 3f16adf..f85a491 100644
--- a/board/tegra2/generic/lcd/gpinit/gp-util.c
+++ b/board/tegra2/generic/lcd/gpinit/gp-util.c
@@ -32,6 +32,7 @@
.backlight = TEGRA_PANEL_GPIO_BACKLIGHT,
.backlight_vdd = TEGRA_PANEL_GPIO_BACKLIGHT_VDD,
.panel_power_enable = TEGRA_PANEL_GPIO_EN_VDD_PNL,
+ .T1 = TEGRA_PANEL_PANEL_PON_TO_DATA_MS,
.T3 = TEGRA_PANEL_DATA_TO_BACKLIGHTPWR_MS,
.T5 = TEGRA_PANEL_BACKLIGHTPWR_TO_VPWM_MS,
.T6 = TEGRA_PANEL_VPWM_TO_VEN_MS,
@@ -44,15 +45,11 @@
tegra_clk_init_from_table(tegra2_gp_clk_init_table);
}
-static void pinmux_init(void)
-{
- tegra_pinmux_config_table(tegra2_gp_pinmux, tegra2_gp_pinmux_tab_len);
-}
-
#ifdef TEGRA_PANEL_POWERON_SEQUENCE
void mdelay(int ms)
{
- udelay(ms * 1000);
+ if (ms)
+ udelay(ms * 1000);
}
static void poweron_panel(void)
@@ -67,6 +64,9 @@
tg2_gpio_set_value_ex(
tegra_panel_sequence_table.panel_power_enable, 1);
+ /* Panel power-on to Data Time */
+ mdelay(tegra_panel_sequence_table.T1);
+
/* Enable LVDS */
tg2_gpio_direction_output_ex(
tegra_panel_sequence_table.lvds_enable, 1);
@@ -114,7 +114,6 @@
void gpinit(void)
{
clk_init();
- pinmux_init();
poweron_3d();
#ifdef TEGRA_PANEL_POWERON_SEQUENCE
diff --git a/board/tegra2/generic/lcd/gpinit/gpinit.h b/board/tegra2/generic/lcd/gpinit/gpinit.h
index b7df6e5..490709a 100644
--- a/board/tegra2/generic/lcd/gpinit/gpinit.h
+++ b/board/tegra2/generic/lcd/gpinit/gpinit.h
@@ -214,6 +214,7 @@
* backlight : LCD signal enable pin
* backlight_vdd : backlight power pin
* panel_power_enable : panel power pin
+ * T1 : delay between Panel power-on and Data
* T3 : delay between Data and Backlight Rise
* T5 : delay between Backlight and Vpwm Rise
* T6 : delay between Vpwm and Ven Rise
@@ -223,6 +224,7 @@
unsigned backlight;
unsigned backlight_vdd;
unsigned panel_power_enable;
+ unsigned T1;
unsigned T3;
unsigned T5;
unsigned T6;