diff options
author | Alex Deucher <alex@botch2.(none)> | 2007-10-03 21:43:08 -0400 |
---|---|---|
committer | Alex Deucher <alex@botch2.(none)> | 2007-10-03 21:43:08 -0400 |
commit | 597dffce9bdc200003d0be880235258386a0bdd7 (patch) | |
tree | 21af8b3b58fc807bcc18fc8bbd73f415efd9379d | |
parent | cc0c2d8e61600652b1f9cb3dc49db2ef62b1e40d (diff) |
RADEON: final fix for RMX/LVDS
It seems that on quite a few laptops the LVDS H/V timing
from the bios tables are way off or just doesn't work period.
Either we are using it wrong or we need some additional checks
when we parse it. Only the dot clock seems to really matter,
so use cvt modes and update the dotclock. This seems to work
correctly in all cases.
-rw-r--r-- | src/radeon_output.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/src/radeon_output.c b/src/radeon_output.c index 27c6928..3f8b772 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -750,6 +750,8 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, { RADEONOutputPrivatePtr radeon_output = output->driver_private; + radeon_output->Flags &= ~RADEON_USE_RMX; + /* decide if we are using RMX */ if ((radeon_output->MonType == MT_LCD || radeon_output->MonType == MT_DFP) && radeon_output->rmx_type != RMX_OFF) { @@ -760,20 +762,13 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, if (mode->HDisplay < radeon_output->PanelXRes || mode->VDisplay < radeon_output->PanelYRes) radeon_output->Flags |= RADEON_USE_RMX; - } else - radeon_output->Flags &= ~RADEON_USE_RMX; + } } - /* update crtc timing for LVDS always and DFP if RMX is active */ + /* update clock for LVDS always and DFP if RMX is active */ if ((radeon_output->MonType == MT_LCD) || ((radeon_output->MonType == MT_DFP) && (radeon_output->Flags & RADEON_USE_RMX))) { - adjusted_mode->CrtcHTotal = mode->CrtcHDisplay + radeon_output->HBlank; - adjusted_mode->CrtcHSyncStart = mode->CrtcHDisplay + radeon_output->HOverPlus; - adjusted_mode->CrtcHSyncEnd = mode->CrtcHSyncStart + radeon_output->HSyncWidth; - adjusted_mode->CrtcVTotal = mode->CrtcVDisplay + radeon_output->VBlank; - adjusted_mode->CrtcVSyncStart = mode->CrtcVDisplay + radeon_output->VOverPlus; - adjusted_mode->CrtcVSyncEnd = mode->CrtcVSyncStart + radeon_output->VSyncWidth; adjusted_mode->Clock = radeon_output->DotClock; adjusted_mode->Flags = radeon_output->Flags; } |