Re: [PATCH] fbdev: workaround for broken X servers
From: Ville Syrjälä <syrjala@sci.fi>
Date: 2004-11-05 09:36:22
On Fri, Nov 05, 2004 at 04:49:36PM +1100, Benjamin Herrenschmidt wrote:
quoted
quoted
Index: linux-work/drivers/video/fbmem.c ===================================================================--- linux-work.orig/drivers/video/fbmem.c 2004-10-26 13:15:55.000000000 +1000 +++ linux-work/drivers/video/fbmem.c 2004-11-03 13:10:41.324932256 +1100@@ -748,6 +748,10 @@ u16 *black = NULL; int err = 0; + /* Workaround for broken X servers */ + if (blank > VESA_POWERDOWN) + blank = VESA_POWERDOWN; + if (info->fbops->fb_blank && !info->fbops->fb_blank(blank, info)) return 0;This goes against documented behaviour (see fb.h). Also drivers/char/vt.c seems to agree with fb.h, as do at least atyfb and matroxfb. I also used the vesa level+1 convention in DirectFB. So AFAICS this patch would confuse console power management, XFree86/X.Org, DirectFB and some fb drivers.Ok, can we agree here on what has to be done ? X is hard-coding numbers that don't seem to be make any sense vs. our constants. In radeonfb, I used switch case on constants, not +1, so there is something I'm not getting. Besides, radeon always try to power down TFT panels when blank != 0, maybe I should improve that ... What is this +1 thing, where does it comes from ?
Maybe it's there because someone wanted to blank the display without disabling sync signals. I suggest a new set of constants that cover all legal values. Here's the first drawft.
--- linux-orig/include/linux/fb.h 2004-11-05 12:25:14.087807848 +0200
+++ linux/include/linux/fb.h 2004-11-05 12:28:02.734169704 +0200@@ -27,7 +27,7 @@ /* #define FBIOSWITCH_MONIBIT 0x460E */ #define FBIOGET_CON2FBMAP 0x460F #define FBIOPUT_CON2FBMAP 0x4610 -#define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */ +#define FBIOBLANK 0x4611 /* see FB_BLANK_* */ #define FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank) #define FBIO_ALLOC 0x4613 #define FBIO_FREE 0x4614
@@ -258,6 +258,12 @@ #define VESA_HSYNC_SUSPEND 2 #define VESA_POWERDOWN 3 +#define FB_BLANK_NO_BLANKING 0 +#define FB_BLANK_BLANKING 1 +#define FB_BLANK_VSYNC_SUSPEND 2 +#define FB_BLANK_HSYNC_SUSPEND 3 +#define FB_BLANK_POWERDOWN 4 + #define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */ #define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */ #define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */
--
Ville Syrjälä
syrjala@sci.fi
http://www.sci.fi/~syrjala/
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_idU88&alloc_id065&op=click