| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Fri, 12 Jan 2018 23:12:05 +0300 |
| Subject: drm: rcar-du: lvds: Fix LVDS startup on R-Car Gen2 |
| |
| commit 8525d04ba8a6a9ecfa4bd619c988ca873a5fc2a4 upstream. |
| |
| According to the latest revision 2.00 of the R-Car Gen2 manual, the LVDS |
| and the bias circuit must be enabled after the LVDS I/O pins are |
| enabled, not before. Fix the Gen2 LVDS startup sequence accordingly. |
| |
| While at it, also fix the comment preceding the first LVDCR0 write that |
| still talks about hardcoding the LVDS mode 0. |
| |
| Fixes: 90374b5c25c9 ("drm/rcar-du: Add internal LVDS encoder support") |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Tested-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> |
| [bwh: Backported to 3.16: |
| - Mode is always 0 |
| - Adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c |
| +++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c |
| @@ -87,10 +87,8 @@ static int rcar_du_lvdsenc_start(struct |
| |
| rcar_lvds_write(lvds, LVDCHCR, lvdhcr); |
| |
| - /* Select the input, hardcode mode 0, enable LVDS operation and turn |
| - * bias circuitry on. |
| - */ |
| - lvdcr0 = LVDCR0_BEN | LVDCR0_LVEN; |
| + /* Select the input and set the LVDS mode. */ |
| + lvdcr0 = 0; |
| if (rcrtc->index == 2) |
| lvdcr0 |= LVDCR0_DUSEL; |
| rcar_lvds_write(lvds, LVDCR0, lvdcr0); |
| @@ -99,6 +97,10 @@ static int rcar_du_lvdsenc_start(struct |
| rcar_lvds_write(lvds, LVDCR1, 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. |
| */ |