diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-04-16 10:41:28 -0400 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2009-05-08 12:05:13 -0400 |
commit | 36d6b5f3edbb30b273aceb2452265bb7ce1ab9e0 (patch) | |
tree | 5fb1ecc9aa5cb18baca0cf390a7b054b9314cea1 /src | |
parent | f3b0701ac78c08b8e26145bb697e03d19d742242 (diff) |
Revert "DCE3/3.2: cleanup dpms after previous changes"
This reverts commit f8c7d6a6162196a743f6885ecaf63ba50de1722a.
This is apparently still needed for some setups, however, I can't
reproduce this locally anymore.
Diffstat (limited to 'src')
-rw-r--r-- | src/radeon_crtc.c | 5 | ||||
-rw-r--r-- | src/radeon_output.c | 47 |
2 files changed, 47 insertions, 5 deletions
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c index 4b508ce0..cd0d55e8 100644 --- a/src/radeon_crtc.c +++ b/src/radeon_crtc.c @@ -115,9 +115,6 @@ radeon_crtc_mode_prepare(xf86CrtcPtr crtc) { RADEONCrtcPrivatePtr radeon_crtc = crtc->driver_private; - if (radeon_crtc->initialized) - radeon_crtc_dpms(crtc, DPMSModeOff); - if (radeon_crtc->enabled) crtc->funcs->hide_cursor(crtc); } @@ -286,8 +283,6 @@ radeon_crtc_mode_commit(xf86CrtcPtr crtc) { if (crtc->scrn->pScreen != NULL) xf86_reload_cursors(crtc->scrn->pScreen); - - radeon_crtc_dpms(crtc, DPMSModeOn); } void diff --git a/src/radeon_output.c b/src/radeon_output.c index ddb0fb1a..a25517ab 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -520,8 +520,32 @@ radeon_mode_fixup(xf86OutputPtr output, DisplayModePtr mode, static void radeon_mode_prepare(xf86OutputPtr output) { + RADEONInfoPtr info = RADEONPTR(output->scrn); + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn); + int o; + + for (o = 0; o < config->num_output; o++) { + xf86OutputPtr loop_output = config->output[o]; + if (loop_output == output) + continue; + else if (loop_output->crtc) { + xf86CrtcPtr other_crtc = loop_output->crtc; + RADEONCrtcPrivatePtr other_radeon_crtc = other_crtc->driver_private; + if (other_crtc->enabled) { + if (other_radeon_crtc->initialized) { + radeon_crtc_dpms(other_crtc, DPMSModeOff); + if (IS_AVIVO_VARIANT || info->r4xx_atom) + atombios_lock_crtc(info->atomBIOS, other_radeon_crtc->crtc_id, 1); + radeon_dpms(loop_output, DPMSModeOff); + } + } + } + } + radeon_bios_output_lock(output, TRUE); radeon_dpms(output, DPMSModeOff); + radeon_crtc_dpms(output->crtc, DPMSModeOff); + } static void @@ -541,7 +565,30 @@ radeon_mode_set(xf86OutputPtr output, DisplayModePtr mode, static void radeon_mode_commit(xf86OutputPtr output) { + RADEONInfoPtr info = RADEONPTR(output->scrn); + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn); + int o; + + for (o = 0; o < config->num_output; o++) { + xf86OutputPtr loop_output = config->output[o]; + if (loop_output == output) + continue; + else if (loop_output->crtc) { + xf86CrtcPtr other_crtc = loop_output->crtc; + RADEONCrtcPrivatePtr other_radeon_crtc = other_crtc->driver_private; + if (other_crtc->enabled) { + if (other_radeon_crtc->initialized) { + radeon_crtc_dpms(other_crtc, DPMSModeOn); + if (IS_AVIVO_VARIANT || info->r4xx_atom) + atombios_lock_crtc(info->atomBIOS, other_radeon_crtc->crtc_id, 0); + radeon_dpms(loop_output, DPMSModeOn); + } + } + } + } + radeon_dpms(output, DPMSModeOn); + radeon_crtc_dpms(output->crtc, DPMSModeOn); radeon_bios_output_lock(output, FALSE); } |