Thread (4 messages) 4 messages, 2 authors, 2008-05-22

Re: Error in fbcon_switch ?

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2008-05-21 07:17:53

On Tue, 20 May 2008, Krzysztof Helt wrote:
I run into issue when two virtual consoles (tty1 and tty2) are set to different
display modes: one with interlace and one without. When console is switched,
the setting of the interlaced mode is not honoured, ie. 

tty1 (lace) -> tty2 (non-lace) -> tty1 (lace) -> tty2 (non-lace)

gives

tty1 (lace) -> tty2 (lace) -> tty1 (lace) -> tty2 (lace)

Of course, the refresh rate (and other timings) are not correct on the tty2 as
the resolution and pixclock are preserved.
Interesting, I'll give it a try on my Amiga tonight...
I found that root of the problem is that fbcon_switch copies the var.vmode 
field from the previous console. If this copy is removed everything is alright, ie.

tty1 (lace) -> tty2 (non-lace) -> tty1 (lace) -> tty2 (non-lace)

Is this a correct solution to the problem? What is a purpose of copying vmode field?

The vmode field contains following settings:

#define FB_VMODE_INTERLACED     1       /* interlaced   */
#define FB_VMODE_DOUBLE         2       /* double scan */
#define FB_VMODE_ODD_FLD_FIRST  4       /* interlaced: top line first */
#define FB_VMODE_MASK           255

#define FB_VMODE_YWRAP          256     /* ywrap instead of panning     */
#define FB_VMODE_SMOOTH_XPAN    512     /* smooth xpan possible (internally used) */
#define FB_VMODE_CONUPDATE      512     /* don't update x/yoffset       */

IMO, at least the first three should not be copied. I am not sure about YWRAP and 
CONUPDATE/SMOOTH_XPAN.
As it copies [xy]offset, it probably needs YWRAP/SMOOTH_XPAN/CONUPDATE.
So I guess it should keep the bits under FB_VMODE_MASK.
quoted hunk ↗ jump to hunk
Regards,
Krzysztof
PS. The patch below is my fix:

diff -urp linux-old/drivers/video/console/fbcon.c linux-new/drivers/video/console/fbcon.c
--- linux-old/drivers/video/console/fbcon.c	2008-05-12 19:27:04.305519626 +0200
+++ linux-new/drivers/video/console/fbcon.c	2008-05-20 23:06:44.235878754 +0200
@@ -2266,7 +2266,6 @@ static int fbcon_switch(struct vc_data *
 	info->var.activate = var.activate;
 	var.yoffset = info->var.yoffset;
 	var.xoffset = info->var.xoffset;
-	var.vmode = info->var.vmode;
 	fb_set_var(info, &var);
 	ops->var = info->var;
Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help