* [PATCH] neofb: blanking patch done
@ 2004-04-24 7:39 Alex Stewart
2004-04-25 3:58 ` James Simmons
0 siblings, 1 reply; 2+ messages in thread
From: Alex Stewart @ 2004-04-24 7:39 UTC (permalink / raw)
To: linux-fbdev-devel
[-- Attachment #1: Type: text/plain, Size: 320 bytes --]
Ok, I sorted out the issues with the blanking patch, fixed it up to use the new
vga core routines, and did a little bit of miscellaneous cleanup. It works for
me; feedback is welcome.
Patch is attached, and also available at http://www.foogod.com/~alex/neofb
(this patch is against James' latest driver patch)
-alex
[-- Attachment #2: neofb-js.6.blanking.patch --]
[-- Type: text/plain, Size: 3977 bytes --]
--- ./drivers/video/neofb.c.blanking 2004-04-24 01:04:28.000000000 -0700
+++ ./drivers/video/neofb.c 2004-04-24 01:24:38.739531288 -0700
@@ -1320,27 +1320,34 @@
/*
* (Un)Blank the display.
*/
-static int neofb_blank(int blank, struct fb_info *info)
+static int neofb_blank(int blank_mode, struct fb_info *info)
{
+ struct neofb_par *par = (struct neofb_par *)info->par;
+ int seqflags, lcdflags, dpmsflags, reg;
+
/*
- * Blank the screen if blank_mode != 0, else unblank. If
- * blank == NULL then the caller blanks by setting the CLUT
- * (Color Look Up Table) to all black. Return 0 if blanking
- * succeeded, != 0 if un-/blanking failed due to e.g. a
- * video mode which doesn't support it. Implements VESA
- * suspend and powerdown modes on hardware that supports
- * disabling hsync/vsync:
- * blank_mode == 2: suspend vsync
- * blank_mode == 3: suspend hsync
- * blank_mode == 4: powerdown
+ * Blank the screen if blank_mode != 0, else unblank.
+ * Return 0 if blanking succeeded, != 0 if un-/blanking failed due to
+ * e.g. a video mode which doesn't support it. Implements VESA suspend
+ * and powerdown modes for monitors, and backlight control on LCDs.
+ * blank_mode == 0: unblanked (backlight on)
+ * blank_mode == 1: blank (backlight on)
+ * blank_mode == 2: suspend vsync (backlight off)
+ * blank_mode == 3: suspend hsync (backlight off)
+ * blank_mode == 4: powerdown (backlight off)
*
- * wms...Enable VESA DMPS compatible powerdown mode
+ * wms...Enable VESA DPMS compatible powerdown mode
* run "setterm -powersave powerdown" to take advantage
*/
- switch (blank) {
+ switch (blank_mode) {
case 4: /* powerdown - both sync lines down */
+ seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
+ lcdflags = 0; /* LCD off */
+ dpmsflags = NEO_GR01_SUPPRESS_HSYNC |
+ NEO_GR01_SUPPRESS_VSYNC;
#ifdef CONFIG_TOSHIBA
+ /* Do we still need this? */
/* attempt to turn off backlight on toshiba; also turns off external */
{
SMMRegisters regs;
@@ -1353,13 +1360,26 @@
#endif
break;
case 3: /* hsync off */
+ seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
+ lcdflags = 0; /* LCD off */
+ dpmsflags = NEO_GR01_SUPPRESS_HSYNC;
break;
case 2: /* vsync off */
- break;
- case 1: /* just software blanking of screen */
- break;
- default: /* case 0, or anything else: unblank */
+ seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
+ lcdflags = 0; /* LCD off */
+ dpmsflags = NEO_GR01_SUPPRESS_VSYNC;
+ break;
+ case 1: /* just blank screen (backlight stays on) */
+ seqflags = VGA_SR01_SCREEN_OFF; /* Disable sequencer */
+ lcdflags = par->PanelDispCntlReg1 & 0x02; /* LCD normal */
+ dpmsflags = 0; /* no hsync/vsync suppression */
+ break;
+ case 0: /* unblank */
+ seqflags = 0; /* Enable sequencer */
+ lcdflags = par->PanelDispCntlReg1 & 0x02; /* LCD normal */
+ dpmsflags = 0x00; /* no hsync/vsync suppression */
#ifdef CONFIG_TOSHIBA
+ /* Do we still need this? */
/* attempt to re-enable backlight/external on toshiba */
{
SMMRegisters regs;
@@ -1371,7 +1391,20 @@
}
#endif
break;
+ default: /* Anything else we don't understand; return 1 to tell
+ * fb_blank we didn't actually do anything */
+ return 1;
}
+
+ neoUnlock();
+ reg = (vga_rseq(NULL, 0x01) & ~0x20) | seqflags;
+ vga_wseq(NULL, 0x01, reg);
+ reg = (vga_rgfx(NULL, 0x20) & ~0x02) | lcdflags;
+ vga_wgfx(NULL, 0x20, reg);
+ reg = (vga_rgfx(NULL, 0x01) & ~0xF0) | 0x80 | dpmsflags;
+ vga_wgfx(NULL, 0x01, reg);
+ neoLock(&par->state);
+
return 0;
}
--- ./include/video/neomagic.h.blanking 2004-04-24 01:04:28.000000000 -0700
+++ ./include/video/neomagic.h 2004-04-24 01:24:38.773526120 -0700
@@ -69,6 +69,9 @@
#define NEO_ICON128_ENABLE 0x0000000C
#define NEO_ICON_BLANK 0x00000010
+#define NEO_GR01_SUPPRESS_VSYNC 0x10
+#define NEO_GR01_SUPPRESS_HSYNC 0x20
+
#ifdef __KERNEL__
#ifdef NEOFB_DEBUG
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-04-25 3:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-04-24 7:39 [PATCH] neofb: blanking patch done Alex Stewart
2004-04-25 3:58 ` James Simmons
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).