According to the latest revision 2.00 of the R-Car gen2 manual, the LVDS
must be enabled and the bias crcuit  enabled after the LVDS I/O pins are
enabled, not before --  fix the gen2 LVDS startup sequence accordingly.

Fixes: 90374b5c25c9 ("drm/rcar-du: Add internal LVDS encoder support")
Signed-off-by: Sergei Shtylyov <sergei.shtyl...@cogentembedded.com>

---
 drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Index: linux/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
===================================================================
--- linux.orig/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
+++ linux/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c
@@ -59,11 +59,8 @@ static void rcar_du_lvdsenc_start_gen2(s
 
        rcar_lvds_write(lvds, LVDPLLCR, pllcr);
 
-       /*
-        * Set the  LVDS mode, select the input, enable LVDS operation,
-        * and turn bias circuitry on.
-        */
-       lvdcr0 = (lvds->mode << LVDCR0_LVMD_SHIFT) | LVDCR0_BEN | LVDCR0_LVEN;
+       /* Select the input and set the LVDS mode. */
+       lvdcr0 = lvds->mode << LVDCR0_LVMD_SHIFT;
        if (rcrtc->index == 2)
                lvdcr0 |= LVDCR0_DUSEL;
        rcar_lvds_write(lvds, LVDCR0, lvdcr0);
@@ -73,6 +70,10 @@ static void rcar_du_lvdsenc_start_gen2(s
                        LVDCR1_CHSTBY(3) | LVDCR1_CHSTBY(2) |
                        LVDCR1_CHSTBY(1) | LVDCR1_CHSTBY(0) | LVDCR1_CLKSTBY);
 
+       /* Enable LVDS operation and turn bias circuitry on. */
+       lvdcr0 |= LVDCR0_BEN | LVDCR0_LVEN;
+       rcar_lvds_write(lvds, LVDCR0, lvdcr0);
+
        /*
         * Turn the PLL on, wait for the startup delay, and turn the output
         * on.

Reply via email to