From 4e50467b4f50b522a07bedae7ff68b9c37362af8 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 14 Jun 2012 17:40:09 +0100 Subject: [PATCH] uxa: Force the outputs to off for consistency with xf86DisableUnusedFunctions() Upon a VT switch, we set the desired modes and turn off the DPMS on any unused output. Make this explicit so that we always maintain consistency between the kernel and X's list of enabled CRTCs. References: https://bugs.freedesktop.org/show_bug.cgi?id=50772 Signed-off-by: Chris Wilson --- src/intel.h | 1 + src/intel_display.c | 17 ++++++++++++++++- src/intel_driver.c | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/intel.h b/src/intel.h index caf07bb0..1555acd0 100644 --- a/src/intel.h +++ b/src/intel.h @@ -362,6 +362,7 @@ enum { extern Bool intel_mode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp); extern void intel_mode_init(struct intel_screen_private *intel); +extern void intel_mode_disable_unused_functions(ScrnInfoPtr scrn); extern void intel_mode_remove_fb(intel_screen_private *intel); extern void intel_mode_fini(intel_screen_private *intel); diff --git a/src/intel_display.c b/src/intel_display.c index 8de63449..949a822c 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -332,9 +332,24 @@ mode_to_kmode(ScrnInfoPtr scrn, } static void -intel_crtc_dpms(xf86CrtcPtr intel_crtc, int mode) +intel_crtc_dpms(xf86CrtcPtr crtc, int mode) { +} +void +intel_mode_disable_unused_functions(ScrnInfoPtr scrn) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + struct intel_mode *mode = intel_get_screen_private(scrn)->modes; + int i; + + /* Force off for consistency between kernel and ddx */ + for (i = 0; i < xf86_config->num_crtc; i++) { + xf86CrtcPtr crtc = xf86_config->crtc[i]; + if (!crtc->enabled) + drmModeSetCrtc(mode->fd, crtc_id(crtc->driver_private), + 0, 0, 0, NULL, 0, NULL); + } } static Bool diff --git a/src/intel_driver.c b/src/intel_driver.c index 8962a112..3a9fe6f2 100644 --- a/src/intel_driver.c +++ b/src/intel_driver.c @@ -1068,6 +1068,7 @@ static Bool I830EnterVT(VT_FUNC_ARGS_DECL) if (!xf86SetDesiredModes(scrn)) return FALSE; + intel_mode_disable_unused_functions(scrn); return TRUE; }