diff options
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_lvds.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c index 1247e26a0559..3d2d3bbd1342 100644 --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c | |||
@@ -32,6 +32,9 @@ enum rcar_lvds_mode { | |||
32 | }; | 32 | }; |
33 | 33 | ||
34 | #define RCAR_LVDS_QUIRK_LANES (1 << 0) /* LVDS lanes 1 and 3 inverted */ | 34 | #define RCAR_LVDS_QUIRK_LANES (1 << 0) /* LVDS lanes 1 and 3 inverted */ |
35 | #define RCAR_LVDS_QUIRK_GEN2_PLLCR (1 << 1) /* LVDPLLCR has gen2 layout */ | ||
36 | #define RCAR_LVDS_QUIRK_GEN3_LVEN (1 << 2) /* LVEN bit needs to be set */ | ||
37 | /* on R8A77970/R8A7799x */ | ||
35 | 38 | ||
36 | struct rcar_lvds_device_info { | 39 | struct rcar_lvds_device_info { |
37 | unsigned int gen; | 40 | unsigned int gen; |
@@ -191,7 +194,7 @@ static void rcar_lvds_enable(struct drm_bridge *bridge) | |||
191 | rcar_lvds_write(lvds, LVDCHCR, lvdhcr); | 194 | rcar_lvds_write(lvds, LVDCHCR, lvdhcr); |
192 | 195 | ||
193 | /* PLL clock configuration. */ | 196 | /* PLL clock configuration. */ |
194 | if (lvds->info->gen < 3) | 197 | if (lvds->info->quirks & RCAR_LVDS_QUIRK_GEN2_PLLCR) |
195 | lvdpllcr = rcar_lvds_lvdpllcr_gen2(mode->clock); | 198 | lvdpllcr = rcar_lvds_lvdpllcr_gen2(mode->clock); |
196 | else | 199 | else |
197 | lvdpllcr = rcar_lvds_lvdpllcr_gen3(mode->clock); | 200 | lvdpllcr = rcar_lvds_lvdpllcr_gen3(mode->clock); |
@@ -224,6 +227,12 @@ static void rcar_lvds_enable(struct drm_bridge *bridge) | |||
224 | rcar_lvds_write(lvds, LVDCR0, lvdcr0); | 227 | rcar_lvds_write(lvds, LVDCR0, lvdcr0); |
225 | } | 228 | } |
226 | 229 | ||
230 | if (lvds->info->quirks & RCAR_LVDS_QUIRK_GEN3_LVEN) { | ||
231 | /* Turn on the LVDS PHY. */ | ||
232 | lvdcr0 |= LVDCR0_LVEN; | ||
233 | rcar_lvds_write(lvds, LVDCR0, lvdcr0); | ||
234 | } | ||
235 | |||
227 | /* Wait for the startup delay. */ | 236 | /* Wait for the startup delay. */ |
228 | usleep_range(100, 150); | 237 | usleep_range(100, 150); |
229 | 238 | ||
@@ -485,17 +494,23 @@ static int rcar_lvds_remove(struct platform_device *pdev) | |||
485 | 494 | ||
486 | static const struct rcar_lvds_device_info rcar_lvds_gen2_info = { | 495 | static const struct rcar_lvds_device_info rcar_lvds_gen2_info = { |
487 | .gen = 2, | 496 | .gen = 2, |
497 | .quirks = RCAR_LVDS_QUIRK_GEN2_PLLCR, | ||
488 | }; | 498 | }; |
489 | 499 | ||
490 | static const struct rcar_lvds_device_info rcar_lvds_r8a7790_info = { | 500 | static const struct rcar_lvds_device_info rcar_lvds_r8a7790_info = { |
491 | .gen = 2, | 501 | .gen = 2, |
492 | .quirks = RCAR_LVDS_QUIRK_LANES, | 502 | .quirks = RCAR_LVDS_QUIRK_GEN2_PLLCR | RCAR_LVDS_QUIRK_LANES, |
493 | }; | 503 | }; |
494 | 504 | ||
495 | static const struct rcar_lvds_device_info rcar_lvds_gen3_info = { | 505 | static const struct rcar_lvds_device_info rcar_lvds_gen3_info = { |
496 | .gen = 3, | 506 | .gen = 3, |
497 | }; | 507 | }; |
498 | 508 | ||
509 | static const struct rcar_lvds_device_info rcar_lvds_r8a77970_info = { | ||
510 | .gen = 3, | ||
511 | .quirks = RCAR_LVDS_QUIRK_GEN2_PLLCR | RCAR_LVDS_QUIRK_GEN3_LVEN, | ||
512 | }; | ||
513 | |||
499 | static const struct of_device_id rcar_lvds_of_table[] = { | 514 | static const struct of_device_id rcar_lvds_of_table[] = { |
500 | { .compatible = "renesas,r8a7743-lvds", .data = &rcar_lvds_gen2_info }, | 515 | { .compatible = "renesas,r8a7743-lvds", .data = &rcar_lvds_gen2_info }, |
501 | { .compatible = "renesas,r8a7790-lvds", .data = &rcar_lvds_r8a7790_info }, | 516 | { .compatible = "renesas,r8a7790-lvds", .data = &rcar_lvds_r8a7790_info }, |
@@ -503,6 +518,7 @@ static const struct of_device_id rcar_lvds_of_table[] = { | |||
503 | { .compatible = "renesas,r8a7793-lvds", .data = &rcar_lvds_gen2_info }, | 518 | { .compatible = "renesas,r8a7793-lvds", .data = &rcar_lvds_gen2_info }, |
504 | { .compatible = "renesas,r8a7795-lvds", .data = &rcar_lvds_gen3_info }, | 519 | { .compatible = "renesas,r8a7795-lvds", .data = &rcar_lvds_gen3_info }, |
505 | { .compatible = "renesas,r8a7796-lvds", .data = &rcar_lvds_gen3_info }, | 520 | { .compatible = "renesas,r8a7796-lvds", .data = &rcar_lvds_gen3_info }, |
521 | { .compatible = "renesas,r8a77970-lvds", .data = &rcar_lvds_r8a77970_info }, | ||
506 | { } | 522 | { } |
507 | }; | 523 | }; |
508 | 524 | ||