drm/omap: HDMI: support double-pixel pixel clock
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 13 Jan 2016 16:41:33 +0000 (18:41 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 3 Mar 2016 15:36:42 +0000 (17:36 +0200)
We need double-pixel mode (pixel repetition) for interlace modes. This
patch adds the necessary support to HDMI to double the pixel clock when
double-pixel mode is used.

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

index b09ce9ee82fa64ee3f2421142b7c3ed997c6cfb6..ddd6a331df39e2d269f5d94081c4892352e0c766 100644 (file)
@@ -168,6 +168,7 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
        struct omap_overlay_manager *mgr = hdmi.output.manager;
        struct hdmi_wp_data *wp = &hdmi.wp;
        struct dss_pll_clock_info hdmi_cinfo = { 0 };
+       unsigned pc;
 
        r = hdmi_power_on_core(dssdev);
        if (r)
@@ -181,7 +182,11 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
 
        DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", p->x_res, p->y_res);
 
-       hdmi_pll_compute(&hdmi.pll, p->pixelclock, &hdmi_cinfo);
+       pc = p->pixelclock;
+       if (p->double_pixel)
+               pc *= 2;
+
+       hdmi_pll_compute(&hdmi.pll, pc, &hdmi_cinfo);
 
        r = dss_pll_enable(&hdmi.pll.pll);
        if (r) {
index 4485a1c37bd8051f27e86b996c7b7a4814524849..34174ea85a542e16784be578f0c5bd169385b70f 100644 (file)
@@ -184,6 +184,7 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
        struct omap_video_timings *p;
        struct omap_overlay_manager *mgr = hdmi.output.manager;
        struct dss_pll_clock_info hdmi_cinfo = { 0 };
+       unsigned pc;
 
        r = hdmi_power_on_core(dssdev);
        if (r)
@@ -193,7 +194,11 @@ static int hdmi_power_on_full(struct omap_dss_device *dssdev)
 
        DSSDBG("hdmi_power_on x_res= %d y_res = %d\n", p->x_res, p->y_res);
 
-       hdmi_pll_compute(&hdmi.pll, p->pixelclock, &hdmi_cinfo);
+       pc = p->pixelclock;
+       if (p->double_pixel)
+               pc *= 2;
+
+       hdmi_pll_compute(&hdmi.pll, pc, &hdmi_cinfo);
 
        /* disable and clear irqs */
        hdmi_wp_clear_irqenable(&hdmi.wp, 0xffffffff);