diff --git a/src/radeon_mergedfb.c b/src/radeon_mergedfb.c index 313dda2..98d8761 100644 --- a/src/radeon_mergedfb.c +++ b/src/radeon_mergedfb.c @@ -218,6 +218,12 @@ RADEONCopyModeNLink(ScrnInfoPtr pScrn, D */ mode->Clock = (((i->Clock >> 3) + i->HTotal) << 16) | ((j->Clock >> 2) + j->HTotal); mode->Clock ^= ((i->VTotal << 19) | (j->VTotal << 3)); + /* Make sure that the conversion from dotclock to refresh rates in + * xf86RandR.c/xf86RandRModeRefresh() gives <2^15 since xrandr represents + * refresh rate as short. Also, avoid blind trunctaion in the conversion. + */ + mode->Clock %= 32749; /* largest prime smaller than 2^15 */ + mode->Clock = (int)(mode->Clock * 0.001 * mode->HTotal * mode->VTotal); if( ((mode->HDisplay * ((pScrn->bitsPerPixel + 7) / 8) * mode->VDisplay) > (pScrn->videoRam * 1024)) ||