aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-01-17 04:09:57 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-01-26 06:51:36 -0500
commitc49d005b6cc8491fad5b24f82805be2d6bcbd3dd (patch)
tree6b53d49b3373a5118b719ebce07d39bb384ef85c /arch/arm/mach-omap2
parentaa74274b464d4aa24703963ac89a0ee942d5d267 (diff)
OMAPDSS: HDMI: PHY burnout fix
A hardware bug in the OMAP4 HDMI PHY causes physical damage to the board if the HDMI PHY is kept powered on when the cable is not connected. This patch solves the problem by adding hot-plug-detection into the HDMI IP driver. This is not a real HPD support in the sense that nobody else than the IP driver gets to know about the HPD events, but is only meant to fix the HW bug. The strategy is simple: If the display device is turned off by the user, the PHY power is set to OFF. When the display device is turned on by the user, the PHY power is set either to LDOON or TXON, depending on whether the HDMI cable is connected. The reason to avoid PHY OFF when the display device is on, but the cable is disconnected, is that when the PHY is turned OFF, the HDMI IP is not "ticking" and thus the DISPC does not receive pixel clock from the HDMI IP. This would, for example, prevent any VSYNCs from happening, and would thus affect the users of omapdss. By using LDOON when the cable is disconnected we'll avoid the HW bug, but keep the HDMI working as usual from the user's point of view. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/board-4430sdp.c5
-rw-r--r--arch/arm/mach-omap2/board-omap4panda.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index cd6ec517a929..0ce758edaad2 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -732,6 +732,10 @@ static void sdp4430_lcd_init(void)
732 pr_err("%s: Could not get lcd2_reset_gpio\n", __func__); 732 pr_err("%s: Could not get lcd2_reset_gpio\n", __func__);
733} 733}
734 734
735static struct omap_dss_hdmi_data sdp4430_hdmi_data = {
736 .hpd_gpio = HDMI_GPIO_HPD,
737};
738
735static struct omap_dss_device sdp4430_hdmi_device = { 739static struct omap_dss_device sdp4430_hdmi_device = {
736 .name = "hdmi", 740 .name = "hdmi",
737 .driver_name = "hdmi_panel", 741 .driver_name = "hdmi_panel",
@@ -739,6 +743,7 @@ static struct omap_dss_device sdp4430_hdmi_device = {
739 .platform_enable = sdp4430_panel_enable_hdmi, 743 .platform_enable = sdp4430_panel_enable_hdmi,
740 .platform_disable = sdp4430_panel_disable_hdmi, 744 .platform_disable = sdp4430_panel_disable_hdmi,
741 .channel = OMAP_DSS_CHANNEL_DIGIT, 745 .channel = OMAP_DSS_CHANNEL_DIGIT,
746 .data = &sdp4430_hdmi_data,
742}; 747};
743 748
744static struct picodlp_panel_data sdp4430_picodlp_pdata = { 749static struct picodlp_panel_data sdp4430_picodlp_pdata = {
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index e1b196361f95..370c4b428888 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -502,6 +502,10 @@ static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
502 gpio_free_array(panda_hdmi_gpios, ARRAY_SIZE(panda_hdmi_gpios)); 502 gpio_free_array(panda_hdmi_gpios, ARRAY_SIZE(panda_hdmi_gpios));
503} 503}
504 504
505static struct omap_dss_hdmi_data omap4_panda_hdmi_data = {
506 .hpd_gpio = HDMI_GPIO_HPD,
507};
508
505static struct omap_dss_device omap4_panda_hdmi_device = { 509static struct omap_dss_device omap4_panda_hdmi_device = {
506 .name = "hdmi", 510 .name = "hdmi",
507 .driver_name = "hdmi_panel", 511 .driver_name = "hdmi_panel",
@@ -509,6 +513,7 @@ static struct omap_dss_device omap4_panda_hdmi_device = {
509 .platform_enable = omap4_panda_panel_enable_hdmi, 513 .platform_enable = omap4_panda_panel_enable_hdmi,
510 .platform_disable = omap4_panda_panel_disable_hdmi, 514 .platform_disable = omap4_panda_panel_disable_hdmi,
511 .channel = OMAP_DSS_CHANNEL_DIGIT, 515 .channel = OMAP_DSS_CHANNEL_DIGIT,
516 .data = &omap4_panda_hdmi_data,
512}; 517};
513 518
514static struct omap_dss_device *omap4_panda_dss_devices[] = { 519static struct omap_dss_device *omap4_panda_dss_devices[] = {