diff options
author | Alex Deucher <alex@t41p.hsd1.va.comcast.net> | 2007-11-15 22:56:09 -0500 |
---|---|---|
committer | Alex Deucher <alex@t41p.hsd1.va.comcast.net> | 2007-11-15 22:56:09 -0500 |
commit | 49055d8aff91ff12186feaf5343c8fd2f96bcba0 (patch) | |
tree | bbbb375a338f5923140619ccee34d579f31a064f | |
parent | 821acf38b716ab87c3d07263d6e4a139fe54803f (diff) |
RADEON: set proper defaults for tv dac BGADJ/DACADJ
we should get these values from the bios tables, but for now use
some reasonable defaults. This should fix the washed out color
problems on bugs 1082 and 12844.
-rw-r--r-- | src/radeon_output.c | 15 | ||||
-rw-r--r-- | src/radeon_tv.c | 8 |
2 files changed, 14 insertions, 9 deletions
diff --git a/src/radeon_output.c b/src/radeon_output.c index a5e07d7d..54c27cd2 100644 --- a/src/radeon_output.c +++ b/src/radeon_output.c @@ -1039,11 +1039,12 @@ static void RADEONInitDACRegisters(xf86OutputPtr output, RADEONSavePtr save, save->dac_macro_cntl = info->SavedReg.dac_macro_cntl; } -/* XXX: fix me */ static void -RADEONInitTvDacCntl(ScrnInfoPtr pScrn, RADEONSavePtr save) +RADEONInitTvDacCntl(xf86OutputPtr output, RADEONSavePtr save) { + ScrnInfoPtr pScrn = output->scrn; RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONOutputPrivatePtr radeon_output = output->driver_private; if (info->ChipFamily == CHIP_FAMILY_R420 || info->ChipFamily == CHIP_FAMILY_RV410) { @@ -1064,10 +1065,11 @@ RADEONInitTvDacCntl(ScrnInfoPtr pScrn, RADEONSavePtr save) RADEON_TV_DAC_GDACPD | RADEON_TV_DAC_GDACPD); } - /* FIXME: doesn't make sense, this just replaces the previous value... */ + save->tv_dac_cntl |= (RADEON_TV_DAC_NBLANK | - RADEON_TV_DAC_NHOLD | - RADEON_TV_DAC_STD_PS2); + RADEON_TV_DAC_NHOLD | + RADEON_TV_DAC_STD_PS2 | + radeon_output->tv_dac_adj); } @@ -1078,7 +1080,7 @@ static void RADEONInitDAC2Registers(xf86OutputPtr output, RADEONSavePtr save, RADEONInfoPtr info = RADEONPTR(pScrn); /*0x0028023;*/ - RADEONInitTvDacCntl(pScrn, save); + RADEONInitTvDacCntl(output, save); if (IS_R300_VARIANT) save->gpiopad_a = info->SavedReg.gpiopad_a | 1; @@ -2627,6 +2629,7 @@ void RADEONInitConnector(xf86OutputPtr output) if (radeon_output->type == OUTPUT_STV || radeon_output->type == OUTPUT_CTV) { RADEONGetTVInfo(output); + RADEONGetTVDacAdjInfo(output); } if (radeon_output->DACType == DAC_TVDAC) { diff --git a/src/radeon_tv.c b/src/radeon_tv.c index 3a26a0a7..2a8873c8 100644 --- a/src/radeon_tv.c +++ b/src/radeon_tv.c @@ -434,7 +434,7 @@ void RADEONInitTVRegisters(xf86OutputPtr output, RADEONSavePtr save, save->tv_vscaler_cntl2 = ((save->tv_vscaler_cntl2 & 0x00fffff0) | (0x10 << 24) - | RADEON_DITHER_MODE + | RADEON_DITHER_MODE | RADEON_Y_OUTPUT_DITHER_EN | RADEON_UV_OUTPUT_DITHER_EN | RADEON_UV_TO_BUF_DITHER_EN); @@ -444,10 +444,12 @@ void RADEONInitTVRegisters(xf86OutputPtr output, RADEONSavePtr save, tmp = (tmp << RADEON_UV_OUTPUT_POST_SCALE_SHIFT) | 0x000b0000; save->tv_timing_cntl = tmp; - save->tv_dac_cntl = RADEON_TV_DAC_NBLANK | RADEON_TV_DAC_NHOLD | (8 << 16) | (6 << 20); + save->tv_dac_cntl = (RADEON_TV_DAC_NBLANK | + RADEON_TV_DAC_NHOLD | + radeon_output->tv_dac_adj /*(8 << 16) | (6 << 20)*/); if (radeon_output->tvStd == TV_STD_NTSC || - radeon_output->tvStd == TV_STD_NTSC_J) + radeon_output->tvStd == TV_STD_NTSC_J) save->tv_dac_cntl |= RADEON_TV_DAC_STD_NTSC; else save->tv_dac_cntl |= RADEON_TV_DAC_STD_PAL; |