drm/sun4i: tcon: Support an active-low DE signal with RGB interface
authorPaul Kocialkowski <contact@paulk.fr>
Wed, 7 Nov 2018 18:18:38 +0000 (19:18 +0100)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Fri, 9 Nov 2018 07:31:28 +0000 (08:31 +0100)
Some panels need an active-low data enable (DE) signal for the RGB
interface. This requires flipping a bit in the TCON0 polarity register
when setting up the mode for the RGB interface.

Match the associated bus flag and use it to set the polarity inversion
bit for the DE signal when required.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181107181843.27628-4-contact@paulk.fr
drivers/gpu/drm/sun4i/sun4i_tcon.c
drivers/gpu/drm/sun4i/sun4i_tcon.h

index 262ffb6b0f825a1d16b0c70ef8d86321cfaf4716..0420f5c978b9d641926150f0d7987331b9fdb55d 100644 (file)
@@ -543,6 +543,9 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
        if (mode->flags & DRM_MODE_FLAG_PVSYNC)
                val |= SUN4I_TCON0_IO_POL_VSYNC_POSITIVE;
 
+       if (display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
+               val |= SUN4I_TCON0_IO_POL_DE_NEGATIVE;
+
        /*
         * On A20 and similar SoCs, the only way to achieve Positive Edge
         * (Rising Edge), is setting dclk clock phase to 2/3(240°).
@@ -565,7 +568,9 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
                clk_set_phase(tcon->dclk, 0);
 
        regmap_update_bits(tcon->regs, SUN4I_TCON0_IO_POL_REG,
-                          SUN4I_TCON0_IO_POL_HSYNC_POSITIVE | SUN4I_TCON0_IO_POL_VSYNC_POSITIVE,
+                          SUN4I_TCON0_IO_POL_HSYNC_POSITIVE |
+                          SUN4I_TCON0_IO_POL_VSYNC_POSITIVE |
+                          SUN4I_TCON0_IO_POL_DE_NEGATIVE,
                           val);
 
        /* Map output pins to channel 0 */
index 3d492c8be1fc306010c438fba0536e1242ff1ece..b5214d71610f19c648a2bf931f155185ac8fbdce 100644 (file)
 
 #define SUN4I_TCON0_IO_POL_REG                 0x88
 #define SUN4I_TCON0_IO_POL_DCLK_PHASE(phase)           ((phase & 3) << 28)
+#define SUN4I_TCON0_IO_POL_DE_NEGATIVE                 BIT(27)
 #define SUN4I_TCON0_IO_POL_HSYNC_POSITIVE              BIT(25)
 #define SUN4I_TCON0_IO_POL_VSYNC_POSITIVE              BIT(24)