Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 271411
b: refs/heads/master
c: 60634a2
h: refs/heads/master
i:
  271409: 77b6a5e
  271407: e9b411d
v: v3
  • Loading branch information
Mythri P K authored and Tomi Valkeinen committed Sep 30, 2011
1 parent 5baab75 commit f0a9edf
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 176b578b1a0e1b7ccdc746c3962f2a56aaf45456
refs/heads/master: 60634a28bc5467ade316574c4aa728c5bff7947e
20 changes: 20 additions & 0 deletions trunk/drivers/video/omap2/dss/dss_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,26 @@ static const struct omap_dss_features omap4_dss_features = {
.burst_size_unit = 16,
};

#if defined(CONFIG_OMAP4_DSS_HDMI)
/* HDMI OMAP4 Functions*/
static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {

.video_configure = ti_hdmi_4xxx_basic_configure,
.phy_enable = ti_hdmi_4xxx_phy_enable,
.phy_disable = ti_hdmi_4xxx_phy_disable,
.read_edid = ti_hdmi_4xxx_read_edid,
.pll_enable = ti_hdmi_4xxx_pll_enable,
.pll_disable = ti_hdmi_4xxx_pll_disable,
.video_enable = ti_hdmi_4xxx_wp_video_start,
};

void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data)
{
if (cpu_is_omap44xx())
ip_data->ops = &omap4_hdmi_functions;
}
#endif

/* Functions returning values related to a DSS feature */
int dss_feat_get_num_mgrs(void)
{
Expand Down
7 changes: 7 additions & 0 deletions trunk/drivers/video/omap2/dss/dss_features.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
#ifndef __OMAP2_DSS_FEATURES_H
#define __OMAP2_DSS_FEATURES_H

#if defined(CONFIG_OMAP4_DSS_HDMI)
#include "ti_hdmi.h"
#endif

#define MAX_DSS_MANAGERS 3
#define MAX_DSS_OVERLAYS 3
#define MAX_DSS_LCD_MANAGERS 2
Expand Down Expand Up @@ -99,4 +103,7 @@ u32 dss_feat_get_burst_size_unit(void); /* in bytes */
bool dss_has_feature(enum dss_feat_id id);
void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end);
void dss_features_init(void);
#if defined(CONFIG_OMAP4_DSS_HDMI)
void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data);
#endif
#endif
19 changes: 10 additions & 9 deletions trunk/drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ int hdmi_init_display(struct omap_dss_device *dssdev)
{
DSSDBG("init_display\n");

dss_init_hdmi_ip_ops(&hdmi.ip_data);
return 0;
}

Expand Down Expand Up @@ -366,7 +367,7 @@ static void hdmi_read_edid(struct omap_video_timings *dp)
memset(hdmi.edid, 0, HDMI_EDID_MAX_LENGTH);

if (!hdmi.edid_set)
ret = ti_hdmi_4xxx_read_edid(&hdmi.ip_data, hdmi.edid,
ret = hdmi.ip_data.ops->read_edid(&hdmi.ip_data, hdmi.edid,
HDMI_EDID_MAX_LENGTH);
if (!ret) {
if (!memcmp(hdmi.edid, edid_header, sizeof(edid_header))) {
Expand Down Expand Up @@ -480,24 +481,24 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)

hdmi_compute_pll(dssdev, phy, &hdmi.ip_data.pll_data);

ti_hdmi_4xxx_wp_video_start(&hdmi.ip_data, 0);
hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 0);

/* config the PLL and PHY hdmi_set_pll_pwrfirst */
r = ti_hdmi_4xxx_pll_enable(&hdmi.ip_data);
r = hdmi.ip_data.ops->pll_enable(&hdmi.ip_data);
if (r) {
DSSDBG("Failed to lock PLL\n");
goto err;
}

r = ti_hdmi_4xxx_phy_enable(&hdmi.ip_data);
r = hdmi.ip_data.ops->phy_enable(&hdmi.ip_data);
if (r) {
DSSDBG("Failed to start PHY\n");
goto err;
}

hdmi.ip_data.cfg.cm.mode = hdmi.mode;
hdmi.ip_data.cfg.cm.code = hdmi.code;
ti_hdmi_4xxx_basic_configure(&hdmi.ip_data);
hdmi.ip_data.ops->video_configure(&hdmi.ip_data);

/* Make selection of HDMI in DSS */
dss_select_hdmi_venc_clk_source(DSS_HDMI_M_PCLK);
Expand All @@ -519,7 +520,7 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)

dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 1);

ti_hdmi_4xxx_wp_video_start(&hdmi.ip_data, 1);
hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 1);

return 0;
err:
Expand All @@ -531,9 +532,9 @@ static void hdmi_power_off(struct omap_dss_device *dssdev)
{
dispc_mgr_enable(OMAP_DSS_CHANNEL_DIGIT, 0);

ti_hdmi_4xxx_wp_video_start(&hdmi.ip_data, 0);
ti_hdmi_4xxx_phy_disable(&hdmi.ip_data);
ti_hdmi_4xxx_pll_disable(&hdmi.ip_data);
hdmi.ip_data.ops->video_enable(&hdmi.ip_data, 0);
hdmi.ip_data.ops->phy_disable(&hdmi.ip_data);
hdmi.ip_data.ops->pll_disable(&hdmi.ip_data);
hdmi_runtime_put();

hdmi.edid_set = 0;
Expand Down
21 changes: 21 additions & 0 deletions trunk/drivers/video/omap2/dss/ti_hdmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#ifndef _TI_HDMI_H
#define _TI_HDMI_H

struct hdmi_ip_data;

enum hdmi_pll_pwr {
HDMI_PLLPWRCMD_ALLOFF = 0,
HDMI_PLLPWRCMD_PLLONLY = 1,
Expand Down Expand Up @@ -82,12 +84,31 @@ struct hdmi_pll_info {
enum hdmi_clk_refsel refsel;
};

struct ti_hdmi_ip_ops {

void (*video_configure)(struct hdmi_ip_data *ip_data);

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

void (*phy_disable)(struct hdmi_ip_data *ip_data);

int (*read_edid)(struct hdmi_ip_data *ip_data,
u8 *pedid, u16 max_length);

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

void (*pll_disable)(struct hdmi_ip_data *ip_data);

void (*video_enable)(struct hdmi_ip_data *ip_data, bool start);
};

struct hdmi_ip_data {
void __iomem *base_wp; /* HDMI wrapper */
unsigned long core_sys_offset;
unsigned long core_av_offset;
unsigned long pll_offset;
unsigned long phy_offset;
const struct ti_hdmi_ip_ops *ops;
struct hdmi_config cfg;
struct hdmi_pll_info pll_data;
};
Expand Down

0 comments on commit f0a9edf

Please sign in to comment.