summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRobby Cai <R63905@freescale.com>2011-04-20 13:48:47 +0800
committerRobby Cai <R63905@freescale.com>2011-05-09 11:16:18 +0800
commitbf6f055cbb3801b5b1de8dba1eb3363c46f7973c (patch)
tree131936a349dcb5848f79c0abe7c71c05504fec14 /arch
parentfe0aa649afba2d9986364c50a1ebc2390f667554 (diff)
ENGR00142097 MX50 RD3: Fix: Enable HDMI will cause reboot failure
On PoR(Power-On-Reset), the issue does not exist; only on WDog Reset (for example, issue "reboot" command in Linux) this issue happens, and kernel stops at HDMI reset. Note that PoR will reset IOMUX setting, but WDog Reset will not reset IOMUX. However, WDog Reset will reset GPIO setting(as INPUT). With this fact in mind, we can explain the reason much more easily. It seems that SI2312BDS supposes EIM_RW to be always high to work well. On WDog reset, the EIM_RW is set as GPIO INPUT which causes 1V2_HDMI to output 0.0V. Even HDMI driver sets EIM_RW as GPIO OUTPUT High which causes 1V2_HDMI to output 1.2V, HDMI reset does not work well. This reality shows that a LOW-HIGH timing causes SI2312BDS not work well. Instead a HIGH-LOW-HIGH timing appears to be needed to get a stable output. Actually, on PoR, the EIM_RW (GPIO to control HDMI power) is set as default MUX_MODE 0, which causes 1V2_HDMI outputs 1.2V. In this case, the timing meets HIGH-LOW-HIGH, HDMI reset works well. So similarly, we need pull EIM_RW high to 1V2_HDMI output high firstly in driver to achieve HIGH-LOW-HIGH timing. Signed-off-by: Robby Cai <R63905@freescale.com> (cherry picked from commit 6cb3285542eb67c00b9ef5248e34db82257da3d4)
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-mx5/mx50_rdp.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm/mach-mx5/mx50_rdp.c b/arch/arm/mach-mx5/mx50_rdp.c
index c1ba0ca67b11..9286748f0030 100644
--- a/arch/arm/mach-mx5/mx50_rdp.c
+++ b/arch/arm/mach-mx5/mx50_rdp.c
@@ -1861,7 +1861,8 @@ static void __init mx50_rdp_io_init(void)
gpio_request(HDMI_RESET, "hdmi-reset");
gpio_direction_output(HDMI_RESET, 1);
gpio_request(HDMI_PWR_ENABLE, "hdmi-pwr-enable");
- gpio_direction_output(HDMI_PWR_ENABLE, 0);
+ gpio_direction_output(HDMI_PWR_ENABLE, 1);
+ gpio_set_value(HDMI_PWR_ENABLE, 0);
gpio_request(HDMI_DETECT, "hdmi-detect");
gpio_direction_input(HDMI_DETECT);