From 2738504d9a6c56fc0a7e5224e1742d7f9e4cca91 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Wed, 10 Apr 2019 17:42:37 +0100 Subject: [PATCH] drm: vc4: Iterate over all planes in vc4_crtc_[dis|en]able Fixes a FIXME where the overlay plane wouldn't be restored. Signed-off-by: Dave Stevenson --- drivers/gpu/drm/vc4/vc4_firmware_kms.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_firmware_kms.c b/drivers/gpu/drm/vc4/vc4_firmware_kms.c index fe966eb..81afd77 100644 --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c @@ -600,6 +600,8 @@ static void vc4_crtc_mode_set_nofb(struct drm_crtc *crtc) static void vc4_crtc_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { + struct drm_plane *plane; + drm_crtc_vblank_off(crtc); /* Always turn the planes off on CRTC disable. In DRM, planes @@ -609,23 +611,23 @@ static void vc4_crtc_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_s * give us a CRTC-level control for that. */ - vc4_plane_atomic_disable(crtc->cursor, crtc->cursor->state); - vc4_plane_atomic_disable(crtc->primary, crtc->primary->state); - - /* FIXME: Disable overlay planes */ + drm_atomic_crtc_for_each_plane(plane, crtc) + vc4_plane_atomic_disable(plane, plane->state); } static void vc4_crtc_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) { + struct drm_plane *plane; + drm_crtc_vblank_on(crtc); + /* Unblank the planes (if they're supposed to be displayed). */ + drm_atomic_crtc_for_each_plane(plane, crtc) + if (plane->state->fb) + vc4_plane_set_blank(plane, plane->state->visible); +} - if (crtc->primary->state->fb) - vc4_plane_set_blank(crtc->primary, false); - if (crtc->cursor->state->fb) - vc4_plane_set_blank(crtc->cursor, crtc->cursor->state); - /* FIXME: Enable overlay planes */ } static int vc4_crtc_atomic_check(struct drm_crtc *crtc, -- 2.7.4