|
@@ -701,45 +701,52 @@ static int cirrusfb_set_par_foo(struct fb_info *info)
|
|
|
|
|
|
hsyncstart = var->xres + var->right_margin;
|
|
|
hsyncend = hsyncstart + var->hsync_len;
|
|
|
- htotal = (hsyncend + var->left_margin) / 8 - 5;
|
|
|
- hdispend = var->xres / 8 - 1;
|
|
|
- hsyncstart = hsyncstart / 8 + 1;
|
|
|
- hsyncend = hsyncend / 8 + 1;
|
|
|
+ htotal = (hsyncend + var->left_margin) / 8;
|
|
|
+ hdispend = var->xres / 8;
|
|
|
+ hsyncstart = hsyncstart / 8;
|
|
|
+ hsyncend = hsyncend / 8;
|
|
|
|
|
|
- yres = var->yres;
|
|
|
- vsyncstart = yres + var->lower_margin;
|
|
|
+ vdispend = var->yres;
|
|
|
+ vsyncstart = vdispend + var->lower_margin;
|
|
|
vsyncend = vsyncstart + var->vsync_len;
|
|
|
vtotal = vsyncend + var->upper_margin;
|
|
|
- vdispend = yres - 1;
|
|
|
|
|
|
if (var->vmode & FB_VMODE_DOUBLE) {
|
|
|
- yres *= 2;
|
|
|
+ vdispend *= 2;
|
|
|
vsyncstart *= 2;
|
|
|
vsyncend *= 2;
|
|
|
vtotal *= 2;
|
|
|
} else if (var->vmode & FB_VMODE_INTERLACED) {
|
|
|
- yres = (yres + 1) / 2;
|
|
|
+ vdispend = (vdispend + 1) / 2;
|
|
|
vsyncstart = (vsyncstart + 1) / 2;
|
|
|
vsyncend = (vsyncend + 1) / 2;
|
|
|
vtotal = (vtotal + 1) / 2;
|
|
|
}
|
|
|
-
|
|
|
- vtotal -= 2;
|
|
|
- vsyncstart -= 1;
|
|
|
- vsyncend -= 1;
|
|
|
-
|
|
|
+ yres = vdispend;
|
|
|
if (yres >= 1024) {
|
|
|
vtotal /= 2;
|
|
|
vsyncstart /= 2;
|
|
|
vsyncend /= 2;
|
|
|
vdispend /= 2;
|
|
|
}
|
|
|
+
|
|
|
+ vdispend -= 1;
|
|
|
+ vsyncstart -= 1;
|
|
|
+ vsyncend -= 1;
|
|
|
+ vtotal -= 2;
|
|
|
+
|
|
|
if (cinfo->multiplexing) {
|
|
|
htotal /= 2;
|
|
|
hsyncstart /= 2;
|
|
|
hsyncend /= 2;
|
|
|
hdispend /= 2;
|
|
|
}
|
|
|
+
|
|
|
+ htotal -= 5;
|
|
|
+ hdispend -= 1;
|
|
|
+ hsyncstart += 1;
|
|
|
+ hsyncend += 1;
|
|
|
+
|
|
|
/* unlock register VGA_CRTC_H_TOTAL..CRT7 */
|
|
|
vga_wcrt(regbase, VGA_CRTC_V_SYNC_END, 0x20); /* previously: 0x00) */
|
|
|
|