[PATCH 3/4] Intel FB: force even line count in interlaced mode

2007-09-22 Thread Krzysztof Halasa
Intel FB: the chip adds two halflines automatically in interlaced mode,
force even line count for the right timings.

Signed-off-by: Krzysztof Halasa <[EMAIL PROTECTED]>

--- a/drivers/video/intelfb/intelfbhw.c
+++ b/drivers/video/intelfb/intelfbhw.c
@@ -317,6 +317,14 @@ int intelfbhw_validate_mode(struct intelfb_info *dinfo,
var->yres, VACTIVE_MASK + 1);
return 1;
}
+   if (var->xres < 4) {
+   WRN_MSG("X resolution too small (%d vs 4).\n", var->xres);
+   return 1;
+   }
+   if (var->yres < 4) {
+   WRN_MSG("Y resolution too small (%d vs 4).\n", var->yres);
+   return 1;
+   }
 
/* Check for doublescan modes. */
if (var->vmode & FB_VMODE_DOUBLE) {
@@ -324,6 +332,11 @@ int intelfbhw_validate_mode(struct intelfb_info *dinfo,
return 1;
}
 
+   if ((var->vmode & FB_VMODE_INTERLACED) && (var->yres & 1)) {
+   WRN_MSG("Odd number of lines in interlaced mode\n");
+   return 1;
+   }
+
/* Check if clock is OK. */
tmp = 10 / var->pixclock;
if (tmp < MIN_CLOCK) {
@@ -1127,6 +1140,8 @@ int intelfbhw_mode_to_hw(struct intelfb_info *dinfo,
hblank_end);
 
vactive = var->yres;
+   if (var->vmode & FB_VMODE_INTERLACED)
+   vactive--; /* the chip adds 2 halflines automatically */
vsync_start = vactive + var->lower_margin;
vsync_end = vsync_start + var->vsync_len;
vtotal = vsync_end + var->upper_margin;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 3/4] Intel FB: force even line count in interlaced mode

2007-09-22 Thread Krzysztof Halasa
Intel FB: the chip adds two halflines automatically in interlaced mode,
force even line count for the right timings.

Signed-off-by: Krzysztof Halasa [EMAIL PROTECTED]

--- a/drivers/video/intelfb/intelfbhw.c
+++ b/drivers/video/intelfb/intelfbhw.c
@@ -317,6 +317,14 @@ int intelfbhw_validate_mode(struct intelfb_info *dinfo,
var-yres, VACTIVE_MASK + 1);
return 1;
}
+   if (var-xres  4) {
+   WRN_MSG(X resolution too small (%d vs 4).\n, var-xres);
+   return 1;
+   }
+   if (var-yres  4) {
+   WRN_MSG(Y resolution too small (%d vs 4).\n, var-yres);
+   return 1;
+   }
 
/* Check for doublescan modes. */
if (var-vmode  FB_VMODE_DOUBLE) {
@@ -324,6 +332,11 @@ int intelfbhw_validate_mode(struct intelfb_info *dinfo,
return 1;
}
 
+   if ((var-vmode  FB_VMODE_INTERLACED)  (var-yres  1)) {
+   WRN_MSG(Odd number of lines in interlaced mode\n);
+   return 1;
+   }
+
/* Check if clock is OK. */
tmp = 10 / var-pixclock;
if (tmp  MIN_CLOCK) {
@@ -1127,6 +1140,8 @@ int intelfbhw_mode_to_hw(struct intelfb_info *dinfo,
hblank_end);
 
vactive = var-yres;
+   if (var-vmode  FB_VMODE_INTERLACED)
+   vactive--; /* the chip adds 2 halflines automatically */
vsync_start = vactive + var-lower_margin;
vsync_end = vsync_start + var-vsync_len;
vtotal = vsync_end + var-upper_margin;
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/