aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi5_core.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
index 947edb9d4275..6a397520cae5 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5_core.c
@@ -298,10 +298,30 @@ static void hdmi_core_init(struct hdmi_core_vid_config *video_cfg,
298 video_cfg->data_enable_pol = 1; /* It is always 1*/ 298 video_cfg->data_enable_pol = 1; /* It is always 1*/
299 video_cfg->hblank = cfg->timings.hfp + 299 video_cfg->hblank = cfg->timings.hfp +
300 cfg->timings.hbp + cfg->timings.hsw; 300 cfg->timings.hbp + cfg->timings.hsw;
301 video_cfg->vblank_osc = 0; /* Always 0 - need to confirm */ 301 video_cfg->vblank_osc = 0;
302 video_cfg->vblank = cfg->timings.vsw + 302 video_cfg->vblank = cfg->timings.vsw +
303 cfg->timings.vfp + cfg->timings.vbp; 303 cfg->timings.vfp + cfg->timings.vbp;
304 video_cfg->v_fc_config.hdmi_dvi_mode = cfg->hdmi_dvi_mode; 304 video_cfg->v_fc_config.hdmi_dvi_mode = cfg->hdmi_dvi_mode;
305
306 if (cfg->timings.interlace) {
307 /* set vblank_osc if vblank is fractional */
308 if (video_cfg->vblank % 2 != 0)
309 video_cfg->vblank_osc = 1;
310
311 video_cfg->v_fc_config.timings.y_res /= 2;
312 video_cfg->vblank /= 2;
313 video_cfg->v_fc_config.timings.vfp /= 2;
314 video_cfg->v_fc_config.timings.vsw /= 2;
315 video_cfg->v_fc_config.timings.vbp /= 2;
316 }
317
318 if (cfg->timings.double_pixel) {
319 video_cfg->v_fc_config.timings.x_res *= 2;
320 video_cfg->hblank *= 2;
321 video_cfg->v_fc_config.timings.hfp *= 2;
322 video_cfg->v_fc_config.timings.hsw *= 2;
323 video_cfg->v_fc_config.timings.hbp *= 2;
324 }
305} 325}
306 326
307/* DSS_HDMI_CORE_VIDEO_CONFIG */ 327/* DSS_HDMI_CORE_VIDEO_CONFIG */
@@ -368,6 +388,11 @@ static void hdmi_core_video_config(struct hdmi_core_data *core,
368 /* select DVI mode */ 388 /* select DVI mode */
369 REG_FLD_MOD(base, HDMI_CORE_FC_INVIDCONF, 389 REG_FLD_MOD(base, HDMI_CORE_FC_INVIDCONF,
370 cfg->v_fc_config.hdmi_dvi_mode, 3, 3); 390 cfg->v_fc_config.hdmi_dvi_mode, 3, 3);
391
392 if (cfg->v_fc_config.timings.double_pixel)
393 REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, 2, 7, 4);
394 else
395 REG_FLD_MOD(base, HDMI_CORE_FC_PRCONF, 1, 7, 4);
371} 396}
372 397
373static void hdmi_core_config_video_packetizer(struct hdmi_core_data *core) 398static void hdmi_core_config_video_packetizer(struct hdmi_core_data *core)