Skip to content

Commit

Permalink
OMAPDSS: HDMI: use core power on/off with edid & detect
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tomi Valkeinen committed Oct 29, 2012
1 parent bb426fc commit 4489823
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 4 deletions.
2 changes: 2 additions & 0 deletions drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,8 @@ static inline unsigned long hdmi_get_pixel_clock(void)
#endif
int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev);
void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev);
int omapdss_hdmi_core_enable(struct omap_dss_device *dssdev);
void omapdss_hdmi_core_disable(struct omap_dss_device *dssdev);
void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev,
struct omap_video_timings *timings);
int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
Expand Down
35 changes: 35 additions & 0 deletions drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,41 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
mutex_unlock(&hdmi.lock);
}

int omapdss_hdmi_core_enable(struct omap_dss_device *dssdev)
{
int r = 0;

DSSDBG("ENTER omapdss_hdmi_core_enable\n");

mutex_lock(&hdmi.lock);

hdmi.ip_data.hpd_gpio = hdmi.hpd_gpio;

r = hdmi_power_on_core(dssdev);
if (r) {
DSSERR("failed to power on device\n");
goto err0;
}

mutex_unlock(&hdmi.lock);
return 0;

err0:
mutex_unlock(&hdmi.lock);
return r;
}

void omapdss_hdmi_core_disable(struct omap_dss_device *dssdev)
{
DSSDBG("Enter omapdss_hdmi_core_disable\n");

mutex_lock(&hdmi.lock);

hdmi_power_off_core(dssdev);

mutex_unlock(&hdmi.lock);
}

static int hdmi_get_clocks(struct platform_device *pdev)
{
struct clk *clk;
Expand Down
8 changes: 4 additions & 4 deletions drivers/video/omap2/dss/hdmi_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,15 +334,15 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev, u8 *buf, int len)
need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED;

if (need_enable) {
r = omapdss_hdmi_display_enable(dssdev);
r = omapdss_hdmi_core_enable(dssdev);
if (r)
goto err;
}

r = omapdss_hdmi_read_edid(buf, len);

if (need_enable)
omapdss_hdmi_display_disable(dssdev);
omapdss_hdmi_core_disable(dssdev);
err:
mutex_unlock(&hdmi.lock);

Expand All @@ -359,15 +359,15 @@ static bool hdmi_detect(struct omap_dss_device *dssdev)
need_enable = dssdev->state == OMAP_DSS_DISPLAY_DISABLED;

if (need_enable) {
r = omapdss_hdmi_display_enable(dssdev);
r = omapdss_hdmi_core_enable(dssdev);
if (r)
goto err;
}

r = omapdss_hdmi_detect();

if (need_enable)
omapdss_hdmi_display_disable(dssdev);
omapdss_hdmi_core_disable(dssdev);
err:
mutex_unlock(&hdmi.lock);

Expand Down

0 comments on commit 4489823

Please sign in to comment.