summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-01-08 20:24:32 -0800
committerKeith Packard <keithp@keithp.com>2013-01-08 20:24:32 -0800
commit6703a7c7cf1a349c137e247a0c8eb462ff7b07be (patch)
treed3419efa541fd1596b961a3f05ba412970fc6683 /hw
parent8b328d4ee3873bc0a7a34f2cb9d301827244b98c (diff)
hw/xfree86: Require only one working CRTC to start the server.
Instead of requiring every mode set to complete successfully, start up as long as at least one CRTC is working. This avoids failures when one or more CRTCs can't start due to mode setting conflicts. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/xfree86/modes/xf86Crtc.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 13251cff4..b3ded5a33 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -2605,6 +2605,7 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CrtcPtr crtc = config->crtc[0];
int c;
+ int enabled = 0;
/* A driver with this hook will take care of this */
if (!crtc->funcs->set_mode_major) {
@@ -2655,14 +2656,20 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
transform = &crtc->desiredTransform;
else
transform = NULL;
- if (!xf86CrtcSetModeTransform
+ if (xf86CrtcSetModeTransform
(crtc, &crtc->desiredMode, crtc->desiredRotation, transform,
- crtc->desiredX, crtc->desiredY))
- return FALSE;
+ crtc->desiredX, crtc->desiredY)) {
+ ++enabled;
+ } else {
+ for (o = 0; o < config->num_output; o++)
+ if (config->output[o]->crtc == crtc)
+ config->output[o]->crtc = NULL;
+ crtc->enabled = FALSE;
+ }
}
xf86DisableUnusedFunctions(scrn);
- return TRUE;
+ return enabled != 0;
}
/**