You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
(1) |
Apr
(104) |
May
(81) |
Jun
(248) |
Jul
(133) |
Aug
(33) |
Sep
(53) |
Oct
(82) |
Nov
(166) |
Dec
(71) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(121) |
Feb
(42) |
Mar
(39) |
Apr
(84) |
May
(87) |
Jun
(58) |
Jul
(97) |
Aug
(130) |
Sep
(32) |
Oct
(139) |
Nov
(108) |
Dec
(216) |
| 2003 |
Jan
(299) |
Feb
(136) |
Mar
(392) |
Apr
(141) |
May
(137) |
Jun
(107) |
Jul
(94) |
Aug
(262) |
Sep
(300) |
Oct
(216) |
Nov
(72) |
Dec
(94) |
| 2004 |
Jan
(174) |
Feb
(192) |
Mar
(215) |
Apr
(314) |
May
(319) |
Jun
(293) |
Jul
(205) |
Aug
(161) |
Sep
(192) |
Oct
(226) |
Nov
(308) |
Dec
(89) |
| 2005 |
Jan
(127) |
Feb
(269) |
Mar
(588) |
Apr
(106) |
May
(77) |
Jun
(77) |
Jul
(161) |
Aug
(239) |
Sep
(86) |
Oct
(112) |
Nov
(153) |
Dec
(145) |
| 2006 |
Jan
(87) |
Feb
(57) |
Mar
(129) |
Apr
(109) |
May
(102) |
Jun
(232) |
Jul
(97) |
Aug
(69) |
Sep
(67) |
Oct
(69) |
Nov
(214) |
Dec
(82) |
| 2007 |
Jan
(133) |
Feb
(307) |
Mar
(121) |
Apr
(171) |
May
(229) |
Jun
(156) |
Jul
(185) |
Aug
(160) |
Sep
(122) |
Oct
(130) |
Nov
(78) |
Dec
(27) |
| 2008 |
Jan
(105) |
Feb
(137) |
Mar
(146) |
Apr
(148) |
May
(239) |
Jun
(208) |
Jul
(157) |
Aug
(244) |
Sep
(119) |
Oct
(125) |
Nov
(189) |
Dec
(225) |
| 2009 |
Jan
(157) |
Feb
(139) |
Mar
(106) |
Apr
(130) |
May
(246) |
Jun
(189) |
Jul
(128) |
Aug
(127) |
Sep
(88) |
Oct
(86) |
Nov
(216) |
Dec
(9) |
| 2010 |
Jan
(5) |
Feb
|
Mar
(11) |
Apr
(31) |
May
(3) |
Jun
|
Jul
(7) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2013 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Felipe C. <al5...@ma...> - 2002-02-22 08:47:33
|
Hi,
Since in 2.4 kernels I've never had exit with atyfb I'm tring with new
kernels. I've not had success, however, I've found an oops in 2.5.5-dj1 and
some others dj kernels that might help tracking some problems. Here it is:
atyfb: using auxiliary register aperture
atyfb: 3D RAGE Mobility (PCI) [0x4c4d rev 0x64] 8M SDRAM, 29.4989 MHz XTAL, 230 MHz PLL, 50 MHz MCLK
ksymoops 2.4.3 on i686 2.5.5-dj1. Options used
-V (specified)
-K (specified)
-L (specified)
-O (specified)
-m /usr/src/linux/System.map (default)
-S
Unable to handle kernel NULL pointer dereference at virtual address 00000000
c02878a8
Oops: 0002
CPU: 0
EIP: 0010:[<c02878a8>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010246
eax: 00000000 ebx: c3e6d000 ecx: 001ffc00 edx: 001ff000
esi: 00000032 edi: 00000000 ebp: 000000e6 esp: c3fcfe9c
ds: 0018 es: 0018 ss: 0018
Stack: 00000040 00000000 00000000 c0134000 c0261f10 c029ada8 c02af3ce 00000064
c3fce000 00000000 00400000 00000000 c013415c c01280cc c3fce000 00000000
c0101c50 03e6b067 c5000000 00000000 00400000 c3e6b030 c011608a f5800000
Call Trace: [<c0134000>] [<c013415c>] [<c01280cc>] [<c011608a>] [<c0130ca7>]
[<c01161af>] [<c0105000>] [<c010506f>] [<c0105000>] [<c01072a6>] [<c0105050>]
Code: f3 ab f6 c2 02 74 02 66 ab f6 c2 01 74 01 aa be 70 fb 26 00
>>EIP; c02878a8 <aty_init+2f8/6f0> <=====
Trace; c0134000 <__alloc_pages+40/190>
Trace; c013415c <__get_free_pages+c/50>
Trace; c01280cc <pte_alloc_kernel+6c/110>
Trace; c011608a <remap_area_pages+1ba/210>
Trace; c0130ca6 <get_vm_area+16/100>
Trace; c01161ae <__ioremap+ce/e0>
Trace; c0105000 <_stext+0/0>
Trace; c010506e <init+1e/1d0>
Trace; c0105000 <_stext+0/0>
Trace; c01072a6 <kernel_thread+26/30>
Trace; c0105050 <init+0/1d0>
Code; c02878a8 <aty_init+2f8/6f0> 00000000 <_EIP>:
Code; c02878a8 <aty_init+2f8/6f0> 0: f3 ab repz stos %eax,%es:(%edi) <=====
Code; c02878aa <aty_init+2fa/6f0> 2: f6 c2 02 test $0x2,%dl
Code; c02878ac <aty_init+2fc/6f0> 5: 74 02 je 9 <_EIP+0x9> c02878b0 <aty_init+300/6f0>
Code; c02878ae <aty_init+2fe/6f0> 7: 66 ab stos %ax,%es:(%edi)
Code; c02878b0 <aty_init+300/6f0> 9: f6 c2 01 test $0x1,%dl
Code; c02878b4 <aty_init+304/6f0> c: 74 01 je f <_EIP+0xf> c02878b6 <aty_init+306/6f0>
Code; c02878b6 <aty_init+306/6f0> e: aa stos %al,%es:(%edi)
Code; c02878b6 <aty_init+306/6f0> f: be 70 fb 26 00 mov $0x26fb70,%esi
<0> Kernel panic: Attempted to kill init!
--
Felipe Contreras
|
|
From: Geert U. <ge...@li...> - 2002-02-21 10:29:32
|
On Wed, 20 Feb 2002, Frederick Lefebvre wrote:
> I'm writing a fbdev driver and I have everything works fine in 8 bpp. But
> when I try swithching to 16 bpp, the writings turns green. Could anybody
> point me to anything of interest (pointers or documentation) about
> switching color depth in a fbdev driver?
Did you set up the color bitfields correctly?
Do you validate the color bitfields in your set_var() routine?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: Frederick L. <fle...@ir...> - 2002-02-20 20:23:14
|
I'm writing a fbdev driver and I have everything works fine in 8 bpp. But when I try swithching to 16 bpp, the writings turns green. Could anybody point me to anything of interest (pointers or documentation) about switching color depth in a fbdev driver? Thanks Fred -- Frederick Lefebvre fle...@ir... Software Developer, Infomedia Research Group (IRG) Quebec, Canada |
|
From: Samuel M. S. <sa...@e-...> - 2002-02-19 18:17:18
|
__initdata is rw not ro, so the const's in atyfb_base.c won't compile for me without patch below. This is my first patch post, so any pointers are welcome. Samuel Stringham Network Administrator www.e-sa.com |
|
From: Fabio d'A. <ad...@te...> - 2002-02-18 10:32:52
|
> Fbcmap uses that ioctl.
> If you loose the palette settings on console switch, it's probably a bug in the
> frame buffer device you are using. Which one are you using?
>
> Gr{oetje,eeting}s,
>
> Geert
vesafb on /dev/fb0 on a GeForce3 (I think).
Boot with vga=773 (to activate the vesa consoles).
f
|
|
From: Geert U. <ge...@li...> - 2002-02-18 09:12:17
|
Hi Fabio,
> just found and downloaded your fbutils from some
> site around the globe. Tweaked and modified to make
> it compile on my system. I used the fbcmap to set a
> new colormap on my fb console, and it actually worked,
> just, every time I switch console and/or switch
> the X system, the palette returns to its black & grey
> default.
>
> I checked on a mailing list and found a reply
> from you on an identical issue. This was your
> reply:
>
> "ioctl FBIOPUTCMAP on /dev/fb0 (if you use a frame buffer
> device console). More info in <linux/fb.h>."
>
> Tried, but the problem persists. Any hints?
Fbcmap uses that ioctl.
If you loose the palette settings on console switch, it's probably a bug in the
frame buffer device you are using. Which one are you using?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: Geert U. <ge...@li...> - 2002-02-15 16:07:07
|
On 15 Feb 2002, Emmanuel Michon wrote:
> all fb implementations I find so far fill the disp
> field:
> fb_info.disp = &disp; /* used during initialization */
> with a
> static struct display disp;
>
> and enable only one framebuffer device.
E.g. atyfb doesn't use a static struct display, but
disp = &info->disp
> I'm writing code that allows one fb per pci device; and I
> have to support multiple ones. Should I extend fb_info like this:
>
> struct moreinfo {
> struct fb_info fb;
> static struct display disp;
> struct pci_dev *pdev;
> };
>
> static int vfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
> u_int *transp, struct fb_info *info)
> {
> struct moreinfo *my=(struct moreinfo *)info;
> ...
> }
>
> and set during init:
> my->fb.disp=&my->disp;
Exactly.
> or is it enough to have one real struct display for all of them?
No, each head needs its own struct display.
> Seems disp has a dispsw member that has to change on a per fb basis.
Yes, since dispsw depends on the video mode. If you support multiple devices,
they can be in different video modes.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: Emmanuel M. <emm...@re...> - 2002-02-15 15:59:34
|
Hi,
all fb implementations I find so far fill the disp
field:
fb_info.disp = &disp; /* used during initialization */
with a
static struct display disp;
and enable only one framebuffer device.
I'm writing code that allows one fb per pci device; and I
have to support multiple ones. Should I extend fb_info like this:
struct moreinfo {
struct fb_info fb;
static struct display disp;
struct pci_dev *pdev;
};
static int vfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
u_int *transp, struct fb_info *info)
{
struct moreinfo *my=(struct moreinfo *)info;
...
}
and set during init:
my->fb.disp=&my->disp;
or is it enough to have one real struct display for all of them?
Seems disp has a dispsw member that has to change on a per fb basis.
Sincerely yours,
--
Emmanuel Michon
Chef de projet
REALmagic France SAS
Mobile: 0685316107 GPGkeyID: D2997E42
|
|
From: Geert U. <ge...@li...> - 2002-02-15 09:49:55
|
Hi Linus, Marcelo, and Dave,
`do { ... } while(0)' does not need the trailing semicolon and may lead to
strange side effects. The following patch (by Timothy Ball <ti...@tu...>)
fixes it in the following files:
- drivers/video/chipsfb.c
- drivers/video/fbcon-cfb24.c
- drivers/video/virgefb.c
The patch applies to 2.4.18-rc1 and 2.5.4-dj1 as well.
diff -urN linux-2.5.5-pre1/drivers/video/chipsfb.c do-while-2.5.5-pre1/drivers/video/chipsfb.c
--- linux-2.5.5-pre1/drivers/video/chipsfb.c Tue Jan 29 10:14:21 2002
+++ do-while-2.5.5-pre1/drivers/video/chipsfb.c Fri Feb 15 10:26:35 2002
@@ -79,7 +79,7 @@
} while (0)
#define read_ind(num, var, ap, dp) do { \
outb((num), (ap)); var = inb((dp)); \
-} while (0);
+} while (0)
/* extension registers */
#define write_xr(num, val) write_ind(num, val, 0x3d6, 0x3d7)
diff -urN linux-2.5.5-pre1/drivers/video/fbcon-cfb24.c do-while-2.5.5-pre1/drivers/video/fbcon-cfb24.c
--- linux-2.5.5-pre1/drivers/video/fbcon-cfb24.c Tue Oct 2 11:47:45 2001
+++ do-while-2.5.5-pre1/drivers/video/fbcon-cfb24.c Fri Feb 15 10:25:23 2002
@@ -76,14 +76,14 @@
out1 = (in1<<8) | (in2>>16); \
out2 = (in2<<16) | (in3>>8); \
out3 = (in3<<24) | in4; \
- } while (0);
+ } while (0)
#elif defined(__LITTLE_ENDIAN)
#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \
do { \
out1 = in1 | (in2<<24); \
out2 = (in2>> 8) | (in3<<16); \
out3 = (in3>>16) | (in4<< 8); \
- } while (0);
+ } while (0)
#else
#error FIXME: No endianness??
#endif
diff -urN linux-2.5.5-pre1/drivers/video/virgefb.c do-while-2.5.5-pre1/drivers/video/virgefb.c
--- linux-2.5.5-pre1/drivers/video/virgefb.c Tue Jan 29 10:14:27 2002
+++ do-while-2.5.5-pre1/drivers/video/virgefb.c Fri Feb 15 10:30:04 2002
@@ -670,12 +670,9 @@
*/
#define Cyber3D_WaitQueue(v) \
-{ \
do { \
while ((rl_3d(0x8504) & 0x1f00) < (((v)+2) << 8)); \
- } \
- while (0); \
-}
+ } while (0)
static inline void Cyber3D_WaitBusy(void)
{
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: James S. <jsi...@tr...> - 2002-02-12 17:20:58
|
> > +void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy, int sx,
> > + int height, int width)
> > +{
> > + struct fb_info *info = p->fb_info;
> > + struct fb_fillrect region;
> > +
> > + region.color = attr_bgcol_ec(p,vc);
> > + region.dx = sx * fontwidth(p);
> > + region.dy = sy * fontheight(p);
> > + region.width = width * fontwidth(p);
> > + region.height = height * fontheight(p);
> > + region.rop = ROP_COPY;
> > +
> > + info->fbops->fb_fillrect(info, ®ion);
>
> So now fb_fillrect.color is always the index into the console palette?
Yes. Well more like it is a index into struct fb_cmap. In theory you can
call xxxfb_fillrect outside of the console system and pass in any value
for region.color. That value would just mean look at entry x. Now the code
in xxxfb_fillrect would do its magic for you. BTW I have thought about
adding ioctls to call the accel functions for the purpose of testing the
drivers accel code. It would not be meant to stay in. Just for testing
purposes only.
> Is there any way to specify a color that's not in the console palette? This is
> very useful in {true,direct}color modes.
Yes. All I did was hide the details into xxxfb_fillrect. For example I
have been working with Denis on a new NeoMagic fdev driver converted over
to the new api. For example I have inside neofb_fillrect:
switch (info->var.bits_per_pixel)
{
case 8:
par->neo2200->fgColor = rect->color;
break;
case 16:
par->neo2200->fgColor =
((u16*)(info->pseudo_palette))[rect->color];
break;
}
The power here is that pseudo_palette is void thus it could be anything. A
struct defining register values to be passed to the hardware etc. Another
thing is pseudo_palette has no size constrant. At present alot of drivers
implement it as 16/17 entries. It could be 10,000. Nothinmg stops us from
doing this. The upper layers don;t have to worry about the details of
what pseudo_palette is.
> How does imageblit work for the logo now, i.e. does an image contain console
> palette indices too?
Yes.
struct fb_image {
__u32 width; /* Size of image */
__u32 height;
__u16 dx; /* Where to place image */
__u16 dy;
__u32 fg_color; /* Only used when a mono bitmap */
__u32 bg_color;
__u8 depth; /* Dpeth of the image */
char *data; /* Pointer to image data */
};
data is a collect of indices into the current struct fb_cmap for the case
of a color image. For mono the data is a bitmap and we use the fg_color
and bg_color values. They too are indices into the current struct fb_cmap.
|
|
From: Geert U. <ge...@li...> - 2002-02-12 08:16:56
|
On Mon, 11 Feb 2002, James Simmons wrote:
> diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbcon-accel.c linux/drivers/video/fbcon-accel.c
> --- linux-2.5.3-dj5/drivers/video/fbcon-accel.c Wed Dec 31 16:00:00 1969
> +++ linux/drivers/video/fbcon-accel.c Mon Feb 11 16:52:44 2002
[...]
> +void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy, int sx,
> + int height, int width)
> +{
> + struct fb_info *info = p->fb_info;
> + struct fb_fillrect region;
> +
> + region.color = attr_bgcol_ec(p,vc);
> + region.dx = sx * fontwidth(p);
> + region.dy = sy * fontheight(p);
> + region.width = width * fontwidth(p);
> + region.height = height * fontheight(p);
> + region.rop = ROP_COPY;
> +
> + info->fbops->fb_fillrect(info, ®ion);
So now fb_fillrect.color is always the index into the console palette?
Is there any way to specify a color that's not in the console palette? This is
very useful in {true,direct}color modes.
How does imageblit work for the logo now, i.e. does an image contain console
palette indices too?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: James S. <jsi...@tr...> - 2002-02-12 00:51:47
|
A bug was found in the other patch. This patch fixes a revc bug. With your
blessing I like to incorporate this patch into the DJ tree.
. ---
|o_o |
|:_/ | Give Micro$oft the Bird!!!!
// \ \ Use Linux!!!!
(| | )
/'_ _/`\
___)=(___/
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/Makefile linux/drivers/video/Makefile
--- linux-2.5.3-dj5/drivers/video/Makefile Mon Feb 11 11:37:39 2002
+++ linux/drivers/video/Makefile Mon Feb 11 12:00:48 2002
@@ -14,7 +14,7 @@
fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o \
fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
- fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o \
+ fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o fbcon-accel.o \
cyber2000fb.o sa1100fb.o fbcon-hga.o
# Each configuration option enables a list of files.
@@ -137,6 +137,7 @@
obj-$(CONFIG_FBCON_VGA) += fbcon-vga.o
obj-$(CONFIG_FBCON_HGA) += fbcon-hga.o
obj-$(CONFIG_FBCON_STI) += fbcon-sti.o
+obj-$(CONFIG_FBCON_ACCEL) += fbcon-accel.o
include $(TOPDIR)/Rules.make
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbcon-accel.c linux/drivers/video/fbcon-accel.c
--- linux-2.5.3-dj5/drivers/video/fbcon-accel.c Wed Dec 31 16:00:00 1969
+++ linux/drivers/video/fbcon-accel.c Mon Feb 11 17:42:39 2002
@@ -0,0 +1,188 @@
+/*
+ * linux/drivers/video/fbcon-accel.c -- Framebuffer accel console wrapper
+ *
+ * Created 20 Feb 2001 by James Simmons <jsi...@us...>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive for
+ * more details.
+ */
+
+#include <linux/module.h>
+#include <linux/tty.h>
+#include <linux/console.h>
+#include <linux/string.h>
+#include <linux/fb.h>
+
+#include <video/fbcon.h>
+#include "fbcon-accel.h"
+
+void fbcon_accel_setup(struct display *p)
+{
+ p->next_line = p->fb_info->fix.line_length;
+ p->next_plane = 0;
+}
+
+void fbcon_accel_bmove(struct display *p, int sy, int sx, int dy, int dx,
+ int height, int width)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_copyarea area;
+
+ area.sx = sx * fontwidth(p);
+ area.sy = sy * fontheight(p);
+ area.dx = dx * fontwidth(p);
+ area.dy = dy * fontheight(p);
+ area.height = height * fontheight(p);
+ area.width = width * fontwidth(p);
+
+ info->fbops->fb_copyarea(info, &area);
+}
+
+void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy, int sx,
+ int height, int width)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_fillrect region;
+
+ region.color = attr_bgcol_ec(p,vc);
+ region.dx = sx * fontwidth(p);
+ region.dy = sy * fontheight(p);
+ region.width = width * fontwidth(p);
+ region.height = height * fontheight(p);
+ region.rop = ROP_COPY;
+
+ info->fbops->fb_fillrect(info, ®ion);
+}
+
+void fbcon_accel_putc(struct vc_data *vc, struct display *p, int c, int yy,
+ int xx)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned short charmask = p->charmask;
+ unsigned int width = ((fontwidth(p)+7)>>3);
+ struct fb_image image;
+
+ image.fg_color = attr_fgcol(p, c);
+ image.bg_color = attr_bgcol(p, c);
+ image.dx = xx * fontwidth(p);
+ image.dy = yy * fontheight(p);
+ image.width = fontwidth(p);
+ image.height = fontheight(p);
+ image.depth = 1;
+ image.data = p->fontdata + (c & charmask)*fontheight(p)*width;
+
+ info->fbops->fb_imageblit(info, &image);
+}
+
+void fbcon_accel_putcs(struct vc_data *vc, struct display *p,
+ const unsigned short *s, int count, int yy, int xx)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned short charmask = p->charmask;
+ unsigned int width = ((fontwidth(p)+7)>>3);
+ struct fb_image image;
+
+ image.fg_color = attr_fgcol(p, *s);
+ image.bg_color = attr_bgcol(p, *s);
+ image.dx = xx * fontwidth(p);
+ image.dy = yy * fontheight(p);
+ image.width = fontwidth(p);
+ image.height = fontheight(p);
+ image.depth = 1;
+
+ while (count--) {
+ image.data = p->fontdata +
+ (scr_readw(s++) & charmask) * fontheight(p) * width;
+ info->fbops->fb_imageblit(info, &image);
+ image.dx += fontwidth(p);
+ }
+}
+
+void fbcon_accel_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_fillrect region;
+
+ region.color = attr_fgcol_ec(p, p->conp);
+ region.dx = xx * fontwidth(p);
+ region.dy = yy * fontheight(p);
+ region.width = fontwidth(p);
+ region.height = fontheight(p);
+ region.rop = ROP_XOR;
+
+ info->fbops->fb_fillrect(info, ®ion);
+}
+
+void fbcon_accel_clear_margins(struct vc_data *vc, struct display *p,
+ int bottom_only)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned int cw = fontwidth(p);
+ unsigned int ch = fontheight(p);
+ unsigned int rw = info->var.xres % cw;
+ unsigned int bh = info->var.yres % ch;
+ unsigned int rs = info->var.xres - rw;
+ unsigned int bs = info->var.yres - bh;
+ struct fb_fillrect region;
+
+ region.color = attr_bgcol_ec(p,vc);
+ region.rop = ROP_COPY;
+
+ if (rw && !bottom_only) {
+ region.dx = info->var.xoffset + rs;
+ region.dy = 0;
+ region.width = rw;
+ region.height = info->var.yres_virtual;
+ info->fbops->fb_fillrect(info, ®ion);
+ }
+
+ if (bh) {
+ region.dx = info->var.xoffset;
+ region.dy = info->var.yoffset + bs;
+ region.width = rs;
+ region.height = bh;
+ info->fbops->fb_fillrect(info, ®ion);
+ }
+}
+
+ /*
+ * `switch' for the low level operations
+ */
+
+struct display_switch fbcon_accel = {
+ setup: fbcon_accel_setup,
+ bmove: fbcon_accel_bmove,
+ clear: fbcon_accel_clear,
+ putc: fbcon_accel_putc,
+ putcs: fbcon_accel_putcs,
+ revc: fbcon_accel_revc,
+ clear_margins: fbcon_accel_clear_margins,
+ fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
+};
+
+#ifdef MODULE
+MODULE_LICENSE("GPL");
+
+int init_module(void)
+{
+ return 0;
+}
+
+void cleanup_module(void)
+{}
+#endif /* MODULE */
+
+
+ /*
+ * Visible symbols for modules
+ */
+
+EXPORT_SYMBOL(fbcon_accel);
+EXPORT_SYMBOL(fbcon_accel_setup);
+EXPORT_SYMBOL(fbcon_accel_bmove);
+EXPORT_SYMBOL(fbcon_accel_clear);
+EXPORT_SYMBOL(fbcon_accel_putc);
+EXPORT_SYMBOL(fbcon_accel_putcs);
+EXPORT_SYMBOL(fbcon_accel_revc);
+EXPORT_SYMBOL(fbcon_accel_clear_margins);
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbcon-accel.h linux/drivers/video/fbcon-accel.h
--- linux-2.5.3-dj5/drivers/video/fbcon-accel.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/video/fbcon-accel.h Mon Feb 11 12:11:29 2002
@@ -0,0 +1,34 @@
+/*
+ * FBcon low-level driver for 32 bpp packed pixel (cfb32)
+ */
+
+#ifndef _VIDEO_FBCON_ACCEL_H
+#define _VIDEO_FBCON_ACCEL_H
+
+#include <linux/config.h>
+
+#ifdef MODULE
+#if defined(CONFIG_FBCON_ACCEL) || defined(CONFIG_FBCON_ACCEL_MODULE)
+#define FBCON_HAS_ACCEL
+#endif
+#else
+#if defined(CONFIG_FBCON_ACCEL)
+#define FBCON_HAS_ACCEL
+#endif
+#endif
+
+extern struct display_switch fbcon_accel;
+extern void fbcon_accel_setup(struct display *p);
+extern void fbcon_accel_bmove(struct display *p, int sy, int sx, int dy,
+ int dx, int height, int width);
+extern void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy,
+ int sx, int height, int width);
+extern void fbcon_accel_putc(struct vc_data *vc, struct display *p, int c,
+ int yy, int xx);
+extern void fbcon_accel_putcs(struct vc_data *vc, struct display *p,
+ const unsigned short *s, int count, int yy, int xx);
+extern void fbcon_accel_revc(struct display *p, int xx, int yy);
+extern void fbcon_accel_clear_margins(struct vc_data *vc, struct display *p,
+ int bottom_only);
+
+#endif /* _VIDEO_FBCON_ACCEL_H */
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbgen.c linux/drivers/video/fbgen.c
--- linux-2.5.3-dj5/drivers/video/fbgen.c Mon Feb 11 11:37:40 2002
+++ linux/drivers/video/fbgen.c Mon Feb 11 17:43:11 2002
@@ -21,6 +21,14 @@
#include <asm/io.h>
#include <video/fbcon.h>
+#include <video/fbcon-mfb.h>
+#include <video/fbcon-cfb2.h>
+#include <video/fbcon-cfb4.h>
+#include <video/fbcon-cfb8.h>
+#include <video/fbcon-cfb16.h>
+#include <video/fbcon-cfb24.h>
+#include <video/fbcon-cfb32.h>
+#include "fbcon-accel.h"
/* ---- `Generic' versions of the frame buffer device operations ----------- */
@@ -56,6 +64,11 @@
return fbhw->encode_fix(fix, &par, info2);
}
+int gen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info)
+{
+ *fix = info->fix;
+ return 0;
+}
/**
* fbgen_get_var - get user defined part of display
@@ -84,6 +97,11 @@
return 0;
}
+int gen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
+{
+ *var = info->var;
+ return 0;
+}
/**
* fbgen_set_var - set the user defined part of display
@@ -132,6 +150,41 @@
}
+int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
+{
+ int err;
+
+ if (con < 0 || (memcpy(&info->var, var, sizeof(struct fb_var_screeninfo)))) {
+ if (!info->fbops->fb_check_var) {
+ *var = info->var;
+ return 0;
+ }
+
+ if ((err = info->fbops->fb_check_var(var, info)))
+ return err;
+
+ if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
+ info->var = *var;
+
+ gen_set_disp(con, info);
+
+ if (con == info->currcon) {
+ if (info->fbops->fb_set_par)
+ info->fbops->fb_set_par(info);
+
+ if (info->fbops->fb_pan_display)
+ info->fbops->fb_pan_display(&info->var, con, info);
+
+ fb_set_cmap(&info->cmap, 1, info);
+ }
+
+ if (info->changevar)
+ info->changevar(con);
+ }
+ }
+ return 0;
+}
+
/**
* fbgen_get_cmap - get the colormap
* @cmap: frame buffer colormap structure
@@ -164,6 +217,11 @@
return 0;
}
+int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info)
+{
+ fb_copy_cmap (&info->cmap, cmap, kspc ? 0 : 2);
+ return 0;
+}
/**
* fbgen_set_cmap - set the colormap
@@ -196,6 +254,30 @@
return 0;
}
+int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info)
+{
+ struct display *disp = (con < 0) ? info->disp : (fb_display + con);
+ struct fb_cmap *dcmap = &disp->cmap;
+ int err = 0;
+
+ /* No colormap allocated ? */
+ if (!dcmap->len) {
+ int size = info->cmap.len;
+
+ err = fb_alloc_cmap(dcmap, size, 0);
+ }
+
+
+ if (!err && con == info->currcon) {
+ err = fb_set_cmap(cmap, kspc, info);
+ dcmap = &info->cmap;
+ }
+
+ if (!err)
+ fb_copy_cmap(cmap, dcmap, kspc ? 0 : 1);
+ return err;
+}
/**
* fbgen_pan_display - pan or wrap the display
@@ -277,7 +359,6 @@
return 0;
}
-
/**
* fbgen_set_disp - set generic display
* @con: virtual console number
@@ -325,6 +406,93 @@
#endif
}
+void gen_set_disp(int con, struct fb_info *info)
+{
+ struct display *display;
+
+ if (con >= 0)
+ display = fb_display + con;
+ else
+ display = info->disp;
+
+#ifdef FBCON_HAS_ACCEL
+ if (info->var.accel_flags & FB_ACCELF_TEXT) {
+ display->dispsw = &fbcon_accel;
+ return;
+ }
+#endif
+
+ switch (info->var.bits_per_pixel)
+ {
+#ifdef FBCON_HAS_MFB
+ case 1:
+ display->dispsw = &fbcon_mfb;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB2
+ case 2:
+ display->dispsw = &fbcon_cfb2;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB4
+ case 4:
+ display->dispsw = &fbcon_cfb4;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB8
+ case 8:
+ display->dispsw = &fbcon_cfb8;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB16
+ case 16:
+ display->dispsw = &fbcon_cfb16;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB24:
+ case 24:
+ display->dispsw = &fbcon_cfb24;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB32
+ case 32:
+ display->dispsw = &fbcon_cfb32;
+ break;
+#endif
+ default:
+ display->dispsw = &fbcon_dummy;
+ break;
+ }
+
+ display->visual = info->fix.visual;
+ display->type = info->fix.type;
+ display->type_aux = info->fix.type_aux;
+ display->ypanstep = info->fix.ypanstep;
+ display->ywrapstep = info->fix.ywrapstep;
+ display->line_length = info->fix.line_length;
+ if (info->fbops->fb_blank || info->fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+ info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+ display->can_soft_blank = 1;
+ display->dispsw_data = NULL;
+ } else {
+ display->can_soft_blank = 0;
+ display->dispsw_data = info->pseudo_palette;
+ }
+ display->var = info->var;
+
+ /*
+ * If we are setting all the virtual consoles, also set
+ * the defaults used to create new consoles.
+ */
+ if (info->var.activate & FB_ACTIVATE_ALL)
+ info->disp->var = info->var;
+}
/**
* do_install_cmap - install the current colormap
@@ -404,6 +572,46 @@
}
+int gen_switch(int con, struct fb_info *info)
+{
+ struct display *disp;
+ struct fb_cmap *cmap;
+
+ if (info->currcon >= 0) {
+ disp = fb_display + info->currcon;
+
+ /*
+ * Save the old colormap and graphics mode.
+ */
+ disp->var = info->var;
+ if (disp->cmap.len)
+ fb_copy_cmap(&info->cmap, &disp->cmap, 0);
+ }
+
+ info->currcon = con;
+ disp = fb_display + con;
+
+ /*
+ * Install the new colormap and change the graphics mode. By default
+ * fbcon sets all the colormaps and graphics modes to the default
+ * values at bootup.
+ *
+ * Really, we want to set the colormap size depending on the
+ * depth of the new grpahics mode. For now, we leave it as its
+ * default 256 entry.
+ */
+ if (disp->cmap.len)
+ cmap = &disp->cmap;
+ else
+ cmap = fb_default_cmap(1 << disp->var.bits_per_pixel);
+
+ fb_copy_cmap(cmap, &info->cmap, 0);
+
+ disp->var.activate = FB_ACTIVATE_NOW;
+ info->fbops->fb_set_var(&disp->var, con, info);
+ return 0;
+}
+
/**
* fbgen_blank - blank the screen
* @blank: boolean, 0 unblank, 1 blank
@@ -438,9 +646,12 @@
/* generic frame buffer operations */
EXPORT_SYMBOL(fbgen_get_fix);
+EXPORT_SYMBOL(gen_get_fix);
EXPORT_SYMBOL(fbgen_get_var);
+EXPORT_SYMBOL(gen_get_var);
EXPORT_SYMBOL(fbgen_set_var);
EXPORT_SYMBOL(fbgen_get_cmap);
+EXPORT_SYMBOL(gen_get_cmap);
EXPORT_SYMBOL(fbgen_set_cmap);
EXPORT_SYMBOL(fbgen_pan_display);
/* helper functions */
@@ -449,6 +660,7 @@
EXPORT_SYMBOL(do_install_cmap);
EXPORT_SYMBOL(fbgen_update_var);
EXPORT_SYMBOL(fbgen_switch);
+EXPORT_SYMBOL(gen_switch);
EXPORT_SYMBOL(fbgen_blank);
MODULE_LICENSE("GPL");
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/include/linux/fb.h linux/include/linux/fb.h
--- linux-2.5.3-dj5/include/linux/fb.h Mon Feb 11 11:37:44 2002
+++ linux/include/linux/fb.h Mon Feb 11 11:59:26 2002
@@ -379,9 +379,6 @@
/* tell fb to switch consoles */
int (*updatevar)(int, struct fb_info*);
/* tell fb to update the vars */
- void (*blank)(int, struct fb_info*); /* tell fb to (un)blank the screen */
- /* arg = 0: unblank */
- /* arg > 0: VESA level (arg-1) */
void *pseudo_palette; /* Fake palette of 16 colors and
the cursor's color for non
palette mode */
@@ -437,14 +434,24 @@
extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info);
+extern int gen_get_fix(struct fb_fix_screeninfo *fix, int con,
+ struct fb_info *info);
extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
+extern int gen_get_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
+extern int gen_set_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info);
+extern int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info);
+extern int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
extern void cfb_fillrect(struct fb_info *p, struct fb_fillrect *rect);
@@ -461,9 +468,10 @@
extern void do_install_cmap(int con, struct fb_info *info);
extern int fbgen_update_var(int con, struct fb_info *info);
extern int fbgen_switch(int con, struct fb_info *info);
+extern int gen_switch(int con, struct fb_info *info);
extern int fbgen_blank(int blank, struct fb_info *info);
-extern void fbgen2_set_disp(int con, struct fb_info *info);
+extern void gen_set_disp(int con, struct fb_info *info);
/* drivers/video/fbmem.c */
extern int register_framebuffer(struct fb_info *fb_info);
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/include/video/fbcon.h linux/include/video/fbcon.h
--- linux-2.5.3-dj5/include/video/fbcon.h Mon Feb 11 11:37:44 2002
+++ linux/include/video/fbcon.h Mon Feb 11 17:42:58 2002
@@ -139,6 +139,8 @@
(((s) >> ((p)->bgshift)) & 0x0f)
#define attr_bgcol_ec(p,conp) \
((conp) ? (((conp)->vc_video_erase_char >> ((p)->bgshift)) & 0x0f) : 0)
+#define attr_fgcol_ec(p,vc) \
+ ((vc) ? (((vc)->vc_video_erase_char >> ((p)->fgshift)) & 0x0f) : 0)
/* Monochrome */
#define attr_bold(p,s) \
|
|
From: James S. <jsi...@tr...> - 2002-02-12 00:08:01
|
Hi folks!!
Here is the second run at a accel wrapper plus also new generic fbdev
functions totally depended on the new fbdev api. Makes it easy to port
drivers over :-) With your blessing Geert I like to have it included into
the DJ tree.
. ---
|o_o |
|:_/ | Give Micro$oft the Bird!!!!
// \ \ Use Linux!!!!
(| | )
/'_ _/`\
___)=(___/
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/Makefile linux/drivers/video/Makefile
--- linux-2.5.3-dj5/drivers/video/Makefile Mon Feb 11 11:37:39 2002
+++ linux/drivers/video/Makefile Mon Feb 11 12:00:48 2002
@@ -14,7 +14,7 @@
fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o \
fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
- fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o \
+ fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o fbcon-accel.o \
cyber2000fb.o sa1100fb.o fbcon-hga.o
# Each configuration option enables a list of files.
@@ -137,6 +137,7 @@
obj-$(CONFIG_FBCON_VGA) += fbcon-vga.o
obj-$(CONFIG_FBCON_HGA) += fbcon-hga.o
obj-$(CONFIG_FBCON_STI) += fbcon-sti.o
+obj-$(CONFIG_FBCON_ACCEL) += fbcon-accel.o
include $(TOPDIR)/Rules.make
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbcon-accel.c linux/drivers/video/fbcon-accel.c
--- linux-2.5.3-dj5/drivers/video/fbcon-accel.c Wed Dec 31 16:00:00 1969
+++ linux/drivers/video/fbcon-accel.c Mon Feb 11 16:52:44 2002
@@ -0,0 +1,188 @@
+/*
+ * linux/drivers/video/fbcon-accel.c -- Framebuffer accel console wrapper
+ *
+ * Created 20 Feb 2001 by James Simmons <jsi...@us...>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive for
+ * more details.
+ */
+
+#include <linux/module.h>
+#include <linux/tty.h>
+#include <linux/console.h>
+#include <linux/string.h>
+#include <linux/fb.h>
+
+#include <video/fbcon.h>
+#include "fbcon-accel.h"
+
+void fbcon_accel_setup(struct display *p)
+{
+ p->next_line = p->fb_info->fix.line_length;
+ p->next_plane = 0;
+}
+
+void fbcon_accel_bmove(struct display *p, int sy, int sx, int dy, int dx,
+ int height, int width)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_copyarea area;
+
+ area.sx = sx * fontwidth(p);
+ area.sy = sy * fontheight(p);
+ area.dx = dx * fontwidth(p);
+ area.dy = dy * fontheight(p);
+ area.height = height * fontheight(p);
+ area.width = width * fontwidth(p);
+
+ info->fbops->fb_copyarea(info, &area);
+}
+
+void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy, int sx,
+ int height, int width)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_fillrect region;
+
+ region.color = attr_bgcol_ec(p,vc);
+ region.dx = sx * fontwidth(p);
+ region.dy = sy * fontheight(p);
+ region.width = width * fontwidth(p);
+ region.height = height * fontheight(p);
+ region.rop = ROP_COPY;
+
+ info->fbops->fb_fillrect(info, ®ion);
+}
+
+void fbcon_accel_putc(struct vc_data *vc, struct display *p, int c, int yy,
+ int xx)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned short charmask = p->charmask;
+ unsigned int width = ((fontwidth(p)+7)>>3);
+ struct fb_image image;
+
+ image.fg_color = attr_fgcol(p, c);
+ image.bg_color = attr_bgcol(p, c);
+ image.dx = xx * fontwidth(p);
+ image.dy = yy * fontheight(p);
+ image.width = fontwidth(p);
+ image.height = fontheight(p);
+ image.depth = 1;
+ image.data = p->fontdata + (c & charmask)*fontheight(p)*width;
+
+ info->fbops->fb_imageblit(info, &image);
+}
+
+void fbcon_accel_putcs(struct vc_data *vc, struct display *p,
+ const unsigned short *s, int count, int yy, int xx)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned short charmask = p->charmask;
+ unsigned int width = ((fontwidth(p)+7)>>3);
+ struct fb_image image;
+
+ image.fg_color = attr_fgcol(p, *s);
+ image.bg_color = attr_bgcol(p, *s);
+ image.dx = xx * fontwidth(p);
+ image.dy = yy * fontheight(p);
+ image.width = fontwidth(p);
+ image.height = fontheight(p);
+ image.depth = 1;
+
+ while (count--) {
+ image.data = p->fontdata +
+ (scr_readw(s++) & charmask) * fontheight(p) * width;
+ info->fbops->fb_imageblit(info, &image);
+ image.dx += fontwidth(p);
+ }
+}
+
+void fbcon_accel_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info *info = p->fb_info;
+ struct fb_fillrect region;
+
+ region.color = attr_bgcol_ec(p, p->conp);
+ region.dx = xx * fontwidth(p);
+ region.dy = yy * fontheight(p);
+ region.width = fontwidth(p);
+ region.height = fontheight(p);
+ region.rop = ROP_XOR;
+
+ info->fbops->fb_fillrect(info, ®ion);
+}
+
+void fbcon_accel_clear_margins(struct vc_data *vc, struct display *p,
+ int bottom_only)
+{
+ struct fb_info *info = p->fb_info;
+ unsigned int cw = fontwidth(p);
+ unsigned int ch = fontheight(p);
+ unsigned int rw = info->var.xres % cw;
+ unsigned int bh = info->var.yres % ch;
+ unsigned int rs = info->var.xres - rw;
+ unsigned int bs = info->var.yres - bh;
+ struct fb_fillrect region;
+
+ region.color = attr_bgcol_ec(p,vc);
+ region.rop = ROP_COPY;
+
+ if (rw && !bottom_only) {
+ region.dx = info->var.xoffset + rs;
+ region.dy = 0;
+ region.width = rw;
+ region.height = info->var.yres_virtual;
+ info->fbops->fb_fillrect(info, ®ion);
+ }
+
+ if (bh) {
+ region.dx = info->var.xoffset;
+ region.dy = info->var.yoffset + bs;
+ region.width = rs;
+ region.height = bh;
+ info->fbops->fb_fillrect(info, ®ion);
+ }
+}
+
+ /*
+ * `switch' for the low level operations
+ */
+
+struct display_switch fbcon_accel = {
+ setup: fbcon_accel_setup,
+ bmove: fbcon_accel_bmove,
+ clear: fbcon_accel_clear,
+ putc: fbcon_accel_putc,
+ putcs: fbcon_accel_putcs,
+ revc: fbcon_accel_revc,
+ clear_margins: fbcon_accel_clear_margins,
+ fontwidthmask: ~1
+};
+
+#ifdef MODULE
+MODULE_LICENSE("GPL");
+
+int init_module(void)
+{
+ return 0;
+}
+
+void cleanup_module(void)
+{}
+#endif /* MODULE */
+
+
+ /*
+ * Visible symbols for modules
+ */
+
+EXPORT_SYMBOL(fbcon_accel);
+EXPORT_SYMBOL(fbcon_accel_setup);
+EXPORT_SYMBOL(fbcon_accel_bmove);
+EXPORT_SYMBOL(fbcon_accel_clear);
+EXPORT_SYMBOL(fbcon_accel_putc);
+EXPORT_SYMBOL(fbcon_accel_putcs);
+EXPORT_SYMBOL(fbcon_accel_revc);
+EXPORT_SYMBOL(fbcon_accel_clear_margins);
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbcon-accel.h linux/drivers/video/fbcon-accel.h
--- linux-2.5.3-dj5/drivers/video/fbcon-accel.h Wed Dec 31 16:00:00 1969
+++ linux/drivers/video/fbcon-accel.h Mon Feb 11 12:11:29 2002
@@ -0,0 +1,34 @@
+/*
+ * FBcon low-level driver for 32 bpp packed pixel (cfb32)
+ */
+
+#ifndef _VIDEO_FBCON_ACCEL_H
+#define _VIDEO_FBCON_ACCEL_H
+
+#include <linux/config.h>
+
+#ifdef MODULE
+#if defined(CONFIG_FBCON_ACCEL) || defined(CONFIG_FBCON_ACCEL_MODULE)
+#define FBCON_HAS_ACCEL
+#endif
+#else
+#if defined(CONFIG_FBCON_ACCEL)
+#define FBCON_HAS_ACCEL
+#endif
+#endif
+
+extern struct display_switch fbcon_accel;
+extern void fbcon_accel_setup(struct display *p);
+extern void fbcon_accel_bmove(struct display *p, int sy, int sx, int dy,
+ int dx, int height, int width);
+extern void fbcon_accel_clear(struct vc_data *vc, struct display *p, int sy,
+ int sx, int height, int width);
+extern void fbcon_accel_putc(struct vc_data *vc, struct display *p, int c,
+ int yy, int xx);
+extern void fbcon_accel_putcs(struct vc_data *vc, struct display *p,
+ const unsigned short *s, int count, int yy, int xx);
+extern void fbcon_accel_revc(struct display *p, int xx, int yy);
+extern void fbcon_accel_clear_margins(struct vc_data *vc, struct display *p,
+ int bottom_only);
+
+#endif /* _VIDEO_FBCON_ACCEL_H */
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/drivers/video/fbgen.c linux/drivers/video/fbgen.c
--- linux-2.5.3-dj5/drivers/video/fbgen.c Mon Feb 11 11:37:40 2002
+++ linux/drivers/video/fbgen.c Mon Feb 11 11:53:50 2002
@@ -21,6 +21,14 @@
#include <asm/io.h>
#include <video/fbcon.h>
+#include <video/fbcon-mfb.h>
+#include <video/fbcon-cfb2.h>
+#include <video/fbcon-cfb4.h>
+#include <video/fbcon-cfb8.h>
+#include <video/fbcon-cfb16.h>
+#include <video/fbcon-cfb24.h>
+#include <video/fbcon-cfb32.h>
+#include "fbcon-accel.h"
/* ---- `Generic' versions of the frame buffer device operations ----------- */
@@ -56,6 +64,11 @@
return fbhw->encode_fix(fix, &par, info2);
}
+int gen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info)
+{
+ *fix = info->fix;
+ return 0;
+}
/**
* fbgen_get_var - get user defined part of display
@@ -84,6 +97,11 @@
return 0;
}
+int gen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
+{
+ *var = info->var;
+ return 0;
+}
/**
* fbgen_set_var - set the user defined part of display
@@ -132,6 +150,41 @@
}
+int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
+{
+ int err;
+
+ if (con < 0 || (memcpy(&info->var, var, sizeof(struct fb_var_screeninfo)))) {
+ if (!info->fbops->fb_check_var) {
+ *var = info->var;
+ return 0;
+ }
+
+ if ((err = info->fbops->fb_check_var(var, info)))
+ return err;
+
+ if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) {
+ info->var = *var;
+
+ gen_set_disp(con, info);
+
+ if (con == info->currcon) {
+ if (info->fbops->fb_set_par)
+ info->fbops->fb_set_par(info);
+
+ if (info->fbops->fb_pan_display)
+ info->fbops->fb_pan_display(&info->var, con, info);
+
+ fb_set_cmap(&info->cmap, 1, info);
+ }
+
+ if (info->changevar)
+ info->changevar(con);
+ }
+ }
+ return 0;
+}
+
/**
* fbgen_get_cmap - get the colormap
* @cmap: frame buffer colormap structure
@@ -164,6 +217,11 @@
return 0;
}
+int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info)
+{
+ fb_copy_cmap (&info->cmap, cmap, kspc ? 0 : 2);
+ return 0;
+}
/**
* fbgen_set_cmap - set the colormap
@@ -196,6 +254,30 @@
return 0;
}
+int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info)
+{
+ struct display *disp = (con < 0) ? info->disp : (fb_display + con);
+ struct fb_cmap *dcmap = &disp->cmap;
+ int err = 0;
+
+ /* No colormap allocated ? */
+ if (!dcmap->len) {
+ int size = info->cmap.len;
+
+ err = fb_alloc_cmap(dcmap, size, 0);
+ }
+
+
+ if (!err && con == info->currcon) {
+ err = fb_set_cmap(cmap, kspc, info);
+ dcmap = &info->cmap;
+ }
+
+ if (!err)
+ fb_copy_cmap(cmap, dcmap, kspc ? 0 : 1);
+ return err;
+}
/**
* fbgen_pan_display - pan or wrap the display
@@ -277,7 +359,6 @@
return 0;
}
-
/**
* fbgen_set_disp - set generic display
* @con: virtual console number
@@ -325,6 +406,93 @@
#endif
}
+void gen_set_disp(int con, struct fb_info *info)
+{
+ struct display *display;
+
+ if (con >= 0)
+ display = fb_display + con;
+ else
+ display = info->disp;
+
+#ifdef FBCON_HAS_ACCEL
+ if (info->var.accel_flags & FB_ACCELF_TEXT) {
+ display->dispsw = &fbcon_accel;
+ return;
+ }
+#endif
+
+ switch (info->var.bits_per_pixel)
+ {
+#ifdef FBCON_HAS_MFB
+ case 1:
+ display->dispsw = &fbcon_mfb;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB2
+ case 2:
+ display->dispsw = &fbcon_cfb2;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB4
+ case 4:
+ display->dispsw = &fbcon_cfb4;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB8
+ case 8:
+ display->dispsw = &fbcon_cfb8;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB16
+ case 16:
+ display->dispsw = &fbcon_cfb16;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB24:
+ case 24:
+ display->dispsw = &fbcon_cfb24;
+ break;
+#endif
+
+#ifdef FBCON_HAS_CFB32
+ case 32:
+ display->dispsw = &fbcon_cfb32;
+ break;
+#endif
+ default:
+ display->dispsw = &fbcon_dummy;
+ break;
+ }
+
+ display->visual = info->fix.visual;
+ display->type = info->fix.type;
+ display->type_aux = info->fix.type_aux;
+ display->ypanstep = info->fix.ypanstep;
+ display->ywrapstep = info->fix.ywrapstep;
+ display->line_length = info->fix.line_length;
+ if (info->fbops->fb_blank || info->fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+ info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+ display->can_soft_blank = 1;
+ display->dispsw_data = NULL;
+ } else {
+ display->can_soft_blank = 0;
+ display->dispsw_data = info->pseudo_palette;
+ }
+ display->var = info->var;
+
+ /*
+ * If we are setting all the virtual consoles, also set
+ * the defaults used to create new consoles.
+ */
+ if (info->var.activate & FB_ACTIVATE_ALL)
+ info->disp->var = info->var;
+}
/**
* do_install_cmap - install the current colormap
@@ -404,6 +572,46 @@
}
+int gen_switch(int con, struct fb_info *info)
+{
+ struct display *disp;
+ struct fb_cmap *cmap;
+
+ if (info->currcon >= 0) {
+ disp = fb_display + info->currcon;
+
+ /*
+ * Save the old colormap and graphics mode.
+ */
+ disp->var = info->var;
+ if (disp->cmap.len)
+ fb_copy_cmap(&info->cmap, &disp->cmap, 0);
+ }
+
+ info->currcon = con;
+ disp = fb_display + con;
+
+ /*
+ * Install the new colormap and change the graphics mode. By default
+ * fbcon sets all the colormaps and graphics modes to the default
+ * values at bootup.
+ *
+ * Really, we want to set the colormap size depending on the
+ * depth of the new grpahics mode. For now, we leave it as its
+ * default 256 entry.
+ */
+ if (disp->cmap.len)
+ cmap = &disp->cmap;
+ else
+ cmap = fb_default_cmap(1 << disp->var.bits_per_pixel);
+
+ fb_copy_cmap(cmap, &info->cmap, 0);
+
+ disp->var.activate = FB_ACTIVATE_NOW;
+ info->fbops->fb_set_var(&disp->var, con, info);
+ return 0;
+}
+
/**
* fbgen_blank - blank the screen
* @blank: boolean, 0 unblank, 1 blank
@@ -438,10 +646,15 @@
/* generic frame buffer operations */
EXPORT_SYMBOL(fbgen_get_fix);
+EXPORT_SYMBOL(gen_get_fix);
EXPORT_SYMBOL(fbgen_get_var);
+EXPORT_SYMBOL(gen_get_var);
EXPORT_SYMBOL(fbgen_set_var);
+EXPORT_SYMBOL(gen_set_var);
EXPORT_SYMBOL(fbgen_get_cmap);
+EXPORT_SYMBOL(gen_get_cmap);
EXPORT_SYMBOL(fbgen_set_cmap);
+EXPORT_SYMBOL(gen_set_cmap);
EXPORT_SYMBOL(fbgen_pan_display);
/* helper functions */
EXPORT_SYMBOL(fbgen_do_set_var);
@@ -449,6 +662,7 @@
EXPORT_SYMBOL(do_install_cmap);
EXPORT_SYMBOL(fbgen_update_var);
EXPORT_SYMBOL(fbgen_switch);
+EXPORT_SYMBOL(gen_switch);
EXPORT_SYMBOL(fbgen_blank);
MODULE_LICENSE("GPL");
diff -urN -X /home/jsimmons/dontdiff linux-2.5.3-dj5/include/linux/fb.h linux/include/linux/fb.h
--- linux-2.5.3-dj5/include/linux/fb.h Mon Feb 11 11:37:44 2002
+++ linux/include/linux/fb.h Mon Feb 11 11:59:26 2002
@@ -379,9 +379,6 @@
/* tell fb to switch consoles */
int (*updatevar)(int, struct fb_info*);
/* tell fb to update the vars */
- void (*blank)(int, struct fb_info*); /* tell fb to (un)blank the screen */
- /* arg = 0: unblank */
- /* arg > 0: VESA level (arg-1) */
void *pseudo_palette; /* Fake palette of 16 colors and
the cursor's color for non
palette mode */
@@ -437,14 +434,24 @@
extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
struct fb_info *info);
+extern int gen_get_fix(struct fb_fix_screeninfo *fix, int con,
+ struct fb_info *info);
extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
+extern int gen_get_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
+extern int gen_set_var(struct fb_var_screeninfo *var, int con,
+ struct fb_info *info);
extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info);
+extern int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info);
+extern int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
+ struct fb_info *info);
extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
struct fb_info *info);
extern void cfb_fillrect(struct fb_info *p, struct fb_fillrect *rect);
@@ -461,9 +468,10 @@
extern void do_install_cmap(int con, struct fb_info *info);
extern int fbgen_update_var(int con, struct fb_info *info);
extern int fbgen_switch(int con, struct fb_info *info);
+extern int gen_switch(int con, struct fb_info *info);
extern int fbgen_blank(int blank, struct fb_info *info);
-extern void fbgen2_set_disp(int con, struct fb_info *info);
+extern void gen_set_disp(int con, struct fb_info *info);
/* drivers/video/fbmem.c */
extern int register_framebuffer(struct fb_info *fb_info);
|
|
From: Michel <mi...@da...> - 2002-02-11 15:13:44
|
On Fre, 2002-02-08 at 22:02, cw...@so... wrote: > I'm just curious, is it legal for me to derive a fb driver from xfree86=20 > sources, and distribute it with the kernel. I'm not sure about the licen= se of=20 > things for xfree, i figured someone here may know more. The X license is BSD style, so I _think_ this should be fine. It's probably still a good idea to ask the copyright holder(s) and/or author(s) for permission. Out of curiosity, which driver is this about? --=20 Earthling Michel D=E4nzer (MrCooper)/ Debian GNU/Linux (powerpc) developer XFree86 and DRI project member / CS student, Free Software enthusiast |
|
From: Udo S. <ud...@ar...> - 2002-02-10 00:16:43
|
Hello all, I own a Radeon VE (/proc/pci reports a Radeon QY VE) with DVI output. If working the DVI output is the primary screen, an additional VGA connector attaches to a secondary screen. Using Linux 2.2.18-pre9 the kernel crashed when switching to the Radeon framebuffer if I connect a digital display. Older drivers always crash. When connecting an analog display, it works fine. I'd like to give a useful bug report, however, the crash leaves me without a console, so for the time being, I don't have any details. Has anyone any hints what goes wrong? Could I fix the (suspected) problem with DVI output? If so, how? ATI refused to provide me with technical specs... I noticed another problem. The Radeon VE can drive two screens independently. Therefore I think I should get two framebuffers, one for each screen, shouldn't I? That turns out to be not the case, I get one framebuffer and both screen show the same content. Quite useless. How is this? How do I fix it, if at all possible? TIA, Udo. --=20 Live is hard because it is non-linear. |
|
From: Miles L. <mi...@me...> - 2002-02-08 21:10:54
|
xp...@xf... would be an excellent place to ask this question. Miles On Fri, 2002-02-08 at 13:02, cw...@so... wrote: > Hello all > > I'm just curious, is it legal for me to derive a fb driver from xfree86 > sources, and distribute it with the kernel. I'm not sure about the license of > things for xfree, i figured someone here may know more. > > thanks =) > chris > > > _______________________________________________ > Linux-fbdev-devel mailing list > Lin...@li... > https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel |
|
From: <cw...@so...> - 2002-02-08 21:00:59
|
Hello all I'm just curious, is it legal for me to derive a fb driver from xfree86 sources, and distribute it with the kernel. I'm not sure about the license of things for xfree, i figured someone here may know more. thanks =) chris |
|
From: Geert U. <ge...@li...> - 2002-02-08 19:08:31
|
On Fri, 8 Feb 2002, James Simmons wrote:
> > Since Tridentfb uses resource management, its initialization must be done
> > before the initialization of the generic drivers (vesafb and offb).
>
> I assume you mean the pci_resource_xxx stuff. We really need to move all
I meant request_{,mem_}region() (or request_resource()).
> the drivers to this.
Indeed.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: James S. <jsi...@tr...> - 2002-02-08 17:26:42
|
> Since Tridentfb uses resource management, its initialization must be done > before the initialization of the generic drivers (vesafb and offb). I assume you mean the pci_resource_xxx stuff. We really need to move all the drivers to this. |
|
From: Geert U. <ge...@li...> - 2002-02-08 16:45:16
|
Hi Jani and Marcelo,
Since Tridentfb uses resource management, its initialization must be done
before the initialization of the generic drivers (vesafb and offb).
--- linux-2.4.18-pre9/drivers/video/fbmem.c.orig Fri Feb 8 09:39:18 2002
+++ linux-2.4.18-pre9/drivers/video/fbmem.c Fri Feb 8 17:40:30 2002
@@ -207,6 +207,9 @@
#ifdef CONFIG_FB_SIS
{ "sisfb", sisfb_init, sisfb_setup },
#endif
+#ifdef CONFIG_FB_TRIDENT
+ { "trident", tridentfb_init, tridentfb_setup },
+#endif
/*
* Generic drivers that are used as fallbacks
@@ -229,9 +232,6 @@
#ifdef CONFIG_FB_3DFX
{ "tdfx", tdfxfb_init, tdfxfb_setup },
-#endif
-#ifdef CONFIG_FB_TRIDENT
- { "trident", tridentfb_init, tridentfb_setup },
#endif
#ifdef CONFIG_FB_SGIVW
{ "sgivw", sgivwfb_init, sgivwfb_setup },
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li...
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
|
|
From: <da...@de...> - 2002-02-08 13:58:36
|
On Fri, 8 Feb 2002, Geert Uytterhoeven wrote: > I gave it a try on my Sony Vaio PCG-Z600TEK. Unfortunately the screen was > either black (booted without arguments, i.e. in 640x480) or grey (booted = with > video=3D1024x768-60). When I typed (blindly), I saw some flicker on each = line > feed. Using fbset didn't change anything. >=20 > Relevant dmesg output: > | atyfb: using auxiliary register aperture > | atyfb: Mach64 BIOS is located at c0000, mapped at c00c0000. > | atyfb: BIOS contains driver information table. > | atyfb: colour active matrix monitor detected: Hitachi TX31D72VC1CAA =20 > | id=3D2, 1024x768 pixels, 262144 colours (LT mode) > | supports 60 Hz refresh rates, default 60 Hz > | LCD CRTC parameters: 15384 167 127 130 0 17 805 767 769 6 > | atyfb: 3D RAGE Mobility (PCI) [0x4c4d rev 0x64] 8M SDRAM, 29.498928 MHz= XTAL, 230 MHz PLL, 50 Mhz MCLK > | Console: switching to colour frame buffer device 80x25 > | fb0: ATY Mach64 frame buffer device on PCI >=20 > Dani=EBl: IIRC, you have a RAGE LT PRO. Did you get any success stories f= rom > people with a RAGE Mobility? Okay, still not perfect, it seems :( I think the problem must be your monitor, because the chapter about LCD in documentation of the LT PRO and the Mobility is exactly the same. Could you try to connect a conventional monitor to your laptop and try to boot it in the reference video mode (1024x768x60 Hz)? Make sure your LCD monitor is also switched on, otherwise the patch will do nothing. If the CRT image is not correct, something goes wrong with the LCD CRTC parameters. Dani=EBl Mantione |
|
From: Geert U. <Gee...@so...> - 2002-02-08 13:36:31
|
On Thu, 7 Feb 2002, Marcelo Tosatti wrote:
> This may interest you...
I already knew about the patch, but never tried it before...
> ---------- Forwarded message ----------
> Date: Thu, 7 Feb 2002 15:03:17 +0100 (CET)
> From: Dani=EBl Mantione <da...@de...>
> To: ma...@co...
> Subject: Patch: Make atyfb framebuffer device support LCD monitors
>=20
> Hello!
>=20
> It took me a long time to get it working, my first attempt to make it w=
ork
> was 2 1/2 year ago, but it finally works; I can use the Atyfb framebuff=
er
> device driver on my laptop!!!
I gave it a try on my Sony Vaio PCG-Z600TEK. Unfortunately the screen was
either black (booted without arguments, i.e. in 640x480) or grey (booted =
with
video=3D1024x768-60). When I typed (blindly), I saw some flicker on each =
line
feed. Using fbset didn't change anything.
Relevant dmesg output:
| atyfb: using auxiliary register aperture
| atyfb: Mach64 BIOS is located at c0000, mapped at c00c0000.
| atyfb: BIOS contains driver information table.
| atyfb: colour active matrix monitor detected: Hitachi TX31D72VC1CAA =20
| id=3D2, 1024x768 pixels, 262144 colours (LT mode)
| supports 60 Hz refresh rates, default 60 Hz
| LCD CRTC parameters: 15384 167 127 130 0 17 805 767 769 6
| atyfb: 3D RAGE Mobility (PCI) [0x4c4d rev 0x64] 8M SDRAM, 29.498928 MHz=
XTAL, 230 MHz PLL, 50 Mhz MCLK
| Console: switching to colour frame buffer device 80x25
| fb0: ATY Mach64 frame buffer device on PCI
Dani=EBl: IIRC, you have a RAGE LT PRO. Did you get any success stories f=
rom
people with a RAGE Mobility?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m6=
8k.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
|
|
From: James S. <jsi...@tr...> - 2002-01-31 19:07:57
|
> as I see few of the drivers actually care about > the interlace and doublescan flags in the vmode field of var. > And the same goes for vsync and hsync polarities flags. > Are these not mandatory in order to set good video modes? > Or are they there only for old VGA monitors' sake? You don't have to use them. Tho using them is not a bad idea :-) |
|
From: Jani M. <ja...@as...> - 2002-01-31 08:53:48
|
Hi as I see few of the drivers actually care about the interlace and doublescan flags in the vmode field of var. And the same goes for vsync and hsync polarities flags. Are these not mandatory in order to set good video modes? Or are they there only for old VGA monitors' sake? Thanks Jani. |
|
From: Hihn J. <Jas...@DA...> - 2002-01-30 21:53:46
|
I have the HHL one. But the one Wolfgang referred to looks pretty much the same. Other than the inclusion of a mmap() function, more LCD panels, #ifdef debugs, and some small symantec differences, they are the same. No functionality is removed. You could probably just use his driver, and skip a merge, probably. Of the things I needed to do: the power off/on was one. text mode emulation was another. (adding an auto-blitted text plane) (Does this already exist somehow for frame buffer console device?) I can have this done in application code, but I think it'd be a faster port if I could hand off text to the kernel... Perhaps I'm still a bit wet behind the ears.. I thought IOCTLs were for anything that didn't match the open/read/write/close file style interface, thereby making a power on/off a IOCTL. How would you go about implementing those? Thanks -J -----Original Message----- From: Paul Mundt [mailto:le...@Ch...] Sent: Wednesday, January 30, 2002 4:05 PM To: Hihn Jason Cc: lin...@li... Subject: Re: [Linux-fbdev-devel] PPC 832 LCD Driver questions On Wed, Jan 30, 2002 at 09:57:38PM +0100, Hihn Jason wrote: > I have the stock driver from the bzip mentioned today. (Which I also > compared to the 2.2 driver, which is eerily similar.) Where could I find > this other driver of which you speak? > > Sorry about the barrage of questions earlier, but I was really wondering why > no one has done those things yet. It seems to be a simple matter that even > _I_ could do. ;) > There's two drivers for this.. the one in the linuxppc tree (maintained by Wolfgang Denk, and the one in the MontaVista Linux (formerly HHL) tree which is maintained by myself. Have been meaning to merge the two.. but lack of time is a rather irritating nuisance. If one of them doesn't have what you're looking for, you might wish to consult the other one before making any decisions over what to start hacking on.. As far as things like the ioctl() interface.. there really isn't much need for it, since there isn't a whole lot that's needed in this case. Even powering the panel on and off isn't worth dealing with through the ioctl() interface. Is there anything in particular that you really have a need for the ioctl() for? Regards, -- Paul Mundt <le...@ch...> |