diff options
author | Koji Matsuoka <koji.matsuoka.xm@renesas.com> | 2016-06-28 03:33:45 -0400 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2016-11-14 18:44:51 -0500 |
commit | 85e8f8d175caa6a39f4c4e11dd4d0ab038f43324 (patch) | |
tree | 0d6f6e136f0c25b40164877e6aa6d43cf8af94e0 | |
parent | fd1adef3bff0663c5ac31b45bc4a05fafd43d19b (diff) |
drm: rcar-du: Fix LVDS start sequence on Gen3
According to the latest revision of the datasheet, the LVDS I/O pins
must be enabled before starting the PLL. Fix it.
Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c b/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c index b74105a80a6e..e3a4985f6f3f 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdsenc.c | |||
@@ -104,7 +104,14 @@ static void rcar_du_lvdsenc_start_gen3(struct rcar_du_lvdsenc *lvds, | |||
104 | 104 | ||
105 | rcar_lvds_write(lvds, LVDPLLCR, pllcr); | 105 | rcar_lvds_write(lvds, LVDPLLCR, pllcr); |
106 | 106 | ||
107 | /* Turn the PLL on, set it to LVDS normal mode, wait for the startup | 107 | /* Turn all the channels on. */ |
108 | rcar_lvds_write(lvds, LVDCR1, | ||
109 | LVDCR1_CHSTBY_GEN3(3) | LVDCR1_CHSTBY_GEN3(2) | | ||
110 | LVDCR1_CHSTBY_GEN3(1) | LVDCR1_CHSTBY_GEN3(0) | | ||
111 | LVDCR1_CLKSTBY_GEN3); | ||
112 | |||
113 | /* | ||
114 | * Turn the PLL on, set it to LVDS normal mode, wait for the startup | ||
108 | * delay and turn the output on. | 115 | * delay and turn the output on. |
109 | */ | 116 | */ |
110 | lvdcr0 = LVDCR0_PLLON; | 117 | lvdcr0 = LVDCR0_PLLON; |
@@ -117,12 +124,6 @@ static void rcar_du_lvdsenc_start_gen3(struct rcar_du_lvdsenc *lvds, | |||
117 | 124 | ||
118 | lvdcr0 |= LVDCR0_LVRES; | 125 | lvdcr0 |= LVDCR0_LVRES; |
119 | rcar_lvds_write(lvds, LVDCR0, lvdcr0); | 126 | rcar_lvds_write(lvds, LVDCR0, lvdcr0); |
120 | |||
121 | /* Turn all the channels on. */ | ||
122 | rcar_lvds_write(lvds, LVDCR1, | ||
123 | LVDCR1_CHSTBY_GEN3(3) | LVDCR1_CHSTBY_GEN3(2) | | ||
124 | LVDCR1_CHSTBY_GEN3(1) | LVDCR1_CHSTBY_GEN3(0) | | ||
125 | LVDCR1_CLKSTBY_GEN3); | ||
126 | } | 127 | } |
127 | 128 | ||
128 | static int rcar_du_lvdsenc_start(struct rcar_du_lvdsenc *lvds, | 129 | static int rcar_du_lvdsenc_start(struct rcar_du_lvdsenc *lvds, |