diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c index 47e9f4abe322ee9ff928e31f01e12c415bb4d9f8..c387bf47ee0e6609250e7ad6575805ee455dd8d7 100644 --- a/drivers/video/omap2/dss/hdmi.c +++ b/drivers/video/omap2/dss/hdmi.c @@ -534,6 +534,21 @@ static int read_edid(struct hdmi_ip_data *ip_data, u8 *pedid, u16 max_length) return 0; } +static void copy_hdmi_to_dss_timings( + const struct hdmi_video_timings *hdmi_timings, + struct omap_video_timings *timings) +{ + timings->x_res = hdmi_timings->x_res; + timings->y_res = hdmi_timings->y_res; + timings->pixel_clock = hdmi_timings->pixel_clock; + timings->hbp = hdmi_timings->hbp; + timings->hfp = hdmi_timings->hfp; + timings->hsw = hdmi_timings->hsw; + timings->vbp = hdmi_timings->vbp; + timings->vfp = hdmi_timings->vfp; + timings->vsw = hdmi_timings->vsw; +} + static int get_timings_index(void) { int code; @@ -558,7 +573,7 @@ static struct hdmi_cm hdmi_get_code(struct omap_video_timings *timing) { int i = 0, code = -1, temp_vsync = 0, temp_hsync = 0; int timing_vsync = 0, timing_hsync = 0; - struct omap_video_timings temp; + struct hdmi_video_timings temp; struct hdmi_cm cm = {-1}; DSSDBG("hdmi_get_code\n"); @@ -716,7 +731,8 @@ static void hdmi_read_edid(struct omap_video_timings *dp) code = get_timings_index(); - *dp = cea_vesa_timings[code].timings; + copy_hdmi_to_dss_timings(&cea_vesa_timings[code].timings, dp); + } static void hdmi_core_init(struct hdmi_core_video_config *video_cfg, @@ -1178,7 +1194,8 @@ static int hdmi_power_on(struct omap_dss_device *dssdev) hdmi_read_edid(p); } code = get_timings_index(); - dssdev->panel.timings = cea_vesa_timings[code].timings; + copy_hdmi_to_dss_timings(&cea_vesa_timings[code].timings, + &dssdev->panel.timings); update_hdmi_timings(&hdmi.ip_data.cfg, p, code); phy = p->pixel_clock; diff --git a/drivers/video/omap2/dss/hdmi.h b/drivers/video/omap2/dss/hdmi.h index d2913f8ee0033727bca04232c22be0e86559963a..02342f6395c2cd9491e23859cc6b79bc2541c9d4 100644 --- a/drivers/video/omap2/dss/hdmi.h +++ b/drivers/video/omap2/dss/hdmi.h @@ -198,9 +198,22 @@ struct hdmi_reg { u16 idx; }; #define REG_GET(base, idx, start, end) \ FLD_GET(hdmi_read_reg(base, idx), start, end) +struct hdmi_video_timings { + u16 x_res; + u16 y_res; + /* Unit: KHz */ + u32 pixel_clock; + u16 hsw; + u16 hfp; + u16 hbp; + u16 vsw; + u16 vfp; + u16 vbp; +}; + /* HDMI timing structure */ struct hdmi_timings { - struct omap_video_timings timings; + struct hdmi_video_timings timings; int vsync_pol; int hsync_pol; };