summaryrefslogtreecommitdiff
path: root/src/radeon_display.c
diff options
context:
space:
mode:
authorAlex Deucher <alex@t41p.(none)>2006-10-15 16:40:08 -0400
committerAlex Deucher <alex@t41p.(none)>2006-10-15 16:40:08 -0400
commit457178f418983041ea59df703a17513a47d17044 (patch)
treedaab89713728c0868b686caee6a1936aabd0bd29 /src/radeon_display.c
parent3fb3f410931a13542fdd4c51c4c9ecada7b37d76 (diff)
Disable all ouputs on initial mode set. The ones we want will get
enabled by RADEONEnableDisplay().
Diffstat (limited to 'src/radeon_display.c')
-rw-r--r--src/radeon_display.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/radeon_display.c b/src/radeon_display.c
index de44b389..58282ef5 100644
--- a/src/radeon_display.c
+++ b/src/radeon_display.c
@@ -1434,6 +1434,59 @@ static void RADEONDacPowerSet(ScrnInfoPtr pScrn, Bool IsOn, Bool IsPrimaryDAC)
}
}
+/* disable all ouputs before enabling the ones we want */
+void RADEONDisableDisplays(ScrnInfoPtr pScrn) {
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char * RADEONMMIO = info->MMIO;
+ unsigned long tmp, tmpPixclksCntl;
+
+
+ /* primary DAC */
+ tmp = INREG(RADEON_CRTC_EXT_CNTL);
+ tmp &= ~RADEON_CRTC_CRT_ON;
+ OUTREG(RADEON_CRTC_EXT_CNTL, tmp);
+ RADEONDacPowerSet(pScrn, FALSE, TRUE);
+
+ /* Secondary DAC */
+ if (info->ChipFamily == CHIP_FAMILY_R200) {
+ tmp = INREG(RADEON_FP2_GEN_CNTL);
+ tmp &= ~(RADEON_FP2_ON | RADEON_FP2_DVO_EN);
+ OUTREG(RADEON_FP2_GEN_CNTL, tmp);
+ } else {
+ tmp = INREG(RADEON_CRTC2_GEN_CNTL);
+ tmp &= ~RADEON_CRTC2_CRT2_ON;
+ OUTREG(RADEON_CRTC2_GEN_CNTL, tmp);
+ }
+ RADEONDacPowerSet(pScrn, FALSE, FALSE);
+
+ /* FP 1 */
+ tmp = INREG(RADEON_FP_GEN_CNTL);
+ tmp &= ~(RADEON_FP_FPON | RADEON_FP_TMDS_EN);
+ OUTREG(RADEON_FP_GEN_CNTL, tmp);
+
+ /* FP 2 */
+ tmp = INREG(RADEON_FP2_GEN_CNTL);
+ tmp &= ~(RADEON_FP2_ON | RADEON_FP2_DVO_EN);
+ OUTREG(RADEON_FP2_GEN_CNTL, tmp);
+
+ /* LVDS */
+ tmpPixclksCntl = INPLL(pScrn, RADEON_PIXCLKS_CNTL);
+ if (info->IsMobility || info->IsIGP) {
+ /* Asic bug, when turning off LVDS_ON, we have to make sure
+ RADEON_PIXCLK_LVDS_ALWAYS_ON bit is off
+ */
+ OUTPLLP(pScrn, RADEON_PIXCLKS_CNTL, 0, ~RADEON_PIXCLK_LVDS_ALWAYS_ONb);
+ }
+ tmp = INREG(RADEON_LVDS_GEN_CNTL);
+ tmp |= (RADEON_LVDS_ON | RADEON_LVDS_DISPLAY_DIS);
+ tmp &= ~(RADEON_LVDS_BLON);
+ OUTREG(RADEON_LVDS_GEN_CNTL, tmp);
+ if (info->IsMobility || info->IsIGP) {
+ OUTPLL(pScrn, RADEON_PIXCLKS_CNTL, tmpPixclksCntl);
+ }
+
+}
+
/* This is to be used enable/disable displays dynamically */
void RADEONEnableDisplay(ScrnInfoPtr pScrn, RADEONController* pCRTC, BOOL bEnable)
{