aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/neofb.c
diff options
context:
space:
mode:
authorChristian Trefzer <ctrefzer@gmx.de>2006-02-14 16:53:26 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-14 19:09:35 -0500
commit10ee39fe3ff618d274e1cd0f6abbc2917b736bfd (patch)
tree8479297b76b427b713ac18a96911ef9ec09f7b33 /drivers/video/neofb.c
parente2fbf1ace5cfefdd192f29fd4a027422f567c62d (diff)
[PATCH] neofb: avoid resetting display config on unblank
Fix issues with the NeoMagic framebuffer driver. It nicely complements my previous fix already in linus' tree. The only thing missing now is that the external CRT will not be activated at neofb init when external-only is selected, either by register read or module/kernel parameter. Testing was done on a Dell Latitude CPi-A/NM2200 chip. Previous behaviour: - before booting linux, set the preferred display config X via FN+F8 - boot linux, neofb stores the register values in a private variable - change the display config to Y via keystroke - leave the machine in peace until display is blanked - touching any key will result in display config X being restored - booting up, the BIOS will acknowledge config Y, though... Current behaviour: At the time of unblanking, config Y is honoured because we now read back register contents instead of just overwriting them with outdated values. Signed-off by: Christian Trefzer <ctrefzer@gmx.de> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/neofb.c')
-rw-r--r--drivers/video/neofb.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/video/neofb.c b/drivers/video/neofb.c
index 747602aa5615..b85e2b180a44 100644
--- a/drivers/video/neofb.c
+++ b/drivers/video/neofb.c
@@ -1334,6 +1334,12 @@ static int neofb_blank(int blank_mode, struct fb_info *info)
1334 struct neofb_par *par = info->par; 1334 struct neofb_par *par = info->par;
1335 int seqflags, lcdflags, dpmsflags, reg; 1335 int seqflags, lcdflags, dpmsflags, reg;
1336 1336
1337 /*
1338 * Reload the value stored in the register, might have been changed via
1339 * FN keystroke
1340 */
1341 par->PanelDispCntlReg1 = vga_rgfx(NULL, 0x20) & 0x03;
1342
1337 switch (blank_mode) { 1343 switch (blank_mode) {
1338 case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */ 1344 case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */
1339 seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */ 1345 seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
@@ -1366,7 +1372,7 @@ static int neofb_blank(int blank_mode, struct fb_info *info)
1366 case FB_BLANK_NORMAL: /* just blank screen (backlight stays on) */ 1372 case FB_BLANK_NORMAL: /* just blank screen (backlight stays on) */
1367 seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */ 1373 seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
1368 lcdflags = par->PanelDispCntlReg1 & 0x02; /* LCD normal */ 1374 lcdflags = par->PanelDispCntlReg1 & 0x02; /* LCD normal */
1369 dpmsflags = 0; /* no hsync/vsync suppression */ 1375 dpmsflags = 0x00; /* no hsync/vsync suppression */
1370 break; 1376 break;
1371 case FB_BLANK_UNBLANK: /* unblank */ 1377 case FB_BLANK_UNBLANK: /* unblank */
1372 seqflags = 0; /* Enable sequencer */ 1378 seqflags = 0; /* Enable sequencer */