diff options
author | Alex Deucher <alex@cube.(none)> | 2008-02-28 14:29:30 -0500 |
---|---|---|
committer | Alex Deucher <alex@cube.(none)> | 2008-02-28 14:29:30 -0500 |
commit | 46547ae8bdbc5c10f1fd028b95ec4c5c31a5b318 (patch) | |
tree | 64e3a4cfed8158bc54013244756e2f6bf5db1d93 /src/radeon_driver.c | |
parent | 72a53d6f20ac29b3baddb7d8af04f19b76d2e04f (diff) |
AVIVO: disable dithering on DFPs
This should fix the color banding some people have noticed.
Also save/restore DDIA regs on RS6xx
Diffstat (limited to 'src/radeon_driver.c')
-rw-r--r-- | src/radeon_driver.c | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/src/radeon_driver.c b/src/radeon_driver.c index 5cf8d511..e9c24af7 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -4177,20 +4177,29 @@ avivo_save(ScrnInfoPtr pScrn, RADEONSavePtr save) state->tmds2.data_sync = INREG(AVIVO_LVTMA_DATA_SYNCHRONIZATION); if (info->ChipFamily >= CHIP_FAMILY_R600) { - state->tmds2.transmitter_enable = INREG(R600_LVTMA_TRANSMITTER_ENABLE); - state->tmds2.transmitter_cntl = INREG(R600_LVTMA_TRANSMITTER_CONTROL); - state->lvtma_pwrseq_cntl = INREG(R600_LVTMA_PWRSEQ_CNTL); - state->lvtma_pwrseq_state = INREG(R600_LVTMA_PWRSEQ_STATE); + state->tmds2.transmitter_enable = INREG(R600_LVTMA_TRANSMITTER_ENABLE); + state->tmds2.transmitter_cntl = INREG(R600_LVTMA_TRANSMITTER_CONTROL); + state->lvtma_pwrseq_cntl = INREG(R600_LVTMA_PWRSEQ_CNTL); + state->lvtma_pwrseq_state = INREG(R600_LVTMA_PWRSEQ_STATE); } else { - state->tmds2.transmitter_enable = INREG(R500_LVTMA_TRANSMITTER_ENABLE); - state->tmds2.transmitter_cntl = INREG(R500_LVTMA_TRANSMITTER_CONTROL); - state->lvtma_pwrseq_cntl = INREG(R500_LVTMA_PWRSEQ_CNTL); - state->lvtma_pwrseq_state = INREG(R500_LVTMA_PWRSEQ_STATE); + state->tmds2.transmitter_enable = INREG(R500_LVTMA_TRANSMITTER_ENABLE); + state->tmds2.transmitter_cntl = INREG(R500_LVTMA_TRANSMITTER_CONTROL); + state->lvtma_pwrseq_cntl = INREG(R500_LVTMA_PWRSEQ_CNTL); + state->lvtma_pwrseq_state = INREG(R500_LVTMA_PWRSEQ_STATE); + } + + if (info->IsIGP) { + int i, j = 0; + /* save DDIA regs */ + for (i = 0x7200; i <= 0x7290; i += 4) { + state->ddia[j] = INREG(i); + j++; + } } if (state->crtc1.control & AVIVO_CRTC_EN) info->crtc_on = TRUE; - + if (state->crtc2.control & AVIVO_CRTC_EN) info->crtc2_on = TRUE; @@ -4343,12 +4352,20 @@ avivo_restore(ScrnInfoPtr pScrn, RADEONSavePtr restore) OUTREG(R500_LVTMA_PWRSEQ_STATE, state->lvtma_pwrseq_state); } + if (info->IsIGP) { + int i, j = 0; + for (i = 0x7200; i <= 0x7290; i =+ 4) { + OUTREG(i, state->ddia[j]); + j++; + } + } + OUTREG(AVIVO_D1VGA_CONTROL, state->vga1_cntl); OUTREG(AVIVO_D2VGA_CONTROL, state->vga2_cntl); } void avivo_restore_vga_regs(ScrnInfoPtr pScrn, RADEONSavePtr restore) -{ +{ RADEONInfoPtr info = RADEONPTR(pScrn); unsigned char *RADEONMMIO = info->MMIO; struct avivo_state *state = &restore->avivo; |