summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-09-12 14:31:22 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2014-09-12 16:57:16 +0100
commita5a51b55ec07e03c87a9916eca6d023ccaf7d00b (patch)
tree42819a7cdb2ec0e49916b9894cf78994641e7de6
parent5ce4b344e497364b16a507b39b7637a00daa957a (diff)
sna: Mark the CRTC as disabled when hiding the plane
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna_display.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index f227acb7..df6d3845 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1479,24 +1479,8 @@ static void sna_crtc_disable_shadow(struct sna *sna, struct sna_crtc *crtc)
}
static void
-sna_crtc_disable(xf86CrtcPtr crtc)
+__sna_crtc_disable(struct sna *sna, struct sna_crtc *sna_crtc)
{
- struct sna *sna = to_sna(crtc->scrn);
- struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
- struct drm_mode_crtc arg;
-
- if (sna_crtc == NULL)
- return;
-
- DBG(("%s: disabling crtc [%d, pipe=%d]\n", __FUNCTION__,
- sna_crtc->id, sna_crtc->pipe));
-
- sna_crtc_force_outputs_off(crtc);
-
- memset(&arg, 0, sizeof(arg));
- arg.crtc_id = sna_crtc->id;
- (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_SETCRTC, &arg);
-
sna_crtc->mode_serial++;
sna_crtc_disable_cursor(sna, sna_crtc);
@@ -1517,10 +1501,32 @@ sna_crtc_disable(xf86CrtcPtr crtc)
sna_crtc->transform = false;
- assert(sna_crtc->dpms_mode == DPMSModeOff);
assert(!sna_crtc->shadow);
}
+static void
+sna_crtc_disable(xf86CrtcPtr crtc)
+{
+ struct sna *sna = to_sna(crtc->scrn);
+ struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
+ struct drm_mode_crtc arg;
+
+ if (sna_crtc == NULL)
+ return;
+
+ DBG(("%s: disabling crtc [%d, pipe=%d]\n", __FUNCTION__,
+ sna_crtc->id, sna_crtc->pipe));
+
+ sna_crtc_force_outputs_off(crtc);
+ assert(sna_crtc->dpms_mode == DPMSModeOff);
+
+ memset(&arg, 0, sizeof(arg));
+ arg.crtc_id = sna_crtc->id;
+ (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_SETCRTC, &arg);
+
+ __sna_crtc_disable(sna, sna_crtc);
+}
+
static void update_flush_interval(struct sna *sna)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
@@ -6299,6 +6305,7 @@ sna_crtc_hide_planes(struct sna *sna, struct sna_crtc *crtc)
s.plane_id = crtc->sprite.id;
(void)drmIoctl(sna->kgem.fd, LOCAL_IOCTL_MODE_SETPLANE, &s);
+ __sna_crtc_disable(sna, crtc);
return true;
}