diff options
Diffstat (limited to 'drivers/gpu/drm/rcar-du/rcar_du_vsp.c')
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c index 7c7d6f2..24acee1 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c @@ -31,6 +31,7 @@ void rcar_du_vsp_enable(struct rcar_du_crtc *crtc) { const struct drm_display_mode *mode = &crtc->crtc.state->adjusted_mode; + struct rcar_du_device *rcdu = crtc->group->dev; struct rcar_du_plane_state state = { .state = { .crtc = &crtc->crtc, @@ -44,13 +45,17 @@ void rcar_du_vsp_enable(struct rcar_du_crtc *crtc) .src_h = mode->vdisplay << 16, }, .format = rcar_du_format_info(DRM_FORMAT_ARGB8888), - .hwindex = crtc->index % 2, .source = RCAR_DU_PLANE_VSPD1, .alpha = 255, .colorkey = 0, .zpos = 0, }; + if (rcdu->info->gen >= 3) + state.hwindex = (crtc->index % 2) ? 2 : 0; + else + state.hwindex = crtc->index % 2; + __rcar_du_plane_setup(crtc->group, &state); /* Ensure that the plane source configuration takes effect by requesting @@ -329,10 +334,9 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp) return ret; /* The VSP2D (Gen3) has 5 RPFs, but the VSP1D (Gen2) is limited to - * 4 RPFs. Hardcode the number of planes to 4 as Gen3 isn't supported - * yet. + * 4 RPFs. */ - vsp->num_planes = 4; + vsp->num_planes = rcdu->info->gen >= 3 ? 5 : 4; vsp->planes = devm_kcalloc(rcdu->dev, vsp->num_planes, sizeof(*vsp->planes), GFP_KERNEL); |