xf86-video-ati: Branch 'master' - 3 commits

Dave Airlie airlied at kemper.freedesktop.org
Sun Nov 12 07:13:27 EET 2006


 src/radeon.h         |    1 
 src/radeon_display.c |   58 ++++++++++++++---
 src/radeon_driver.c  |  169 +++++++++++++++++++++++++++++----------------------
 src/radeon_probe.h   |    1 
 4 files changed, 147 insertions(+), 82 deletions(-)

New commits:
diff-tree 45a9f434b77ad892efcdba267a935135b972dd42 (from d0828804aec0852afaca44ee41c4792edc40dbb4)
Author: Dave Airlie <airlied at linux.ie>
Date:   Sun Nov 12 16:12:56 2006 +1100

    add radeon Init2 function, to abstract some mergedfb mode setting

diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index da7d637..d88c22e 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -6959,96 +6959,75 @@ static void RADEONInitPalette(RADEONSave
 #endif
 
 /* Define registers for a requested video mode */
-static Bool RADEONInit(ScrnInfoPtr pScrn, DisplayModePtr mode,
-		       RADEONSavePtr save)
+static Bool RADEONInit2(ScrnInfoPtr pScrn, DisplayModePtr crtc1,
+			DisplayModePtr crtc2, int crtc_mask,
+			RADEONSavePtr save)
 {
     RADEONInfoPtr  info      = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt  = RADEONEntPriv(pScrn);
-    double         dot_clock = mode->Clock/1000.0;
+    double         dot_clock = crtc1->Clock/1000.0;
     RADEONInfoPtr  info0     = NULL;
     ScrnInfoPtr    pScrn0    = NULL;
 
 #if RADEON_DEBUG
     ErrorF("%-12.12s %7.2f  %4d %4d %4d %4d  %4d %4d %4d %4d (%d,%d)",
-	   mode->name,
+	   crtc1->name,
 	   dot_clock,
 
-	   mode->HDisplay,
-	   mode->HSyncStart,
-	   mode->HSyncEnd,
-	   mode->HTotal,
-
-	   mode->VDisplay,
-	   mode->VSyncStart,
-	   mode->VSyncEnd,
-	   mode->VTotal,
+	   crtc1->HDisplay,
+	   crtc1->HSyncStart,
+	   crtc1->HSyncEnd,
+	   crtc1->HTotal,
+
+	   crtc1->VDisplay,
+	   crtc1->VSyncStart,
+	   crtc1->VSyncEnd,
+	   crtc1->VTotal,
 	   pScrn->depth,
 	   pScrn->bitsPerPixel);
-    if (mode->Flags & V_DBLSCAN)   ErrorF(" D");
-    if (mode->Flags & V_CSYNC)     ErrorF(" C");
-    if (mode->Flags & V_INTERLACE) ErrorF(" I");
-    if (mode->Flags & V_PHSYNC)    ErrorF(" +H");
-    if (mode->Flags & V_NHSYNC)    ErrorF(" -H");
-    if (mode->Flags & V_PVSYNC)    ErrorF(" +V");
-    if (mode->Flags & V_NVSYNC)    ErrorF(" -V");
+    if (crtc1->Flags & V_DBLSCAN)   ErrorF(" D");
+    if (crtc1->Flags & V_CSYNC)     ErrorF(" C");
+    if (crtc1->Flags & V_INTERLACE) ErrorF(" I");
+    if (crtc1->Flags & V_PHSYNC)    ErrorF(" +H");
+    if (crtc1->Flags & V_NHSYNC)    ErrorF(" -H");
+    if (crtc1->Flags & V_PVSYNC)    ErrorF(" +V");
+    if (crtc1->Flags & V_NVSYNC)    ErrorF(" -V");
     ErrorF("\n");
     ErrorF("%-12.12s %7.2f  %4d %4d %4d %4d  %4d %4d %4d %4d (%d,%d)",
-	   mode->name,
+	   crtc1->name,
 	   dot_clock,
 
-	   mode->CrtcHDisplay,
-	   mode->CrtcHSyncStart,
-	   mode->CrtcHSyncEnd,
-	   mode->CrtcHTotal,
-
-	   mode->CrtcVDisplay,
-	   mode->CrtcVSyncStart,
-	   mode->CrtcVSyncEnd,
-	   mode->CrtcVTotal,
+	   crtc1->CrtcHDisplay,
+	   crtc1->CrtcHSyncStart,
+	   crtc1->CrtcHSyncEnd,
+	   crtc1->CrtcHTotal,
+
+	   crtc1->CrtcVDisplay,
+	   crtc1->CrtcVSyncStart,
+	   crtc1->CrtcVSyncEnd,
+	   crtc1->CrtcVTotal,
 	   pScrn->depth,
 	   pScrn->bitsPerPixel);
-    if (mode->Flags & V_DBLSCAN)   ErrorF(" D");
-    if (mode->Flags & V_CSYNC)     ErrorF(" C");
-    if (mode->Flags & V_INTERLACE) ErrorF(" I");
-    if (mode->Flags & V_PHSYNC)    ErrorF(" +H");
-    if (mode->Flags & V_NHSYNC)    ErrorF(" -H");
-    if (mode->Flags & V_PVSYNC)    ErrorF(" +V");
-    if (mode->Flags & V_NVSYNC)    ErrorF(" -V");
+    if (crtc1->Flags & V_DBLSCAN)   ErrorF(" D");
+    if (crtc1->Flags & V_CSYNC)     ErrorF(" C");
+    if (crtc1->Flags & V_INTERLACE) ErrorF(" I");
+    if (crtc1->Flags & V_PHSYNC)    ErrorF(" +H");
+    if (crtc1->Flags & V_NHSYNC)    ErrorF(" -H");
+    if (crtc1->Flags & V_PVSYNC)    ErrorF(" +V");
+    if (crtc1->Flags & V_NVSYNC)    ErrorF(" -V");
     ErrorF("\n");
 #endif
 
-    info->Flags = mode->Flags;
+    info->Flags = crtc1->Flags;
 
     RADEONInitMemMapRegisters(pScrn, save, info);
     RADEONInitCommonRegisters(save, info);
-    if (info->IsSecondary) {
-	pScrn0 = pRADEONEnt->pPrimaryScrn;
-	info0 = RADEONPTR(pScrn0);
-	if (!RADEONInitCrtc2Registers(pScrn, save, mode, info))
-	    return FALSE;
-	RADEONInitPLL2Registers(pScrn, save, &info->pll, dot_clock, info->DisplayType != MT_CRT);
-	/* Make sure primary has the same copy */
-	memcpy(&info0->ModeReg, save, sizeof(RADEONSaveRec));
-    } else if (info->MergedFB) {
-        if (!RADEONInitCrtcRegisters(pScrn, save, 
-			((RADEONMergedDisplayModePtr)mode->Private)->CRT1, info))
-            return FALSE;
-        dot_clock = (((RADEONMergedDisplayModePtr)mode->Private)->CRT1)->Clock / 1000.0;
-        if (dot_clock) {
-		RADEONInitPLLRegisters(pScrn, info, save, &info->pll, dot_clock);
-        } else {
-            save->ppll_ref_div = info->SavedReg.ppll_ref_div;
-            save->ppll_div_3   = info->SavedReg.ppll_div_3;
-            save->htotal_cntl  = info->SavedReg.htotal_cntl;
-        }
-        RADEONInitCrtc2Registers(pScrn, save, 
-			((RADEONMergedDisplayModePtr)mode->Private)->CRT2, info);
-        dot_clock = (((RADEONMergedDisplayModePtr)mode->Private)->CRT2)->Clock / 1000.0;
-        RADEONInitPLL2Registers(pScrn, save, &info->pll, dot_clock, info->MergeType != MT_CRT);
-    } else {
-	if (!RADEONInitCrtcRegisters(pScrn, save, mode, info))
+
+    switch(crtc_mask) {
+    case 1:
+	if (!RADEONInitCrtcRegisters(pScrn, save, crtc1, info))
 	    return FALSE;
-	dot_clock = mode->Clock/1000.0;
+	dot_clock = crtc1->Clock/1000.0;
 	if (dot_clock) {
 		RADEONInitPLLRegisters(pScrn, info, save, &info->pll, dot_clock);
 	} else {
@@ -7064,13 +7043,58 @@ static Bool RADEONInit(ScrnInfoPtr pScrn
 	}
 
 	/* Not used for now: */
-     /* if (!info->PaletteSavedOnVT) RADEONInitPalette(save); */
+	/* if (!info->PaletteSavedOnVT) RADEONInitPalette(save); */
+	break;
+    case 2:
+	pScrn0 = pRADEONEnt->pPrimaryScrn;
+	info0 = RADEONPTR(pScrn0);
+	dot_clock = crtc2->Clock/1000.0;
+	if (!RADEONInitCrtc2Registers(pScrn, save, crtc2, info))
+	    return FALSE;
+	RADEONInitPLL2Registers(pScrn, save, &info->pll, dot_clock, info->DisplayType != MT_CRT);
+	/* Make sure primary has the same copy */
+	memcpy(&info0->ModeReg, save, sizeof(RADEONSaveRec));
+	break;
+    case 3:
+       if (!RADEONInitCrtcRegisters(pScrn, save, 
+				    crtc1, info))
+            return FALSE;
+        dot_clock = crtc1->Clock / 1000.0;
+        if (dot_clock) {
+		RADEONInitPLLRegisters(pScrn, info, save, &info->pll, dot_clock);
+        } else {
+            save->ppll_ref_div = info->SavedReg.ppll_ref_div;
+            save->ppll_div_3   = info->SavedReg.ppll_div_3;
+            save->htotal_cntl  = info->SavedReg.htotal_cntl;
+        }
+        RADEONInitCrtc2Registers(pScrn, save, crtc2, info);
+        dot_clock = crtc2->Clock / 1000.0;
+        RADEONInitPLL2Registers(pScrn, save, &info->pll, dot_clock, info->MergeType != MT_CRT);
+	break;
+    default:
+	return FALSE;
     }
 
     RADEONTRACE(("RADEONInit returns %p\n", save));
     return TRUE;
 }
 
+static Bool RADEONInit(ScrnInfoPtr pScrn, DisplayModePtr mode,
+		       RADEONSavePtr save)
+{
+    RADEONInfoPtr info = RADEONPTR(pScrn);
+    RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+
+    if (info->IsSecondary) {
+        return RADEONInit2(pScrn, NULL, mode, 2, save);
+    } else if (info->MergedFB) {
+        return RADEONInit2(pScrn, ((RADEONMergedDisplayModePtr)mode->Private)->CRT1,
+			   ((RADEONMergedDisplayModePtr)mode->Private)->CRT2, 3, save);
+    } else {
+        return RADEONInit2(pScrn, mode, NULL, 1, save);
+    }
+}
+
 /* Initialize a new mode */
 static Bool RADEONModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
 {
diff-tree d0828804aec0852afaca44ee41c4792edc40dbb4 (from 78061ca460c9d6fd338ccf273bbfa152f471622e)
Author: Dave Airlie <airlied at linux.ie>
Date:   Sun Nov 12 15:59:02 2006 +1100

    add initial controller binding, remove uses of mergedfb test

diff --git a/src/radeon_display.c b/src/radeon_display.c
index e2d895d..63b804e 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -1347,14 +1347,17 @@ Bool RADEONMapControllers(ScrnInfoPtr pS
 
     if(info->HasCRTC2) {   
 	if(info->IsSecondary) {
+  	    pRADEONEnt->Controller[1].binding = 2;
 	    info->DisplayType = pRADEONEnt->Controller[1].pPort->MonType;
 	    pScrn->monitor->DDC = pRADEONEnt->Controller[1].pPort->MonInfo;
 	} else {
+  	    pRADEONEnt->Controller[1].binding = 1;
 	    info->DisplayType = pRADEONEnt->Controller[0].pPort->MonType; 
 	    pScrn->monitor->DDC = pRADEONEnt->Controller[0].pPort->MonInfo;
 	}
 	
 	if(!pRADEONEnt->HasSecondary) {
+  	    pRADEONEnt->Controller[1].binding = 1;
 	    info->MergeType = pRADEONEnt->Controller[1].pPort->MonType;
 	} 
     } else {
@@ -1363,6 +1366,7 @@ Bool RADEONMapControllers(ScrnInfoPtr pS
 	info->DisplayType = pRADEONEnt->Controller[0].pPort->MonType; 
 	pScrn->monitor->DDC = pRADEONEnt->Controller[0].pPort->MonInfo;
 	pRADEONEnt->Controller[1].pPort->MonType = MT_NONE;
+	pRADEONEnt->Controller[1].binding = 1;
     }
 
     if (!info->IsSecondary) {
@@ -2008,7 +2012,7 @@ void RADEONBlank(ScrnInfoPtr pScrn)
 
 	if (!info->HasCRTC2) return;
 
-	if (info->MergedFB) {
+	if (pRADEONEnt->Controller[1].binding == 1) {
   	    RADEONBlankSet(pScrn, 1);
 	    OUTREGP (RADEON_CRTC2_GEN_CNTL,
 		     RADEON_CRTC2_DISP_DIS |
@@ -2077,7 +2081,7 @@ void RADEONUnblank(ScrnInfoPtr pScrn)
 
       if (!info->HasCRTC2) return;
 
-      if (info->MergedFB) {
+      if (pRADEONEnt->Controller[1].binding == 1) {
 	RADEONUnblankSet(pScrn, 1);
 	OUTREGP(RADEON_CRTC2_GEN_CNTL, 0,
 		~(RADEON_CRTC2_DISP_DIS |
@@ -2186,6 +2190,7 @@ void RADEONDisplayPowerManagementSet(Scr
 					    int flags)
 {
     RADEONInfoPtr  info       = RADEONPTR(pScrn);
+    RADEONEntPtr pRADEONEnt   = RADEONEntPriv(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
 
     if (!pScrn->vtSema) return;
@@ -2215,7 +2220,7 @@ void RADEONDisplayPowerManagementSet(Scr
 	    if (info->IsSecondary)
 		OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~mask2);
 	    else {
-		if (info->MergedFB)
+		if (pRADEONEnt->Controller[1].binding == 1)
 		    OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~mask2);
 		OUTREGP(RADEON_CRTC_EXT_CNTL, 0, ~mask1);
 	    }
@@ -2228,7 +2233,7 @@ void RADEONDisplayPowerManagementSet(Scr
 			(RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS),
 			~mask2);
 	    else {
-		if (info->MergedFB)
+		if (pRADEONEnt->Controller[1].binding == 1)
 		    OUTREGP(RADEON_CRTC2_GEN_CNTL,
 			    (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS),
 			    ~mask2);
@@ -2245,7 +2250,7 @@ void RADEONDisplayPowerManagementSet(Scr
 			(RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS),
 			~mask2);
 	    else {
-		if (info->MergedFB)
+		if (pRADEONEnt->Controller[1].binding == 1)
 		    OUTREGP(RADEON_CRTC2_GEN_CNTL,
 			    (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS),
 			    ~mask2);
@@ -2260,7 +2265,7 @@ void RADEONDisplayPowerManagementSet(Scr
 	    if (info->IsSecondary)
 		OUTREGP(RADEON_CRTC2_GEN_CNTL, mask2, ~mask2);
 	    else {
-		if (info->MergedFB)
+		if (pRADEONEnt->Controller[1].binding == 1)
 		    OUTREGP(RADEON_CRTC2_GEN_CNTL, mask2, ~mask2);
 		OUTREGP(RADEON_CRTC_EXT_CNTL, mask1, ~mask1);
 	    }
@@ -2269,14 +2274,14 @@ void RADEONDisplayPowerManagementSet(Scr
 
 	if (PowerManagementMode == DPMSModeOn) {
    	    RADEONDPMSSetOn(pScrn, info->IsSecondary ? 1 : 0);
-	    if (info->MergedFB)
+	    if (pRADEONEnt->Controller[1].binding == 1)
 	      RADEONDPMSSetOn(pScrn, 1);
 	} else if ((PowerManagementMode == DPMSModeOff) ||
 		   (PowerManagementMode == DPMSModeSuspend) ||
 		   (PowerManagementMode == DPMSModeStandby)) {
 
 	    RADEONDPMSSetOff(pScrn, info->IsSecondary ? 1 : 0);
-	    if (info->MergedFB)
+	    if (pRADEONEnt->Controller[1].binding == 1)
 	        RADEONDPMSSetOff(pScrn, 1);
         }
     }
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index b38c6ef..da7d637 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -2967,7 +2967,7 @@ static Bool RADEONPreInitModes(ScrnInfoP
     xf86SetCrtcForModes(pScrn, 0);
 
     if (info->HasCRTC2) {
-	if (info->MergedFB) {
+	if (pRADEONEnt->Controller[1].binding == 1) {
 
 	    /* If we have 2 screens from the config file, we don't need
 	     * to do clone thing, let each screen handles one head.
@@ -2996,7 +2996,7 @@ static Bool RADEONPreInitModes(ScrnInfoP
     }
     xf86PrintModes(pScrn);
 
-    if(info->MergedFB) {
+    if(pRADEONEnt->Controller[1].binding == 1) {
 
        xf86SetCrtcForModes(info->CRT2pScrn, INTERLACE_HALVE_V);
 
@@ -5796,7 +5796,7 @@ static void RADEONRestoreMode(ScrnInfoPt
 	} else {
 	    RADEONRestoreMemMapRegisters(pScrn, restore);
 	    RADEONRestoreCommonRegisters(pScrn, restore);
-	    if (info->MergedFB) {
+	    if (pCRTC2->binding == 1) {
 		RADEONRestoreCrtc2Registers(pScrn, restore);
 		RADEONRestorePLL2Registers(pScrn, restore);
 	    }
@@ -5805,14 +5805,14 @@ static void RADEONRestoreMode(ScrnInfoPt
             RADEONRestorePLLRegisters(pScrn, restore);
 	    RADEONRestoreFPRegisters(pScrn, restore);
 	    RADEONEnableDisplay(pScrn, pCRTC1, TRUE);
-	    if (info->MergedFB) {
+	    if (pCRTC2->binding == 1) {
 	        RADEONEnableDisplay(pScrn, pCRTC2, TRUE);
 	    }
 	}
     } else {
 	RADEONRestoreMemMapRegisters(pScrn, restore);
 	RADEONRestoreCommonRegisters(pScrn, restore);
-	if ((info->MergedFB) || pRADEONEnt->HasSecondary) {
+	if ((pCRTC2->binding == 1) || pRADEONEnt->HasSecondary) {
 	    RADEONRestoreCrtc2Registers(pScrn, restore);
 	    RADEONRestorePLL2Registers(pScrn, restore);
 	}
@@ -5821,7 +5821,7 @@ static void RADEONRestoreMode(ScrnInfoPt
 	RADEONRestorePLLRegisters(pScrn, restore);
 	RADEONRestoreFPRegisters(pScrn, restore);
 	RADEONEnableDisplay(pScrn, pCRTC1, TRUE);
-	if ((info->MergedFB) || pRADEONEnt->HasSecondary) {
+	if ((pCRTC2->binding == 1) || pRADEONEnt->HasSecondary) {
 	    RADEONEnableDisplay(pScrn, pCRTC2, TRUE);
 	}
     }
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index f10ffa1..bdc80fd 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -116,6 +116,7 @@ typedef struct
 {
     Bool IsUsed;
     Bool IsActive;
+    int binding; // which instance of the driver "owns" this controller
     DisplayModePtr pCurMode;
     RADEONConnector* pPort;
 } RADEONController;
diff-tree 78061ca460c9d6fd338ccf273bbfa152f471622e (from f917f65e8d2b13d8b9bfc4320f4a935f5a5c4bff)
Author: Dave Airlie <airlied at linux.ie>
Date:   Mon Oct 23 16:49:59 2006 +1000

    radeon: separate static controller setup from non-static

diff --git a/src/radeon.h b/src/radeon.h
index a7b0dfd..c0dbd3d 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -891,6 +891,7 @@ extern Bool        RADEONGetHardCodedEDI
 extern void        RADEONInitDispBandwidth(ScrnInfoPtr pScrn);
 extern Bool        RADEONI2cInit(ScrnInfoPtr pScrn);
 extern void        RADEONSetSyncRangeFromEdid(ScrnInfoPtr pScrn, int flag);
+extern void        RADEONSetupConnectors(ScrnInfoPtr pScrn);
 extern Bool        RADEONMapControllers(ScrnInfoPtr pScrn);
 extern void        RADEONEnableDisplay(ScrnInfoPtr pScrn, RADEONController* pCRTC, BOOL bEnable);
 extern void        RADEONDisableDisplays(ScrnInfoPtr pScrn);
diff --git a/src/radeon_display.c b/src/radeon_display.c
index 23aea17..e2d895d 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -919,7 +919,9 @@ void RADEONGetTVDacAdjInfo(ScrnInfoPtr p
     }
 }
 
-static void RADEONQueryConnectedDisplays(ScrnInfoPtr pScrn)
+/*
+ * initialise the static data sos we don't have to re-do at randr change */
+void RADEONSetupConnectors(ScrnInfoPtr pScrn)
 {
     RADEONInfoPtr info       = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt  = RADEONEntPriv(pScrn);
@@ -1136,6 +1138,32 @@ static void RADEONQueryConnectedDisplays
             pRADEONEnt->PortInfo[0].TMDSType = TMDS_UNKNOWN;
 	}
 
+    }
+}
+
+static void RADEONQueryConnectedDisplays(ScrnInfoPtr pScrn)
+{
+
+    RADEONInfoPtr info       = RADEONPTR(pScrn);
+    RADEONEntPtr pRADEONEnt  = RADEONEntPriv(pScrn);
+    unsigned char *RADEONMMIO = info->MMIO;
+    const char *s;
+    Bool ignore_edid = FALSE;
+    int i = 0, second = 0, max_mt = 5;
+
+    /* IgnoreEDID option is different from the NoDDCxx options used by DDC module
+     * When IgnoreEDID is used, monitor detection will still use DDC
+     * detection, but all EDID data will not be used in mode validation.
+     * You can use this option when you have a DDC monitor but want specify your own
+     * monitor timing parameters by using HSync, VRefresh and Modeline,
+     */
+    if (xf86GetOptValBool(info->Options, OPTION_IGNORE_EDID, &ignore_edid)) {
+        if (ignore_edid)
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                       "IgnoreEDID is specified, EDID data will be ignored\n");
+    }
+
+    if ((s = xf86GetOptValString(info->Options, OPTION_MONITOR_LAYOUT))) {
         if (!ignore_edid) {
             if ((pRADEONEnt->PortInfo[0].MonType > MT_NONE) &&
                 (pRADEONEnt->PortInfo[0].MonType < MT_STV))
@@ -1146,8 +1174,13 @@ static void RADEONQueryConnectedDisplays
 		RADEONDisplayDDCConnected(pScrn, pRADEONEnt->PortInfo[1].DDCType,
 					  &pRADEONEnt->PortInfo[1]);
         }
-
     }
+    else {
+      /* force monitor redetection */
+      pRADEONEnt->PortInfo[0].MonType = MT_UNKNOWN;
+      pRADEONEnt->PortInfo[1].MonType = MT_UNKNOWN;
+    }
+      
 
     if (pRADEONEnt->PortInfo[0].MonType == MT_UNKNOWN || pRADEONEnt->PortInfo[1].MonType == MT_UNKNOWN) {
 		
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 163d19c..b38c6ef 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -3550,6 +3550,7 @@ static Bool RADEONPreInitControllers(Scr
 {
     RADEONGetBIOSInfo(pScrn, pInt10);
 
+    RADEONSetupConnectors(pScrn);
     RADEONMapControllers(pScrn);
 
     RADEONGetClockInfo(pScrn);



More information about the xorg-commit mailing list