aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2012-10-19 10:42:27 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-10-29 06:44:41 -0400
commit4489823ca755dd9931d7f71e5c0a437952a6fdec (patch)
treeeab97b5dc96f67cb9a1bcd71c4b4d81277eaddd0 /drivers
parentbb426fc96316b20876acc3289c5115f00918c2bb (diff)
OMAPDSS: HDMI: use core power on/off with edid & detect
This patch makes use of the hdmi_power_[on|off]_core() functions added in the previous patch. The functions are used when reading EDID or detecting if a monitor is connected. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Ricardo Neri <ricardo.neri@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/omap2/dss/dss.h2
-rw-r--r--drivers/video/omap2/dss/hdmi.c35
-rw-r--r--drivers/video/omap2/dss/hdmi_panel.c8
3 files changed, 41 insertions, 4 deletions
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index d614fda9275c..ff7a55b54b8e 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -509,6 +509,8 @@ static inline unsigned long hdmi_get_pixel_clock(void)
509#endif 509#endif
510int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev); 510int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev);
511void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev); 511void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev);
512int omapdss_hdmi_core_enable(struct omap_dss_device *dssdev);
513void omapdss_hdmi_core_disable(struct omap_dss_device *dssdev);
512void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev, 514void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev,
513 struct omap_video_timings *timings); 515 struct omap_video_timings *timings);
514int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev, 516int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 1226044e5508..81b9fc48295f 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -759,6 +759,41 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
759 mutex_unlock(&hdmi.lock); 759 mutex_unlock(&hdmi.lock);
760} 760}
761 761
762int omapdss_hdmi_core_enable(struct omap_dss_device *dssdev)
763{
764 int r = 0;
765
766 DSSDBG("ENTER omapdss_hdmi_core_enable\n");
767
768 mutex_lock(&hdmi.lock);
769
770 hdmi.ip_data.hpd_gpio = hdmi.hpd_gpio;
771
772 r = hdmi_power_on_core(dssdev);
773 if (r) {
774 DSSERR("failed to power on device\n");
775 goto err0;
776 }
777
778 mutex_unlock(&hdmi.lock);
779 return 0;
780
781err0:
782 mutex_unlock(&hdmi.lock);
783 return r;
784}
785
786void omapdss_hdmi_core_disable(struct omap_dss_device *dssdev)
787{
788 DSSDBG("Enter omapdss_hdmi_core_disable\n");
789
790 mutex_lock(&hdmi.lock);
791
792 hdmi_power_off_core(dssdev);
793
794 mutex_unlock(&hdmi.lock);
795}
796
762static int hdmi_get_clocks(struct platform_device *pdev) 797static int hdmi_get_clocks(struct platform_device *pdev)
763{ 798{
764 struct clk *clk; 799 struct clk *clk;
diff --git a/drivers/video/omap2/dss/hdmi_panel.c b/drivers/video/omap2/dss/hdmi_panel.c
index 3f9a4b947a54..a385b69a018e 100644
--- a/drivers/video/omap2/dss/hdmi_panel.c
+++ b/drivers/video/omap2/dss/hdmi_panel.c
@@ -334,7 +334,7 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev, u8 *buf, int len)
334 need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED; 334 need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED;
335 335
336 if (need_enable) { 336 if (need_enable) {
337 r = omapdss_hdmi_display_enable(dssdev); 337 r = omapdss_hdmi_core_enable(dssdev);
338 if (r) 338 if (r)
339 goto err; 339 goto err;
340 } 340 }
@@ -342,7 +342,7 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev, u8 *buf, int len)
342 r = omapdss_hdmi_read_edid(buf, len); 342 r = omapdss_hdmi_read_edid(buf, len);
343 343
344 if (need_enable) 344 if (need_enable)
345 omapdss_hdmi_display_disable(dssdev); 345 omapdss_hdmi_core_disable(dssdev);
346err: 346err:
347 mutex_unlock(&hdmi.lock); 347 mutex_unlock(&hdmi.lock);
348 348
@@ -359,7 +359,7 @@ static bool hdmi_detect(struct omap_dss_device *dssdev)
359 need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED; 359 need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED;
360 360
361 if (need_enable) { 361 if (need_enable) {
362 r = omapdss_hdmi_display_enable(dssdev); 362 r = omapdss_hdmi_core_enable(dssdev);
363 if (r) 363 if (r)
364 goto err; 364 goto err;
365 } 365 }
@@ -367,7 +367,7 @@ static bool hdmi_detect(struct omap_dss_device *dssdev)
367 r = omapdss_hdmi_detect(); 367 r = omapdss_hdmi_detect();
368 368
369 if (need_enable) 369 if (need_enable)
370 omapdss_hdmi_display_disable(dssdev); 370 omapdss_hdmi_core_disable(dssdev);
371err: 371err:
372 mutex_unlock(&hdmi.lock); 372 mutex_unlock(&hdmi.lock);
373 373