diff --git a/src/i830_display.c b/src/i830_display.c index d16871d..56efa17 100644 --- a/src/i830_display.c +++ b/src/i830_display.c @@ -1033,6 +1033,12 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, if (IS_I9XX(pI830)) { refclk = 96000; + /* for test only: enable SSC clock (100MHz) if dual channel */ + if (is_lvds && + ((INREG(LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP)) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "enable SSC clock for LVDS\n"); + refclk = 100000; + } } else { refclk = 48000; } @@ -1188,6 +1194,14 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode, { CARD32 lvds = INREG(LVDS); + /* for test only: enable SSC clock (100MHz) if dual channel */ + if ((lvds & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP) { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "enable SSC clock for LVDS, setting dpll_b\n"); + dpll &= ~PLL_REF_INPUT_MASK; + dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN; + } + if (dpll & DPLL_VCO_ENABLE) { OUTREG(fp_reg, fp);