--- src/radeon.h~ Tue Oct 3 16:49:13 2006 +++ src/radeon.h Sun Aug 26 10:09:21 2007 @@ -144,6 +144,9 @@ OPTION_REVERSE_DDC, OPTION_LVDS_PROBE_PLL, OPTION_ACCELMETHOD, +#ifdef __powerpc__ + OPTION_IBOOKHACKS, +#endif OPTION_CONSTANTDPI } RADEONOpts; $NetBSD: patch-aa,v 1.1 2007/04/10 19:10:55 joerg Exp $ --- src/radeon_driver.c.orig 2007-08-26 10:10:48.000000000 +0200 +++ src/radeon_driver.c @@ -211,6 +211,9 @@ static const OptionInfoRec RADEONOptions { OPTION_LVDS_PROBE_PLL, "LVDSProbePLL", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_ACCELMETHOD, "AccelMethod", OPTV_STRING, {0}, FALSE }, { OPTION_CONSTANTDPI, "ConstantDPI", OPTV_BOOLEAN, {0}, FALSE }, +#ifdef __powerpc__ + { OPTION_IBOOKHACKS, "iBookHacks", OPTV_BOOLEAN, {0}, FALSE }, +#endif { -1, NULL, OPTV_NONE, {0}, FALSE } }; @@ -6688,7 +6691,23 @@ static void RADEONRestorePLLRegisters(Sc RADEONInfoPtr info = RADEONPTR(pScrn); unsigned char *RADEONMMIO = info->MMIO; + /* + * Never do it on Apple iBook to avoid a blank screen. + */ +#ifdef __powerpc__ + if (xf86ReturnOptValBool(info->Options, OPTION_IBOOKHACKS, FALSE)) + return; +#endif + if (info->IsMobility) { + /* + * Never do it on Apple iBook to avoid a blank screen. + */ +#ifdef __powerpc__ + if (xf86ReturnOptValBool(info->Options, OPTION_IBOOKHACKS, FALSE)) + return; +#endif + /* A temporal workaround for the occational blanking on certain laptop panels. This appears to related to the PLL divider registers (fail to lock?). It occurs even when all dividers are the same with their old settings. @@ -8533,7 +8552,16 @@ static void RADEONInitPLLRegisters(ScrnI save->post_div)); save->ppll_ref_div = pll->reference_div; - save->ppll_div_3 = (save->feedback_div | (post_div->bitvalue << 16)); + + /* + * on iBooks the LCD pannel needs tweaked PLL timings + */ +#ifdef __powerpc__ + if (xf86ReturnOptValBool(info->Options, OPTION_IBOOKHACKS, FALSE)) + save->ppll_div_3 = 0x000600ad; + else +#endif + save->ppll_div_3 = (save->feedback_div | (post_div->bitvalue << 16)); save->htotal_cntl = 0; }