Merge branch 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev into drm-next
rcar-du support for r8a7793/4 * 'drm/next/du' of git://linuxtv.org/pinchartl/fbdev: drm: rcar-du: Add support for the R8A7794 DU drm: rcar-du: Add support for the R8A7793 DU
This commit is contained in:
Коммит
2b5f900e4f
|
@ -5,7 +5,9 @@ Required Properties:
|
|||
- compatible: must be one of the following.
|
||||
- "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
|
||||
- "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
|
||||
- "renesas,du-r8a7791" for R8A7791 (R-Car M2) 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.
|
||||
|
@ -22,9 +24,9 @@ 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.
|
||||
- R8A7790 and R8A7791 use one functional clock per channel and one clock
|
||||
per LVDS encoder. The functional clocks must be named "du.x" with "x"
|
||||
being the channel numerical index. The LVDS clocks must be named
|
||||
- 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.
|
||||
- In addition to the functional and encoder clocks, all DU versions also
|
||||
support externally supplied pixel clocks. Those clocks are optional.
|
||||
|
@ -43,7 +45,9 @@ corresponding to each DU output.
|
|||
-----------------------------------------------------------------------------
|
||||
R8A7779 (H1) DPAD 0 DPAD 1 -
|
||||
R8A7790 (H2) DPAD LVDS 0 LVDS 1
|
||||
R8A7791 (M2) DPAD LVDS 0 -
|
||||
R8A7791 (M2-W) DPAD LVDS 0 -
|
||||
R8A7793 (M2-N) DPAD LVDS 0 -
|
||||
R8A7794 (E2) DPAD 0 DPAD 1 -
|
||||
|
||||
|
||||
Example: R8A7790 (R-Car H2) DU
|
||||
|
|
|
@ -84,12 +84,13 @@ static const struct rcar_du_device_info rcar_du_r8a7790_info = {
|
|||
.num_lvds = 2,
|
||||
};
|
||||
|
||||
/* M2-W (r8a7791) and M2-N (r8a7793) are identical */
|
||||
static const struct rcar_du_device_info rcar_du_r8a7791_info = {
|
||||
.features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK
|
||||
| RCAR_DU_FEATURE_EXT_CTRL_REGS,
|
||||
.num_crtcs = 2,
|
||||
.routes = {
|
||||
/* R8A7791 has one RGB output, one LVDS output and one
|
||||
/* R8A779[13] has one RGB output, one LVDS output and one
|
||||
* (currently unsupported) TCON output.
|
||||
*/
|
||||
[RCAR_DU_OUTPUT_DPAD0] = {
|
||||
|
@ -106,10 +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 },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче