diff options
author | Henry Zhao <henryz@localhost.localdomain> | 2006-08-31 13:27:45 -0700 |
---|---|---|
committer | Henry Zhao <henryz@localhost.localdomain> | 2006-08-31 13:27:45 -0700 |
commit | caaed927a07ffbac68b08246185ef93c1e7bb98c (patch) | |
tree | aea16f7c06f4aeea62f2cd909c6970b4b991a26e /src/radeon_mergedfb.c | |
parent | 6d2028b84ff2b82c849b74776258f8e52c952e36 (diff) |
* [ Bug 6966 ] large negative refresh rates reported
* [ Bug 6309 ] radeon/r128 fails to read hsync/vsync rates when rang
* descriptor is missing
* [ Bug 5473 ] Blank screen with Radeon Mobility X700 (Acer Ferrari 4005)
* Reboot should not be needed for external CRT to function when connected
later on Ferrari 4000
* Modes need to be sorted, and sorted correctly
* Provide all resolutions (instead only the largest one) in MergedFB clone
mode without config file
* Bump up clock rate for ES1000 to allow higher resolution
Diffstat (limited to 'src/radeon_mergedfb.c')
-rw-r--r-- | src/radeon_mergedfb.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/radeon_mergedfb.c b/src/radeon_mergedfb.c index 313dda24..f78c8bb3 100644 --- a/src/radeon_mergedfb.c +++ b/src/radeon_mergedfb.c @@ -212,6 +212,12 @@ RADEONCopyModeNLink(ScrnInfoPtr pScrn, DisplayModePtr dest, mode->VSyncEnd += dy; mode->VTotal += dy; + /* This is needed for not generating negative refesh rates in xrandr with the + faked DotClock below + */ + if (!(mode->VRefresh)) + mode->VRefresh = mode->Clock * 1000.0 / mode->HTotal / mode->VTotal; + /* Provide a sophisticated fake DotClock in order to trick the vidmode * extension to allow selecting among a number of modes whose merged result * looks identical but consists of different modes for CRT1 and CRT2 @@ -531,14 +537,26 @@ RADEONGenerateModeList(ScrnInfoPtr pScrn, char* str, if(str != NULL) { return(RADEONGenerateModeListFromMetaModes(pScrn, str, i, j, srel)); } else { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "No MetaModes given, linking %s modes by default\n", - (srel == radeonClone) ? "largest common" : - (info->NonRect ? + if (srel == radeonClone ) { + DisplayModePtr p, q, result = NULL; + + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Clone mode, list all common modes\n"); + for (p = i; p->next != i; p = p->next) + for (q = j; q->next != j; q = q->next) + if ((p->HDisplay == q->HDisplay) && + (p->VDisplay == q->VDisplay)) + result = RADEONCopyModeNLink(pScrn, result, p, q, srel); + return result; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "No MetaModes given, linking %s modes by default\n", + (info->NonRect ? (((srel == radeonLeftOf) || (srel == radeonRightOf)) ? "widest" : "tallest") : (((srel == radeonLeftOf) || (srel == radeonRightOf)) ? "widest common" : "tallest common")) ); - return(RADEONGenerateModeListFromLargestModes(pScrn, i, j, srel)); + return(RADEONGenerateModeListFromLargestModes(pScrn, i, j, srel)); + } } } |