Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271429
b: refs/heads/master
c: 759593f
h: refs/heads/master
i:
  271427: 23cc715
v: v3
  • Loading branch information
Tomi Valkeinen committed Sep 30, 2011
1 parent c6eaa16 commit 997de78
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 468c1b934c0367d15f90314ae316cd33551f70a5
refs/heads/master: 759593ffa7e05ebea9b21135cad179982331f5d8
1 change: 1 addition & 0 deletions trunk/drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,7 @@ void omapdss_hdmi_display_set_timing(struct omap_dss_device *dssdev);
int omapdss_hdmi_display_check_timing(struct omap_dss_device *dssdev,
struct omap_video_timings *timings);
int omapdss_hdmi_read_edid(u8 *buf, int len);
bool omapdss_hdmi_detect(void);
int hdmi_panel_init(void);
void hdmi_panel_exit(void);

Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/video/omap2/dss/dss_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {
.phy_enable = ti_hdmi_4xxx_phy_enable,
.phy_disable = ti_hdmi_4xxx_phy_disable,
.read_edid = ti_hdmi_4xxx_read_edid,
.detect = ti_hdmi_4xxx_detect,
.pll_enable = ti_hdmi_4xxx_pll_enable,
.pll_disable = ti_hdmi_4xxx_pll_disable,
.video_enable = ti_hdmi_4xxx_wp_video_start,
Expand Down
17 changes: 17 additions & 0 deletions trunk/drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,23 @@ int omapdss_hdmi_read_edid(u8 *buf, int len)
return r;
}

bool omapdss_hdmi_detect(void)
{
int r;

mutex_lock(&hdmi.lock);

r = hdmi_runtime_get();
BUG_ON(r);

r = hdmi.ip_data.ops->detect(&hdmi.ip_data);

hdmi_runtime_put();
mutex_unlock(&hdmi.lock);

return r == 1;
}

int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
{
int r = 0;
Expand Down
25 changes: 25 additions & 0 deletions trunk/drivers/video/omap2/dss/hdmi_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <linux/mutex.h>
#include <linux/module.h>
#include <video/omapdss.h>
#include <linux/slab.h>

#include "dss.h"

Expand Down Expand Up @@ -198,6 +199,29 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev, u8 *buf, int len)
return r;
}

static bool hdmi_detect(struct omap_dss_device *dssdev)
{
int r;

mutex_lock(&hdmi.hdmi_lock);

if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) {
r = omapdss_hdmi_display_enable(dssdev);
if (r)
goto err;
}

r = omapdss_hdmi_detect();

if (dssdev->state == OMAP_DSS_DISPLAY_DISABLED ||
dssdev->state == OMAP_DSS_DISPLAY_SUSPENDED)
omapdss_hdmi_display_disable(dssdev);
err:
mutex_unlock(&hdmi.hdmi_lock);

return r;
}

static struct omap_dss_driver hdmi_driver = {
.probe = hdmi_panel_probe,
.remove = hdmi_panel_remove,
Expand All @@ -209,6 +233,7 @@ static struct omap_dss_driver hdmi_driver = {
.set_timings = hdmi_set_timings,
.check_timings = hdmi_check_timings,
.read_edid = hdmi_read_edid,
.detect = hdmi_detect,
.driver = {
.name = "hdmi_panel",
.owner = THIS_MODULE,
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/video/omap2/dss/ti_hdmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ struct ti_hdmi_ip_ops {

int (*read_edid)(struct hdmi_ip_data *ip_data, u8 *edid, int len);

bool (*detect)(struct hdmi_ip_data *ip_data);

int (*pll_enable)(struct hdmi_ip_data *ip_data);

void (*pll_disable)(struct hdmi_ip_data *ip_data);
Expand All @@ -114,6 +116,7 @@ struct hdmi_ip_data {
int ti_hdmi_4xxx_phy_enable(struct hdmi_ip_data *ip_data);
void ti_hdmi_4xxx_phy_disable(struct hdmi_ip_data *ip_data);
int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data, u8 *edid, int len);
bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data);
void ti_hdmi_4xxx_wp_video_start(struct hdmi_ip_data *ip_data, bool start);
int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data);
void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data);
Expand Down
12 changes: 12 additions & 0 deletions trunk/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,18 @@ int ti_hdmi_4xxx_read_edid(struct hdmi_ip_data *ip_data,
return l;
}

bool ti_hdmi_4xxx_detect(struct hdmi_ip_data *ip_data)
{
int r;

void __iomem *base = hdmi_core_sys_base(ip_data);

/* HPD */
r = REG_GET(base, HDMI_CORE_SYS_SYS_STAT, 1, 1);

return r == 1;
}

static void hdmi_core_init(struct hdmi_core_video_config *video_cfg,
struct hdmi_core_infoframe_avi *avi_cfg,
struct hdmi_core_packet_enable_repeat *repeat_cfg)
Expand Down

0 comments on commit 997de78

Please sign in to comment.