video: mxsfb: enable setting HSYNC negative polarity
[oweals/u-boot.git] / drivers / video / mxsfb.c
index cdd6dfacedb64c1a221c85d021a47d807e38436f..9912cf3d820c4cbc3654eed6522c91c6af39858f 100644 (file)
@@ -57,8 +57,10 @@ static void mxs_lcd_init(struct udevice *dev, u32 fb_addr,
                         struct display_timing *timings, int bpp)
 {
        struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+       const enum display_flags flags = timings->flags;
        uint32_t word_len = 0, bus_width = 0;
        uint8_t valid_data = 0;
+       uint32_t vdctrl0;
 
 #if CONFIG_IS_ENABLED(CLK)
        struct clk per_clk;
@@ -118,10 +120,14 @@ static void mxs_lcd_init(struct udevice *dev, u32 fb_addr,
        writel((timings->vactive.typ << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
                timings->hactive.typ, &regs->hw_lcdif_transfer_count);
 
-       writel(LCDIF_VDCTRL0_ENABLE_PRESENT | LCDIF_VDCTRL0_ENABLE_POL |
-               LCDIF_VDCTRL0_VSYNC_PERIOD_UNIT |
-               LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_UNIT |
-               timings->vsync_len.typ, &regs->hw_lcdif_vdctrl0);
+       vdctrl0 = LCDIF_VDCTRL0_ENABLE_PRESENT | LCDIF_VDCTRL0_ENABLE_POL |
+                 LCDIF_VDCTRL0_VSYNC_PERIOD_UNIT |
+                 LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_UNIT |
+                 timings->vsync_len.typ;
+
+       if(flags & DISPLAY_FLAGS_HSYNC_HIGH)
+               vdctrl0 |= LCDIF_VDCTRL0_HSYNC_POL;
+       writel(vdctrl0, &regs->hw_lcdif_vdctrl0);
        writel(timings->vback_porch.typ + timings->vfront_porch.typ +
                timings->vsync_len.typ + timings->vactive.typ,
                &regs->hw_lcdif_vdctrl1);