drm/omap: HDMI: fix WP timings for ilace
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 13 Jan 2016 16:41:35 +0000 (18:41 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 3 Mar 2016 15:36:42 +0000 (17:36 +0200)
The HDMI WP timings are not programmed correctly for interlace.

We need to halve the vertical timings when interlace is used, and double
the horizontal timings when pixel doubling is used.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
drivers/gpu/drm/omapdrm/dss/hdmi_wp.c

index 1b76cdd781ad9d67a815d29df766c5d4b6802cb0..13442b9052d1fa131edbd4795301f928daad9c67 100644 (file)
@@ -199,8 +199,6 @@ void hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt,
        video_fmt->packing_mode = HDMI_PACK_10b_RGB_YUV444;
        video_fmt->y_res = param->timings.y_res;
        video_fmt->x_res = param->timings.x_res;
-       if (param->timings.interlace)
-               video_fmt->y_res /= 2;
 
        timings->hbp = param->timings.hbp;
        timings->hfp = param->timings.hfp;
@@ -208,9 +206,25 @@ void hdmi_wp_init_vid_fmt_timings(struct hdmi_video_format *video_fmt,
        timings->vbp = param->timings.vbp;
        timings->vfp = param->timings.vfp;
        timings->vsw = param->timings.vsw;
+
        timings->vsync_level = param->timings.vsync_level;
        timings->hsync_level = param->timings.hsync_level;
        timings->interlace = param->timings.interlace;
+       timings->double_pixel = param->timings.double_pixel;
+
+       if (param->timings.interlace) {
+               video_fmt->y_res /= 2;
+               timings->vbp /= 2;
+               timings->vfp /= 2;
+               timings->vsw /= 2;
+       }
+
+       if (param->timings.double_pixel) {
+               video_fmt->x_res *= 2;
+               timings->hfp *= 2;
+               timings->hsw *= 2;
+               timings->hbp *= 2;
+       }
 }
 
 void hdmi_wp_audio_config_format(struct hdmi_wp_data *wp,