summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alex@botch2.(none)>2007-10-03 21:43:08 -0400
committerAlex Deucher <alex@botch2.(none)>2007-10-03 21:43:08 -0400
commit597dffce9bdc200003d0be880235258386a0bdd7 (patch)
tree21af8b3b58fc807bcc18fc8bbd73f415efd9379d
parentcc0c2d8e61600652b1f9cb3dc49db2ef62b1e40d (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.c13
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;
}