Hi!

I thought this patch would be applied on the new upload, but it seems it
wasn't, I have reworked it again so that it applies well against the new
packages and I'm sending it again to see if we have better luck next time
;-)

Regards...
-- 
Manty/BestiaTester -> http://manty.net

diff -r -u xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 
xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
--- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c     
2004-04-30 14:04:58.000000000 +0200
+++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c  2004-04-30 
13:59:44.000000000 +0200
@@ -149,7 +149,8 @@
     OPTION_CLONE_HSYNC,
     OPTION_CLONE_VREFRESH,
     OPTION_FBDEV,
-    OPTION_VIDEO_KEY
+    OPTION_VIDEO_KEY,
+    OPTION_MIN_DOTCLOCK
 } RADEONOpts;
 
 const OptionInfoRec RADEONOptions[] = {
@@ -180,6 +181,7 @@
     { OPTION_CLONE_VREFRESH, "CloneVRefresh",    OPTV_ANYSTR,  {0}, FALSE },
     { OPTION_FBDEV,          "UseFBDev",         OPTV_BOOLEAN, {0}, FALSE },
     { OPTION_VIDEO_KEY,      "VideoKey",         OPTV_INTEGER, {0}, FALSE },
+    { OPTION_MIN_DOTCLOCK,   "ForceMinDotClock", OPTV_FREQ,    {0}, FALSE },
     { -1,                    NULL,               OPTV_NONE,    {0}, FALSE }
 };
 
@@ -1728,6 +1730,7 @@
     RADEONPLLPtr   pll  = &info->pll;
     CARD16         bios_header;
     CARD16         pll_info_block;
+    double         min_dotclock;
 
     if (!info->VBIOS) {
 
@@ -1782,6 +1785,26 @@
        pll->xclk           = RADEON_BIOS16(pll_info_block + 0x08);
     }
 
+    /* (Some?) Radeon BIOSes seem too lie about their minimum dot
+     * clocks.  Allow users to override the detected minimum dot clock
+     * value (e.g., and allow it to be suitable for TV sets).
+     */
+    if (xf86GetOptValFreq(info->Options, OPTION_MIN_DOTCLOCK,
+                         OPTUNITS_MHZ, &min_dotclock)) {
+       if (min_dotclock < 12 || min_dotclock*100 >= pll->max_pll_freq) {
+           xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                      "Illegal minimum dotclock specified %.2f MHz "
+                      "(option ignored)\n",
+                      min_dotclock);
+       } else {
+           xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                      "Forced minimum dotclock to %.2f MHz "
+                      "(instead of detected %.2f MHz)\n",
+                      min_dotclock, ((double)pll->min_pll_freq/1000));
+           pll->min_pll_freq = min_dotclock * 1000;
+       }
+    }
+
     xf86DrvMsg(pScrn->scrnIndex, X_INFO,
               "PLL parameters: rf=%d rd=%d min=%d max=%d; xclk=%d\n",
               pll->reference_freq,
diff -r -u xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon.man 
xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.man
--- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon.man  2004-04-30 
14:04:58.000000000 +0200
+++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.man       2004-04-30 
13:59:44.000000000 +0200
@@ -235,6 +235,17 @@
 but not work correctly in some rare cases, hence the default is
 .B off.
 
+.TP
+.BI "Option \*qForceMinDotClock\*q \*q" frequency \*q
+Override minimum dot clock. Some Radeon BIOSes report a minimum dot
+clock unsuitable (too high) for use with television sets even when they
+actually can produce lower dot clocks. If this is the case you can
+override the value here.
+.B Note that using this option may damage your hardware.
+You have been warned. The
+.B frequency
+parameter may be specified as a float value with standard suffixes like
+"k", "kHz", "M", "MHz".
 
 .SH SEE ALSO
 XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), 
X(__miscmansuffix__)


Reply via email to