From 6b8bf8bea4ab079558f704faa9f3dba6f6b5553d Mon Sep 17 00:00:00 2001 From: Keith Packard <keithp@neko.keithp.com> Date: Thu, 17 May 2007 20:22:43 -0700 Subject: [PATCH] Disable all outputs and crtcs at startup. Leaving devices enabled during server startup can cause problems during the initial mode setting in the server, especially when they are used for different purposes by the X server than by the BIOS. Disabling all of them before any mode setting is attempted provides a stable base upon which the remaining mode setting operations can be built. --- hw/xfree86/modes/xf86Crtc.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 15a6de4..dfc1fce 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -1708,8 +1708,26 @@ Bool xf86SetDesiredModes (ScrnInfoPtr scrn) { xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); - int c; + int c, o; + + /* + * Turn off everything so mode setting is done + * with hardware in a consistent state + */ + for (o = 0; o < config->num_output; o++) + { + xf86OutputPtr output = config->output[o]; + (*output->funcs->dpms)(output, DPMSModeOff); + } + + for (c = 0; c < config->num_crtc; c++) + { + xf86CrtcPtr crtc = config->crtc[c]; + crtc->funcs->dpms(crtc, DPMSModeOff); + memset(&crtc->mode, 0, sizeof(crtc->mode)); + } + for (c = 0; c < config->num_crtc; c++) { xf86CrtcPtr crtc = config->crtc[c]; -- 1.5.2.4