summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alex@samba.(none)>2008-03-08 16:16:45 -0500
committerAlex Deucher <alex@samba.(none)>2008-03-08 16:16:45 -0500
commit1d3fa2ee9e445484e640a2ab8ac13da9e95a5ecf (patch)
tree00f10e6357e56e8f4c6b7ae8f6a1fef15e9036a8
parent1dc21b8b9b3e1fa6e22d90bacc7f2f58b3a45277 (diff)
R128: fixups for dac regs
-rw-r--r--src/legacy_output.c36
-rw-r--r--src/radeon_reg.h1
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)