In a headless configuration, in order to convince the XServer to start
the user must explicitly enable an output. Except that doing so does
not initialise any output modes, and so the server still gives up in
disgust. Instead by rearranging the user override, we can continue to
setup the default modes for explicitly enabled outputs (and skip the
probing for explicitly disabled outputs).

Signed-off-by: Chris Wilson <[email protected]>
Cc: Keith Packard <[email protected]>
Cc: Dave Airlie <[email protected]>
---
 hw/xfree86/modes/xf86Crtc.c |   38 ++++++++++++++++++++------------------
 1 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 506fbb9..f9b73a9 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -524,22 +524,7 @@ xf86OutputSetMonitor (xf86OutputPtr output)
 static Bool
 xf86OutputEnabled (xf86OutputPtr output, Bool strict)
 {
-    Bool    enable, disable;
-
-    /* check to see if this output was enabled in the config file */
-    if (xf86GetOptValBool (output->options, OPTION_ENABLE, &enable) && enable)
-    {
-       xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
-                   "Output %s enabled by config file\n", output->name);
-       return TRUE;
-    }
-    /* or if this output was disabled in the config file */
-    if (xf86GetOptValBool (output->options, OPTION_DISABLE, &disable) && 
disable)
-    {
-       xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
-                   "Output %s disabled by config file\n", output->name);
-       return FALSE;
-    }
+    Bool    enable;
 
     /* If not, try to only light up the ones we know are connected */
     if (strict) {
@@ -1555,6 +1540,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int 
maxY)
        int                 min_clock = 0;
        int                 max_clock = 0;
        double              clock;
+       Bool                user_enable;
        Bool                add_default_modes = TRUE;
        enum { sync_config, sync_edid, sync_default } sync_source = 
sync_default;
        
@@ -1564,8 +1550,24 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int 
maxY)
        /*
         * Check connection status
         */
-       output->status = (*output->funcs->detect)(output);
-
+       if (xf86GetOptValBool (output->options, OPTION_ENABLE, &user_enable) && 
user_enable)
+       {
+           /* Was this output enabled in the config file? */
+           xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
+                       "Output %s enabled by config file\n", output->name);
+           output->status = XF86OutputStatusConnected;
+       }
+       else if (xf86GetOptValBool (output->options, OPTION_DISABLE, 
&user_enable) && user_enable)
+       {
+           /* Or was it explicitly disabled? */
+           xf86DrvMsg (output->scrn->scrnIndex, X_INFO,
+                       "Output %s disabled by config file\n", output->name);
+           output->status = XF86OutputStatusDisconnected;
+       }
+       else
+       {
+           output->status = (*output->funcs->detect)(output);
+       }
        if (output->status == XF86OutputStatusDisconnected)
        {
            xf86OutputSetEDID (output, NULL);
-- 
1.6.4.3

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to