As the experimental version needs so many changes, how about the attached patch to fix the issue for lenny?
It modifies nothing but adds another RADEON_CLOCK_CNTL_INDEX to 0 setting, like it is already there for CHIP_FAMILY_RV410, just more limited (not within RADEONRestoreLVDSRegisters but only after one specific call of it and with more guards) and changes nothing else. Thanks in advance, Bernhard R. Link
--- xserver-xorg-video-ati-6.9.0.orig/src/legacy_output.c +++ xserver-xorg-video-ati-6.9.0/src/legacy_output.c @@ -153,6 +153,15 @@ } +static void +RADEONSelDiv0(ScrnInfoPtr pScrn) +{ + RADEONInfoPtr info = RADEONPTR(pScrn); + unsigned char *RADEONMMIO = info->MMIO; + + OUTREG(RADEON_CLOCK_CNTL_INDEX, 0); +} + /* Write LVDS registers */ void RADEONRestoreLVDSRegisters(ScrnInfoPtr pScrn, RADEONSavePtr restore) @@ -165,7 +174,7 @@ /*OUTREG(RADEON_LVDS_PLL_CNTL, restore->lvds_pll_cntl);*/ if (info->ChipFamily == CHIP_FAMILY_RV410) { - OUTREG(RADEON_CLOCK_CNTL_INDEX, 0); + RADEONSelDiv0(pScrn); } } @@ -1417,6 +1426,8 @@ case MT_LCD: ErrorF("restore LVDS\n"); RADEONRestoreLVDSRegisters(pScrn, info->ModeReg); + if (radeon_crtc->crtc_id == 0 && info->ChipFamily == CHIP_FAMILY_RS480) + RADEONSelDiv0(pScrn); break; case MT_DFP: if (radeon_output->TMDSType == TMDS_INT) {