[-mm PATCH] neofb: enable LCD properly on unblank
DORMANTno replies
From: <hidden>
Date: 2006-02-15 05:53:52
Also in:
lkml
Hi Andrew, On Tue, Feb 14, 2006 at 08:16:29PM -0800, akpm@osdl.org wrote:
The patch titled
neofb: avoid resetting display config on unblank
has been removed from the -mm tree. Its filename is
neofb-avoid-resetting-display-config-on-unblank.patch
This patch was probably dropped from -mm because
it has now been merged into a subsystem tree or
into Linus's tree, or because it was folded into
its parent patch in the -mm tree.seems like I was running late with my patch to handle the LCD properly after blanking the screen. We definitely need the patch below to get the LCD's backlight to a sane state after unblanking. Otherwise, it is disabled unconditionally, because the LCD is turned of literally in the registers during blank. Reading those again on unblank will simply not reactivate the LCD, yet DPMS was handled properly, leading me to wrong conclusions. This adds a new variable to struct neo_par for storing a boolean whether to read the register values next time we (un)blank. For some reason it was not sufficient to check against !blank_mode while reading registers in the beginning of neofb_blank(). Reworked patch against neofb.c having neofb-avoid-resetting-display-config-on-unblank.patch applied. Signed-off-by: Christian Trefzer <redacted>
--- a/include/video/neomagic.h 2006-01-03 04:21:10.000000000 +0100
+++ b/include/video/neomagic.h 2006-02-09 20:59:20.164839408 +0100@@ -159,6 +159,7 @@ unsigned char PanelDispCntlReg1; unsigned char PanelDispCntlReg2; unsigned char PanelDispCntlReg3; + unsigned char PanelDispCntlRegRead; unsigned char PanelVertCenterReg1; unsigned char PanelVertCenterReg2; unsigned char PanelVertCenterReg3; --- a/drivers/video/neofb.c 2006-02-08 21:24:05.000000000 +0100 +++ b/drivers/video/neofb.c 2006-02-11 11:39:39.346365480 +0100
@@ -843,6 +843,9 @@ par->SysIfaceCntl2 = 0xc0; /* VESA Bios sets this to 0x80! */ + /* Initialize: by default, we want display config register to be read */ + par->PanelDispCntlRegRead = 1; + /* Enable any user specified display devices. */ par->PanelDispCntlReg1 = 0x00; if (par->internal_display)
@@ -1334,12 +1337,13 @@ struct neofb_par *par = (struct neofb_par *)info->par; int seqflags, lcdflags, dpmsflags, reg; - /* - * Reload the value stored in the register, might have been changed via - * FN keystroke - */ - par->PanelDispCntlReg1 = vga_rgfx(NULL, 0x20) & 0x03; - + /* Reload the value stored in the register, if sensible. It might have been + * changed via FN keystroke. */ + if (par->PanelDispCntlRegRead && !blank_mode) { + par->PanelDispCntlReg1 = vga_rgfx(NULL, 0x20) & 0x03; + } + par->PanelDispCntlRegRead = !blank_mode; + switch (blank_mode) { case FB_BLANK_POWERDOWN: /* powerdown - both sync lines down */ seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
Attachments
- (unnamed) [application/pgp-signature] 827 bytes