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

Matthias Hopf mhopf at kemper.freedesktop.org
Thu Apr 19 12:56:27 EEST 2007


 src/radeon_display.c |   14 ++++++--------
 src/radeon_driver.c  |   10 +++++++---
 src/radeon_modes.c   |   18 ++++++++----------
 3 files changed, 21 insertions(+), 21 deletions(-)

New commits:
diff-tree ad119960095b4b64f4c6793f65950c9967ce4989 (from 16ef77df4ebaf5ea13baa82972aaf98e71ac32ee)
Author: Matthias Hopf <mhopf at suse.de>
Date:   Thu Apr 19 11:54:46 2007 +0200

    Disable RMX for IBM Lewis server.
    
    Due to the hardware layout RMX ddc_mode has to be set.
    If ddc_mode is set, RADEONValdiateFPModes() shouldn't be called.
    Bugzilla #10620 (3).

diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 0f9e2d6..bcc0882 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -2029,15 +2029,19 @@ static Bool RADEONPreInitModes(ScrnInfoP
 	xf86ReturnOptValBool(info->Options, OPTION_DDC_MODE, FALSE);
 
     /* don't use RMX if we have a dual-tmds panels */
-    
     if ((connector = RADEONGetCrtcConnector(pScrn, 2)))
 	if (connector->MonType == MT_DFP)
 	    info->ddc_mode = TRUE;
     /* don't use RMX if we are Dell Server */  
     if (info->IsDellServer)
-    {
 	info->ddc_mode = TRUE;
+    /* IBM Lewis server have troubles using the on-chip RMX mode */
+    if (info->ChipFamily == CHIP_FAMILY_RV100 && !info->HasCRTC2 && pRADEONEnt->PortInfo[0]->MonInfo) {
+	struct vendor *ven = &pRADEONEnt->PortInfo[0].MonInfo->vendor;
+	if (ven && ven->prod_id == 0x029a && ven->serial == 0x01010101)
+	    info->ddc_mode = TRUE;
     }
+
     xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 	       "Validating modes on %s head ---------\n",
 	       info->IsSecondary ? "Secondary" : "Primary");
@@ -2219,7 +2223,7 @@ static Bool RADEONPreInitModes(ScrnInfoP
 					  pScrn->display->virtualY,
 					  info->FbMapSize,
 					  LOOKUP_BEST_REFRESH);
-		else if (!info->IsSecondary)
+		else if (!info->IsSecondary && !info->ddc_mode)
 		    modesFound = RADEONValidateFPModes(pScrn, pScrn->display->modes);
 	    }
         }
diff-tree 16ef77df4ebaf5ea13baa82972aaf98e71ac32ee (from 0abce69f0d826a7ca1a41d963cd4730b6e01c145)
Author: Matthias Hopf <mhopf at suse.de>
Date:   Wed Apr 18 17:36:15 2007 +0200

    Set sync polarity restriction flags even for non-"digital separate" monitors.
    
    According to Lisa Wu, this is correct regarding the VESA EEDID standard.
    Bugzilla #10620 (2), original patch by Lisa Wu @ATI

diff --git a/src/radeon_display.c b/src/radeon_display.c
index ac05648..57e752e 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -755,13 +755,11 @@ static void RADEONUpdatePanelSize(ScrnIn
 		info->VSyncWidth = d_timings->v_sync_width;
 		info->VBlank     = d_timings->v_blanking;
                 info->Flags      = (d_timings->interlaced ? V_INTERLACE : 0);
-                if (d_timings->sync == 3) {
-                   switch (d_timings->misc) {
-                   case 0: info->Flags |= V_NHSYNC | V_NVSYNC; break;
-                   case 1: info->Flags |= V_PHSYNC | V_NVSYNC; break;
-                   case 2: info->Flags |= V_NHSYNC | V_PVSYNC; break;
-                   case 3: info->Flags |= V_PHSYNC | V_PVSYNC; break;
-                   }
+                switch (d_timings->misc) {
+                case 0: info->Flags |= V_NHSYNC | V_NVSYNC; break;
+                case 1: info->Flags |= V_PHSYNC | V_NVSYNC; break;
+                case 2: info->Flags |= V_NHSYNC | V_PVSYNC; break;
+                case 3: info->Flags |= V_PHSYNC | V_PVSYNC; break;
                 }
                 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel infos found from DDC detailed: %dx%d\n",
                            info->PanelXRes, info->PanelYRes);
diff --git a/src/radeon_modes.c b/src/radeon_modes.c
index 6b8577e..3d147e2 100644
--- a/src/radeon_modes.c
+++ b/src/radeon_modes.c
@@ -190,13 +190,11 @@ static DisplayModePtr RADEONDDCModes(Scr
 #endif
 	      new->type     |= M_T_DRIVER;
 
-	    if (d_timings->sync == 3) {
-		switch (d_timings->misc) {
-		case 0: new->Flags |= V_NHSYNC | V_NVSYNC; break;
-		case 1: new->Flags |= V_PHSYNC | V_NVSYNC; break;
-		case 2: new->Flags |= V_NHSYNC | V_PVSYNC; break;
-		case 3: new->Flags |= V_PHSYNC | V_PVSYNC; break;
-		}
+	    switch (d_timings->misc) {
+	    case 0: new->Flags |= V_NHSYNC | V_NVSYNC; break;
+	    case 1: new->Flags |= V_PHSYNC | V_NVSYNC; break;
+	    case 2: new->Flags |= V_NHSYNC | V_PVSYNC; break;
+	    case 3: new->Flags |= V_PHSYNC | V_PVSYNC; break;
 	    }
 	    count++;
 
diff-tree 0abce69f0d826a7ca1a41d963cd4730b6e01c145 (from aea801cf9a5ce519a53d6fffd9a3a2e526ec79ea)
Author: Matthias Hopf <mhopf at suse.de>
Date:   Wed Apr 18 17:32:52 2007 +0200

    Fix inconsistent use of Mode lists.
    
    Some scans used to only check every second entry, some stopped at the entry
    before the last entry.
    Bugzilla #10620 (1), original patch by Lisa Wu @ATI

diff --git a/src/radeon_display.c b/src/radeon_display.c
index d661c17..ac05648 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -776,7 +776,7 @@ static void RADEONUpdatePanelSize(ScrnIn
     for (j = 0; j < 8; j++) {
 	if ((info->PanelXRes < ddc->timings2[j].hsize) &&
 	    (info->PanelYRes < ddc->timings2[j].vsize)) {
-	    for (p = pScrn->monitor->Modes; p && p->next; p = p->next->next) {
+	    for (p = pScrn->monitor->Modes; p; p = p->next) {
 		if ((ddc->timings2[j].hsize == p->HDisplay) &&
 		    (ddc->timings2[j].vsize == p->VDisplay)) {
 		    float  refresh =
diff --git a/src/radeon_modes.c b/src/radeon_modes.c
index 372b2ed..6b8577e 100644
--- a/src/radeon_modes.c
+++ b/src/radeon_modes.c
@@ -212,7 +212,7 @@ static DisplayModePtr RADEONDDCModes(Scr
     for (j = 0; j < 8; j++) {
         if (ddc->timings2[j].hsize == 0 || ddc->timings2[j].vsize == 0)
                continue;
-	for (p = pScrn->monitor->Modes; p && p->next; p = p->next) {
+	for (p = pScrn->monitor->Modes; p; p = p->next) {
 	    /* Ignore all double scan modes */
 	    if (p->Flags & V_DBLSCAN)
 		continue;
@@ -248,7 +248,7 @@ static DisplayModePtr RADEONDDCModes(Scr
     tmp = (ddc->timings1.t1 << 8) | ddc->timings1.t2;
     for (j = 0; j < 16; j++) {
 	if (tmp & (1 << j)) {
-	    for (p = pScrn->monitor->Modes; p && p->next; p = p->next) {
+	    for (p = pScrn->monitor->Modes; p; p = p->next) {
 		/* Ignore all double scan modes */
 		if (p->Flags & V_DBLSCAN)
 		    continue;
@@ -560,7 +560,7 @@ int RADEONValidateFPModes(ScrnInfoPtr pS
     }
 
     /* add in all default vesa modes smaller than panel size, used for randr*/
-    for (p = pScrn->monitor->Modes; p && p->next; p = p->next->next) {
+    for (p = pScrn->monitor->Modes; p; p = p->next) {
 	if ((p->HDisplay <= info->PanelXRes) && (p->VDisplay <= info->PanelYRes)) {
 	    tmp = first;
 	    while (tmp) {



More information about the xorg-commit mailing list