sunxi: display: Correct clk_delay calculations for lcd displays
authorHans de Goede <hdegoede@redhat.com>
Sun, 2 Aug 2015 15:38:43 +0000 (17:38 +0200)
committerHans de Goede <hdegoede@redhat.com>
Sat, 8 Aug 2015 14:26:20 +0000 (16:26 +0200)
We should only subtract 2 from the vblank time when using tcon1.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
drivers/video/sunxi_display.c

index 3942d2f8cea5a6ef56cf5e9d9e74b1cf8a05791f..fa4241ef580be82844bfd1de0ae5939067143c82 100644 (file)
@@ -663,11 +663,14 @@ static void sunxi_lcdc_backlight_enable(void)
                gpio_direction_output(pin, PWM_ON);
 }
 
-static int sunxi_lcdc_get_clk_delay(const struct ctfb_res_modes *mode)
+static int sunxi_lcdc_get_clk_delay(const struct ctfb_res_modes *mode, int tcon)
 {
        int delay;
 
-       delay = mode->lower_margin + mode->vsync_len + mode->upper_margin - 2;
+       delay = mode->lower_margin + mode->vsync_len + mode->upper_margin;
+       if (tcon == 1)
+               delay -= 2;
+
        return (delay > 30) ? 30 : delay;
 }
 
@@ -692,7 +695,7 @@ static void sunxi_lcdc_tcon0_mode_set(const struct ctfb_res_modes *mode,
        clrsetbits_le32(&lcdc->ctrl, SUNXI_LCDC_CTRL_IO_MAP_MASK,
                        SUNXI_LCDC_CTRL_IO_MAP_TCON0);
 
-       clk_delay = sunxi_lcdc_get_clk_delay(mode);
+       clk_delay = sunxi_lcdc_get_clk_delay(mode, 0);
        writel(SUNXI_LCDC_TCON0_CTRL_ENABLE |
               SUNXI_LCDC_TCON0_CTRL_CLK_DELAY(clk_delay), &lcdc->tcon0_ctrl);
 
@@ -770,7 +773,7 @@ static void sunxi_lcdc_tcon1_mode_set(const struct ctfb_res_modes *mode,
        clrsetbits_le32(&lcdc->ctrl, SUNXI_LCDC_CTRL_IO_MAP_MASK,
                        SUNXI_LCDC_CTRL_IO_MAP_TCON1);
 
-       clk_delay = sunxi_lcdc_get_clk_delay(mode);
+       clk_delay = sunxi_lcdc_get_clk_delay(mode, 1);
        writel(SUNXI_LCDC_TCON1_CTRL_ENABLE |
               SUNXI_LCDC_TCON1_CTRL_CLK_DELAY(clk_delay), &lcdc->tcon1_ctrl);