summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alex@cube.(none)>2008-02-12 15:35:46 -0500
committerAlex Deucher <alex@cube.(none)>2008-02-12 15:35:46 -0500
commit422d7f441fdbb318d22d44db661ac9bd61387bd2 (patch)
tree24dff225b44bc7b155c1ce9781c71aa2314cd419
parent860f5af75274cb236f536e1da09da6bd9a579530 (diff)
R6xx: when both crtcs are in use make sure they are both enabled
sometimes setting a mode on one crtc can cuase a blank screen on the other. make sure they are both enabled if they should be.
-rw-r--r--src/radeon_crtc.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index d21612a5..3524b753 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -81,14 +81,14 @@ radeon_crtc_dpms(xf86CrtcPtr crtc, int mode)
*/
if ((radeon_crtc->crtc_id == 1) && (mode == DPMSModeOn)) {
if (crtc0->enabled)
- crtc0->funcs->dpms(crtc0, DPMSModeOff);
+ legacy_crtc_dpms(crtc0, DPMSModeOff);
}
legacy_crtc_dpms(crtc, mode);
if ((radeon_crtc->crtc_id == 1) && (mode == DPMSModeOn)) {
if (crtc0->enabled)
- crtc0->funcs->dpms(crtc0, mode);
+ legacy_crtc_dpms(crtc0, mode);
}
}
}
@@ -223,6 +223,20 @@ radeon_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
static void
radeon_crtc_mode_commit(xf86CrtcPtr crtc)
{
+ RADEONInfoPtr info = RADEONPTR(crtc->scrn);
+ RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
+ RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private;
+
+ if (info->ChipFamily >= CHIP_FAMILY_R600) {
+ xf86CrtcPtr other;
+ if (radeon_crtc->crtc_id == 1)
+ other = pRADEONEnt->pCrtc[0];
+ else
+ other = pRADEONEnt->pCrtc[1];
+ if (other->enabled)
+ radeon_crtc_dpms(other, DPMSModeOn);
+ }
+
radeon_crtc_dpms(crtc, DPMSModeOn);
}