diff options
author | Alex Deucher <alex@t41p.hsd1.va.comcast.net> | 2007-10-16 18:54:28 -0400 |
---|---|---|
committer | Alex Deucher <alex@t41p.hsd1.va.comcast.net> | 2007-10-16 18:54:28 -0400 |
commit | f2eb5c1cc69a4f7b0754ec6b2efde4fa1650ab6d (patch) | |
tree | acba02a79530a87cea7be5c46ce6c9e3e906b596 | |
parent | 93561688087493fccb7ac387d728feec61212180 (diff) |
RADEON: finish fixing LVDS/RMX
For panels, both the mode and crtc values need to be updated based
on the native mode timing. This shoudl fix any remaining problems
with RMX.
-rw-r--r-- | src/radeon_output.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/radeon_output.c b/src/radeon_output.c index e2f26e75..6acbb53e 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -777,15 +777,25 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, } /* update timing for LVDS and DFP if RMX is active */ - if (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; + if ((radeon_output->MonType == MT_LCD) || (radeon_output->Flags & RADEON_USE_RMX)) { + /* set to the panel's native mode */ + adjusted_mode->HTotal = radeon_output->PanelXRes + radeon_output->HBlank; + adjusted_mode->HSyncStart = radeon_output->PanelXRes + radeon_output->HOverPlus; + adjusted_mode->HSyncEnd = adjusted_mode->HSyncStart + radeon_output->HSyncWidth; + adjusted_mode->VTotal = radeon_output->PanelYRes + radeon_output->VBlank; + adjusted_mode->VSyncStart = radeon_output->PanelYRes + radeon_output->VOverPlus; + adjusted_mode->VSyncEnd = adjusted_mode->VSyncStart + radeon_output->VSyncWidth; + /* update crtc values */ + xf86SetModeCrtc(adjusted_mode, INTERLACE_HALVE_V); + /* adjust crtc values */ + adjusted_mode->CrtcHTotal = adjusted_mode->CrtcHDisplay + radeon_output->HBlank; + adjusted_mode->CrtcHSyncStart = adjusted_mode->CrtcHDisplay + radeon_output->HOverPlus; + adjusted_mode->CrtcHSyncEnd = adjusted_mode->CrtcHSyncStart + radeon_output->HSyncWidth; + adjusted_mode->CrtcVTotal = adjusted_mode->CrtcVDisplay + radeon_output->VBlank; + adjusted_mode->CrtcVSyncStart = adjusted_mode->CrtcVDisplay + radeon_output->VOverPlus; + adjusted_mode->CrtcVSyncEnd = adjusted_mode->CrtcVSyncStart + radeon_output->VSyncWidth; + adjusted_mode->Clock = radeon_output->DotClock; + adjusted_mode->Flags = radeon_output->Flags; } return TRUE; |