diff -up xf86-video-intel-2.7.0/src/drmmode_display.c.jx xf86-video-intel-2.7.0/src/drmmode_display.c
--- xf86-video-intel-2.7.0/src/drmmode_display.c.jx 2009-04-21 12:57:05.000000000 -0400
+++ xf86-video-intel-2.7.0/src/drmmode_display.c 2009-04-21 12:59:35.000000000 -0400
@@ -525,6 +525,41 @@ drmmode_output_get_modes(xf86OutputPtr o
Modes = xf86ModesAdd(Modes, Mode);
}
+
+ /*
+ * LVDS can scale. If there's no EDID, or if it claims not to be
+ * continuous-freq, then add the default modes so we get 800x600
+ * and friends.
+ */
+ if (strstr(output->name, "LVDS")) {
+ xf86MonPtr mon = output->MonInfo;
+ if (!mon || !GTF_SUPPORTED(mon->features.msc)) {
+ DisplayModePtr m, i;
+ int max_x = 0, max_y = 0;
+ float max_vrefresh = 0.0;
+
+ for (m = Modes; m; m = m->next) {
+ max_x = max(max_x, m->HDisplay);
+ max_y = max(max_y, m->VDisplay);
+ max_vrefresh = max(max_vrefresh,
+ xf86ModeVRefresh(m));
+ }
+
+ max_vrefresh *= (1 + SYNC_TOLERANCE);
+
+ m = xf86GetDefaultModes(FALSE, FALSE);
+
+ xf86ValidateModesSize(output->scrn, m, max_x, max_y, 0);
+ for (i = m; i; i = i->next)
+ if (xf86ModeVRefresh(i) > max_vrefresh)
+ i->status = MODE_VSYNC;
+
+ xf86PruneInvalidModes(output->scrn, &m, FALSE);
+
+ Modes = xf86ModesAdd(Modes, m);
+ }
+ }
+
return Modes;
}