99319d2
--- xorg-server-1.2.0/hw/xfree86/ddc/ddcProperty.c.maxpixclock	2007-01-22 22:13:15.000000000 -0500
99319d2
+++ xorg-server-1.2.0/hw/xfree86/ddc/ddcProperty.c	2007-01-23 12:35:00.000000000 -0500
99319d2
@@ -303,7 +303,7 @@
99319d2
 {
99319d2
     DisplayModePtr Modes = NULL, Mode;
99319d2
     int i, clock;
99319d2
-    Bool have_hsync = FALSE, have_vrefresh = FALSE;
99319d2
+    Bool have_hsync = FALSE, have_vrefresh = FALSE, have_maxpixclock = FALSE;
99319d2
     int preferred;
99319d2
     
99319d2
     if (!Monitor || !DDC)
99319d2
@@ -332,6 +332,7 @@
99319d2
     /* Skip EDID ranges if they were specified in the config file */
99319d2
     have_hsync = (Monitor->nHsync != 0);
99319d2
     have_vrefresh = (Monitor->nVrefresh != 0);
99319d2
+    have_maxpixclock = (Monitor->maxPixClock != 0);
99319d2
 
99319d2
     /* Go through the detailed monitor sections */
99319d2
     for (i = 0; i < DET_TIMINGS; i++)
99319d2
@@ -366,7 +367,7 @@
99319d2
 	    }
99319d2
 
99319d2
 	    clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
99319d2
-	    if (clock > Monitor->maxPixClock)
99319d2
+	    if (!have_maxpixclock && clock > Monitor->maxPixClock)
99319d2
 		Monitor->maxPixClock = clock;
99319d2
 
99319d2
             break;
99319d2
--- xorg-server-1.2.0/hw/xfree86/common/xf86Mode.c.maxpixclock	2007-01-22 22:13:15.000000000 -0500
99319d2
+++ xorg-server-1.2.0/hw/xfree86/common/xf86Mode.c	2007-01-23 12:33:41.000000000 -0500
99319d2
@@ -1408,6 +1408,12 @@
99319d2
 			 scrp->monitor->vrefresh[i].lo,
99319d2
 			 scrp->monitor->vrefresh[i].hi);
99319d2
 	}
99319d2
+	if (scrp->monitor->maxPixClock) {
99319d2
+	    xf86DrvMsg(scrp->scrnIndex, X_INFO,
99319d2
+		       "%s: Using maximum pixel clock of %.2f MHz\n",
99319d2
+		       scrp->monitor->id,
99319d2
+		       (float)scrp->monitor->maxPixClock / 1000.0);
99319d2
+	}
99319d2
     }
99319d2
 
99319d2
     /*
99319d2
--- xorg-server-1.2.0/hw/xfree86/common/xf86Config.c.maxpixclock	2007-01-22 22:13:15.000000000 -0500
99319d2
+++ xorg-server-1.2.0/hw/xfree86/common/xf86Config.c	2007-01-23 12:33:41.000000000 -0500
99319d2
@@ -2211,12 +2211,15 @@
99319d2
 }
99319d2
 
99319d2
 typedef enum {
99319d2
-    MON_REDUCEDBLANKING
99319d2
+    MON_REDUCEDBLANKING,
99319d2
+    MON_MAX_PIX_CLOCK,
99319d2
 } MonitorValues;
99319d2
 
99319d2
 static OptionInfoRec MonitorOptions[] = {
99319d2
   { MON_REDUCEDBLANKING,      "ReducedBlanking",        OPTV_BOOLEAN,
99319d2
        {0}, FALSE },
99319d2
+  { MON_MAX_PIX_CLOCK,	      "MaxPixClock",		OPTV_FREQ,
99319d2
+       {0}, FALSE },
99319d2
   { -1,                                NULL,                   OPTV_NONE,
99319d2
        {0}, FALSE },
99319d2
 };
99319d2
@@ -2363,11 +2366,11 @@
99319d2
 	    return FALSE;
99319d2
     }
99319d2
 
99319d2
-    /* Check wether this Monitor accepts Reduced Blanking modelines */
99319d2
     xf86ProcessOptions(-1, monitorp->options, MonitorOptions);
99319d2
-
99319d2
     xf86GetOptValBool(MonitorOptions, MON_REDUCEDBLANKING,
99319d2
                       &monitorp->reducedblanking);
99319d2
+    xf86GetOptValFreq(MonitorOptions, MON_MAX_PIX_CLOCK, OPTUNITS_KHZ,
99319d2
+		       &monitorp->maxPixClock);
99319d2
     return TRUE;
99319d2
 }
99319d2