diff options
author | Alex Deucher <alex@samba.(none)> | 2008-03-08 16:16:45 -0500 |
---|---|---|
committer | Alex Deucher <alex@samba.(none)> | 2008-03-08 16:16:45 -0500 |
commit | 1d3fa2ee9e445484e640a2ab8ac13da9e95a5ecf (patch) | |
tree | 00f10e6357e56e8f4c6b7ae8f6a1fef15e9036a8 | |
parent | 1dc21b8b9b3e1fa6e22d90bacc7f2f58b3a45277 (diff) |
R128: fixups for dac regs
-rw-r--r-- | src/legacy_output.c | 36 | ||||
-rw-r--r-- | src/radeon_reg.h | 1 |
2 files changed, 25 insertions, 12 deletions
diff --git a/src/legacy_output.c b/src/legacy_output.c index 0de13df..37a7ea6 100644 --- a/src/legacy_output.c +++ b/src/legacy_output.c @@ -68,11 +68,14 @@ RADEONRestoreDACRegisters(ScrnInfoPtr pScrn, RADEON_DAC_RANGE_CNTL | RADEON_DAC_BLANKING); + if (IS_R128) + return; + OUTREG(RADEON_DAC_CNTL2, restore->dac2_cntl); if ((info->ChipFamily != CHIP_FAMILY_RADEON) && - (info->ChipFamily != CHIP_FAMILY_R200)) - OUTREG (RADEON_TV_DAC_CNTL, restore->tv_dac_cntl); + (info->ChipFamily != CHIP_FAMILY_R200)) + OUTREG (RADEON_TV_DAC_CNTL, restore->tv_dac_cntl); OUTREG(RADEON_DISP_OUTPUT_CNTL, restore->disp_output_cntl); @@ -166,6 +169,8 @@ RADEONSaveDACRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save) unsigned char *RADEONMMIO = info->MMIO; save->dac_cntl = INREG(RADEON_DAC_CNTL); + if (IS_R128) + return; save->dac2_cntl = INREG(RADEON_DAC_CNTL2); save->tv_dac_cntl = INREG(RADEON_TV_DAC_CNTL); save->disp_output_cntl = INREG(RADEON_DISP_OUTPUT_CNTL); @@ -1152,24 +1157,31 @@ RADEONInitDACRegisters(xf86OutputPtr output, RADEONSavePtr save, if (IsPrimary) { if ((info->ChipFamily == CHIP_FAMILY_R200) || IS_R300_VARIANT) { - save->disp_output_cntl = info->SavedReg->disp_output_cntl & + save->disp_output_cntl = info->SavedReg->disp_output_cntl & ~RADEON_DISP_DAC_SOURCE_MASK; - } else { - save->dac2_cntl = info->SavedReg->dac2_cntl & ~(RADEON_DAC2_DAC_CLK_SEL); - } + } else { + save->dac2_cntl = info->SavedReg->dac2_cntl & ~(RADEON_DAC2_DAC_CLK_SEL); + } } else { - if ((info->ChipFamily == CHIP_FAMILY_R200) || IS_R300_VARIANT) { - save->disp_output_cntl = info->SavedReg->disp_output_cntl & + if ((info->ChipFamily == CHIP_FAMILY_R200) || IS_R300_VARIANT) { + save->disp_output_cntl = info->SavedReg->disp_output_cntl & ~RADEON_DISP_DAC_SOURCE_MASK; - save->disp_output_cntl |= RADEON_DISP_DAC_SOURCE_CRTC2; - } else { - save->dac2_cntl = info->SavedReg->dac2_cntl | RADEON_DAC2_DAC_CLK_SEL; - } + save->disp_output_cntl |= RADEON_DISP_DAC_SOURCE_CRTC2; + } else { + save->dac2_cntl = info->SavedReg->dac2_cntl | RADEON_DAC2_DAC_CLK_SEL; + } } save->dac_cntl = (RADEON_DAC_MASK_ALL | RADEON_DAC_VGA_ADR_EN | (info->dac6bits ? 0 : RADEON_DAC_8BIT_EN)); + if (IS_R128) { + if (IsPrimary) + save->dac_cntl &= ~R128_DAC_CLK_SEL; + else + save->dac_cntl |= R128_DAC_CLK_SEL; + } + save->dac_macro_cntl = info->SavedReg->dac_macro_cntl; } diff --git a/src/radeon_reg.h b/src/radeon_reg.h index 46b8dd5..4ebb247 100644 --- a/src/radeon_reg.h +++ b/src/radeon_reg.h @@ -528,6 +528,7 @@ # define RADEON_DAC_RANGE_CNTL_MASK 0x03 # define RADEON_DAC_BLANKING (1 << 2) # define RADEON_DAC_CMP_EN (1 << 3) +# define R128_DAC_CLK_SEL (1 << 4) # define RADEON_DAC_CMP_OUTPUT (1 << 7) # define RADEON_DAC_8BIT_EN (1 << 8) # define RADEON_DAC_TVO_EN (1 << 10) |