drm: rcar-du: Add support for the R8A7794 DU
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 17 Jul 2015 07:44:33 +0000 (10:44 +0300)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Wed, 21 Oct 2015 15:52:38 +0000 (18:52 +0300)
The R8A7794 DU has a fixed output routing configuration with one RGB
output per CRTC and thus lacks the RGB output routing register field.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Documentation/devicetree/bindings/video/renesas,du.txt
drivers/gpu/drm/rcar-du/rcar_du_drv.c
drivers/gpu/drm/rcar-du/rcar_du_group.c

index d05be121486fc917055f067ff09601ea51f4e638..eccd4f4867b29cd9e5a1c6fee231fadfb79b5e8e 100644 (file)
@@ -7,6 +7,7 @@ Required Properties:
     - "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
     - "renesas,du-r8a7791" for R8A7791 (R-Car M2-W) compatible DU
     - "renesas,du-r8a7793" for R8A7793 (R-Car M2-N) compatible DU
+    - "renesas,du-r8a7794" for R8A7794 (R-Car E2) compatible DU
 
   - reg: A list of base address and length of each memory resource, one for
     each entry in the reg-names property.
@@ -23,7 +24,7 @@ Required Properties:
   - clock-names: Name of the clocks. This property is model-dependent.
     - R8A7779 uses a single functional clock. The clock doesn't need to be
       named.
-    - R8A779[013] use one functional clock per channel and one clock per LVDS
+    - R8A779[0134] use one functional clock per channel and one clock per LVDS
       encoder (if available). The functional clocks must be named "du.x" with
       "x" being the channel numerical index. The LVDS clocks must be named
       "lvds.x" with "x" being the LVDS encoder numerical index.
@@ -46,6 +47,7 @@ corresponding to each DU output.
  R8A7790 (H2)  DPAD            LVDS 0          LVDS 1
  R8A7791 (M2-W)        DPAD            LVDS 0          -
  R8A7793 (M2-N)        DPAD            LVDS 0          -
+ R8A7794 (E2)  DPAD 0          DPAD 1          -
 
 
 Example: R8A7790 (R-Car H2) DU
index d8e1fd93908fbf00ef922f2458d7683096b63a5b..40422f6b645e0c9a7c1589d027cca373688a3feb 100644 (file)
@@ -107,11 +107,34 @@ static const struct rcar_du_device_info rcar_du_r8a7791_info = {
        .num_lvds = 1,
 };
 
+static const struct rcar_du_device_info rcar_du_r8a7794_info = {
+       .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK
+                 | RCAR_DU_FEATURE_EXT_CTRL_REGS,
+       .num_crtcs = 2,
+       .routes = {
+               /* R8A7794 has two RGB outputs and one (currently unsupported)
+                * TCON output.
+                */
+               [RCAR_DU_OUTPUT_DPAD0] = {
+                       .possible_crtcs = BIT(0),
+                       .encoder_type = DRM_MODE_ENCODER_NONE,
+                       .port = 0,
+               },
+               [RCAR_DU_OUTPUT_DPAD1] = {
+                       .possible_crtcs = BIT(1),
+                       .encoder_type = DRM_MODE_ENCODER_NONE,
+                       .port = 1,
+               },
+       },
+       .num_lvds = 0,
+};
+
 static const struct of_device_id rcar_du_of_table[] = {
        { .compatible = "renesas,du-r8a7779", .data = &rcar_du_r8a7779_info },
        { .compatible = "renesas,du-r8a7790", .data = &rcar_du_r8a7790_info },
        { .compatible = "renesas,du-r8a7791", .data = &rcar_du_r8a7791_info },
        { .compatible = "renesas,du-r8a7793", .data = &rcar_du_r8a7791_info },
+       { .compatible = "renesas,du-r8a7794", .data = &rcar_du_r8a7794_info },
        { }
 };
 
index 7fd39a7d91c8b2fd411c4b2d27b4a1eabc4e9051..8e2ffe025153587c3c74a7f816756c692c1a0eca 100644 (file)
@@ -49,9 +49,10 @@ static void rcar_du_group_setup_defr8(struct rcar_du_group *rgrp)
        u32 defr8 = DEFR8_CODE | DEFR8_DEFE8;
 
        /* The DEFR8 register for the first group also controls RGB output
-        * routing to DPAD0
+        * routing to DPAD0 for DU instances that support it.
         */
-       if (rgrp->index == 0)
+       if (rgrp->dev->info->routes[RCAR_DU_OUTPUT_DPAD0].possible_crtcs > 1 &&
+           rgrp->index == 0)
                defr8 |= DEFR8_DRGBS_DU(rgrp->dev->dpad0_source);
 
        rcar_du_group_write(rgrp, DEFR8, defr8);