* Q40 fbdev updates.
@ 2004-04-23 23:01 James Simmons
2004-04-25 11:23 ` Geert Uytterhoeven
0 siblings, 1 reply; 5+ messages in thread
From: James Simmons @ 2004-04-23 23:01 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Linux Fbdev development list, Richard.Zidlicky
Could you examine and test my code for the Q40 fbdev driver. Thanks.
diff -urN -X /home/jsimmons/dontdiff linus-2.6/drivers/video/q40fb.c fbdev-2.6/drivers/video/q40fb.c
--- linus-2.6/drivers/video/q40fb.c 2004-04-23 15:01:42.000000000 -0700
+++ fbdev-2.6/drivers/video/q40fb.c 2004-04-23 10:52:56.000000000 -0700
@@ -30,9 +30,6 @@
#define Q40_PHYS_SCREEN_ADDR 0xFE800000
-static u32 pseudo_palette[17];
-static struct fb_info fb_info;
-
static struct fb_fix_screeninfo q40fb_fix __initdata = {
.id = "Q40",
.smem_len = 1024*1024,
@@ -57,22 +54,6 @@
.vmode = FB_VMODE_NONINTERLACED,
};
-/* frame buffer operations */
-int q40fb_init(void);
-
-static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green,
- unsigned blue, unsigned transp,
- struct fb_info *info);
-
-static struct fb_ops q40fb_ops = {
- .owner = THIS_MODULE,
- .fb_setcolreg = q40fb_setcolreg,
- .fb_fillrect = cfb_fillrect,
- .fb_copyarea = cfb_copyarea,
- .fb_imageblit = cfb_imageblit,
- .fb_cursor = soft_cursor,
-};
-
static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green,
unsigned blue, unsigned transp,
struct fb_info *info)
@@ -82,46 +63,91 @@
* magnitude.
* Return != 0 for invalid regno.
*/
-
+
+ if (regno > 255)
+ return 1;
red>>=11;
green>>=11;
blue>>=10;
if (regno < 16) {
- ((u16 *)info->pseudo_palette)[regno] = ((red & 31) <<6) |
+ ((u32 *)info->pseudo_palette)[regno] = ((red & 31) <<6) |
((green & 31) << 11) |
(blue & 63);
}
return 0;
}
-int q40fb_init(void)
+static struct fb_ops q40fb_ops = {
+ .owner = THIS_MODULE,
+ .fb_setcolreg = q40fb_setcolreg,
+ .fb_fillrect = cfb_fillrect,
+ .fb_copyarea = cfb_copyarea,
+ .fb_imageblit = cfb_imageblit,
+ .fb_cursor = soft_cursor,
+};
+
+static int __init q40fb_probe(struct device *device)
{
if ( !MACH_IS_Q40)
return -ENXIO;
/* mapped in q40/config.c */
q40fb_fix.smem_start = Q40_PHYS_SCREEN_ADDR;
-
- fb_info.var = q40fb_var;
- fb_info.fix = q40fb_fix;
- fb_info.fbops = &q40fb_ops;
- fb_info.flags = FBINFO_FLAG_DEFAULT; /* not as module for now */
- fb_info.pseudo_palette = pseudo_palette;
- fb_info.screen_base = (char *) q40fb_fix.smem_start;
- fb_alloc_cmap(&fb_info.cmap, 16, 0);
+ info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
+ if (!info)
+ return -ENOMEM;
+
+ info->var = q40fb_var;
+ info->fix = q40fb_fix;
+ info->fbops = &q40fb_ops;
+ info->flags = FBINFO_FLAG_DEFAULT; /* not as module for now */
+ info->pseudo_palette = info->par;
+ info->par = NULL;
+ info->screen_base = (char *) q40fb_fix.smem_start;
+
+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0)
+ framebuffer_release(info);
+ return -ENOMEM;
+ }
master_outb(3, DISPLAY_CONTROL_REG);
- if (register_framebuffer(&fb_info) < 0) {
+ if (register_framebuffer(info) < 0) {
printk(KERN_ERR "Unable to register Q40 frame buffer\n");
+ fb_dealloc_cmap(&info->cmap);
+ framebuffer_release(info);
return -EINVAL;
}
printk(KERN_INFO "fb%d: Q40 frame buffer alive and kicking !\n",
- fb_info.node);
+ info->node);
return 0;
}
+static struct device_driver q40fb_driver = {
+ .name = "q40fb",
+ .bus = &platform_bus_type,
+ .probe = q40fb_probe,
+};
+
+static struct platform_device q40fb_device = {
+ .name = "q40fb",
+};
+
+int __init q40fb_init(void)
+{
+ int ret = 0;
+
+ ret = driver_register(&q40fb_driver);
+
+ if (!ret) {
+ ret = platform_device_register(&q40fb_device);
+ if (ret)
+ driver_unregister(&q40fb_driver);
+ }
+ return ret;
+}
+
MODULE_LICENSE("GPL");
-------------------------------------------------------
This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek
For a limited time only, get FREE Ground shipping on all orders of $35
or more. Hurry up and shop folks, this offer expires April 30th!
http://www.thinkgeek.com/freeshipping/?cpg=12297
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: Q40 fbdev updates. 2004-04-23 23:01 Q40 fbdev updates James Simmons @ 2004-04-25 11:23 ` Geert Uytterhoeven 2004-04-27 0:15 ` James Simmons 0 siblings, 1 reply; 5+ messages in thread From: Geert Uytterhoeven @ 2004-04-25 11:23 UTC (permalink / raw) To: James Simmons; +Cc: Linux Fbdev development list, Richard.Zidlicky On Sat, 24 Apr 2004, James Simmons wrote: > Could you examine and test my code for the Q40 fbdev driver. Thanks. I gave it a run through my cross-compiler... A few fixes for q40fb_probe(): - Add missing variable `info' - Add missing variable 'dev' and its initialization - Add missing opening curly brace I also removed all c_space_errors according to vim. --- linux-m68k-2.6.6-rc2/drivers/video/q40fb.c.orig 2004-04-25 12:23:15.000000000 +0200 +++ linux-m68k-2.6.6-rc2/drivers/video/q40fb.c 2004-04-25 13:17:52.000000000 +0200 @@ -1,7 +1,7 @@ -/* +/* * linux/drivers/video/q40fb.c -- Q40 frame buffer device * - * Copyright (C) 2001 + * Copyright (C) 2001 * * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de> * @@ -45,7 +45,7 @@ .xres_virtual = 1024, .yres_virtual = 512, .bits_per_pixel = 16, - .red = {6, 5, 0}, + .red = {6, 5, 0}, .green = {11, 5, 0}, .blue = {0, 6, 0}, .activate = FB_ACTIVATE_NOW, @@ -55,7 +55,7 @@ }; static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, + unsigned blue, unsigned transp, struct fb_info *info) { /* @@ -63,7 +63,7 @@ * magnitude. * Return != 0 for invalid regno. */ - + if (regno > 255) return 1; red>>=11; @@ -89,8 +89,11 @@ static int __init q40fb_probe(struct device *device) { - if ( !MACH_IS_Q40) - return -ENXIO; + struct platform_device *dev = to_platform_device(device); + struct fb_info *info; + + if (!MACH_IS_Q40) + return -ENXIO; /* mapped in q40/config.c */ q40fb_fix.smem_start = Q40_PHYS_SCREEN_ADDR; @@ -98,19 +101,19 @@ info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); if (!info) return -ENOMEM; - + info->var = q40fb_var; info->fix = q40fb_fix; info->fbops = &q40fb_ops; info->flags = FBINFO_FLAG_DEFAULT; /* not as module for now */ info->pseudo_palette = info->par; info->par = NULL; - info->screen_base = (char *) q40fb_fix.smem_start; + info->screen_base = (char *) q40fb_fix.smem_start; - if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) + if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { framebuffer_release(info); return -ENOMEM; - } + } master_outb(3, DISPLAY_CONTROL_REG); @@ -139,7 +142,7 @@ int __init q40fb_init(void) { int ret = 0; - + ret = driver_register(&q40fb_driver); if (!ret) { @@ -150,4 +153,4 @@ return ret; } -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL"); Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.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 ------------------------------------------------------- This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek For a limited time only, get FREE Ground shipping on all orders of $35 or more. Hurry up and shop folks, this offer expires April 30th! http://www.thinkgeek.com/freeshipping/?cpg=12297 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Q40 fbdev updates. 2004-04-25 11:23 ` Geert Uytterhoeven @ 2004-04-27 0:15 ` James Simmons 2004-05-05 20:51 ` Richard Zidlicky 0 siblings, 1 reply; 5+ messages in thread From: James Simmons @ 2004-04-27 0:15 UTC (permalink / raw) To: Geert Uytterhoeven; +Cc: Linux Fbdev development list, Richard.Zidlicky Applied your changes. On Sun, 25 Apr 2004, Geert Uytterhoeven wrote: > On Sat, 24 Apr 2004, James Simmons wrote: > > Could you examine and test my code for the Q40 fbdev driver. Thanks. > > I gave it a run through my cross-compiler... > > A few fixes for q40fb_probe(): > - Add missing variable `info' > - Add missing variable 'dev' and its initialization > - Add missing opening curly brace > > I also removed all c_space_errors according to vim. > > --- linux-m68k-2.6.6-rc2/drivers/video/q40fb.c.orig 2004-04-25 12:23:15.000000000 +0200 > +++ linux-m68k-2.6.6-rc2/drivers/video/q40fb.c 2004-04-25 13:17:52.000000000 +0200 > @@ -1,7 +1,7 @@ > -/* > +/* > * linux/drivers/video/q40fb.c -- Q40 frame buffer device > * > - * Copyright (C) 2001 > + * Copyright (C) 2001 > * > * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de> > * > @@ -45,7 +45,7 @@ > .xres_virtual = 1024, > .yres_virtual = 512, > .bits_per_pixel = 16, > - .red = {6, 5, 0}, > + .red = {6, 5, 0}, > .green = {11, 5, 0}, > .blue = {0, 6, 0}, > .activate = FB_ACTIVATE_NOW, > @@ -55,7 +55,7 @@ > }; > > static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, > - unsigned blue, unsigned transp, > + unsigned blue, unsigned transp, > struct fb_info *info) > { > /* > @@ -63,7 +63,7 @@ > * magnitude. > * Return != 0 for invalid regno. > */ > - > + > if (regno > 255) > return 1; > red>>=11; > @@ -89,8 +89,11 @@ > > static int __init q40fb_probe(struct device *device) > { > - if ( !MACH_IS_Q40) > - return -ENXIO; > + struct platform_device *dev = to_platform_device(device); > + struct fb_info *info; > + > + if (!MACH_IS_Q40) > + return -ENXIO; > > /* mapped in q40/config.c */ > q40fb_fix.smem_start = Q40_PHYS_SCREEN_ADDR; > @@ -98,19 +101,19 @@ > info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); > if (!info) > return -ENOMEM; > - > + > info->var = q40fb_var; > info->fix = q40fb_fix; > info->fbops = &q40fb_ops; > info->flags = FBINFO_FLAG_DEFAULT; /* not as module for now */ > info->pseudo_palette = info->par; > info->par = NULL; > - info->screen_base = (char *) q40fb_fix.smem_start; > + info->screen_base = (char *) q40fb_fix.smem_start; > > - if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) > + if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { > framebuffer_release(info); > return -ENOMEM; > - } > + } > > master_outb(3, DISPLAY_CONTROL_REG); > > @@ -139,7 +142,7 @@ > int __init q40fb_init(void) > { > int ret = 0; > - > + > ret = driver_register(&q40fb_driver); > > if (!ret) { > @@ -150,4 +153,4 @@ > return ret; > } > > -MODULE_LICENSE("GPL"); > +MODULE_LICENSE("GPL"); > > Gr{oetje,eeting}s, > > Geert > > -- > Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.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 > ------------------------------------------------------- This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek For a limited time only, get FREE Ground shipping on all orders of $35 or more. Hurry up and shop folks, this offer expires April 30th! http://www.thinkgeek.com/freeshipping/?cpg=12297 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Q40 fbdev updates. 2004-04-27 0:15 ` James Simmons @ 2004-05-05 20:51 ` Richard Zidlicky 2004-05-07 17:32 ` James Simmons 0 siblings, 1 reply; 5+ messages in thread From: Richard Zidlicky @ 2004-05-05 20:51 UTC (permalink / raw) To: James Simmons Cc: Geert Uytterhoeven, Linux Fbdev development list, Richard.Zidlicky On Tue, Apr 27, 2004 at 01:15:53AM +0100, James Simmons wrote: > > Applied your changes. > Thanks guys, works perfectly, especially the odd colormap problem is now gone :) - fix email addr --- q40fb.c.orig 2004-05-05 22:01:08.000000000 +0200 +++ q40fb.c 2004-05-05 22:25:02.000000000 +0200 @@ -3,7 +3,7 @@ * * Copyright (C) 2001 * - * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de> + * Richard Zidlicky <rz@linux-m68k.org> * * 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 Richard ------------------------------------------------------- This SF.Net email is sponsored by Sleepycat Software Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to deliver higher performing products faster, at low TCO. http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Q40 fbdev updates. 2004-05-05 20:51 ` Richard Zidlicky @ 2004-05-07 17:32 ` James Simmons 0 siblings, 0 replies; 5+ messages in thread From: James Simmons @ 2004-05-07 17:32 UTC (permalink / raw) To: Andrew Morton; +Cc: Geert Uytterhoeven, Linux Fbdev development list, rz On Wed, 5 May 2004, Richard Zidlicky wrote: > Thanks guys, works perfectly, especially the odd colormap > problem is now gone :) Andrew please apply this patch. It ports this driver to sysfs api and fixes a colormap issue. --- linus-2.6/drivers/video/q40fb.c 2004-05-06 17:02:06.000000000 -0700 +++ fbdev-2.6/drivers/video/q40fb.c 2004-05-07 09:52:22.000000000 -0700 @@ -1,9 +1,9 @@ -/* +/* * linux/drivers/video/q40fb.c -- Q40 frame buffer device * - * Copyright (C) 2001 + * Copyright (C) 2001 * - * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de> + * Richard Zidlicky <rz@linux-m68k.org> * * 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 @@ -30,9 +30,6 @@ #define Q40_PHYS_SCREEN_ADDR 0xFE800000 -static u32 pseudo_palette[17]; -static struct fb_info fb_info; - static struct fb_fix_screeninfo q40fb_fix __initdata = { .id = "Q40", .smem_len = 1024*1024, @@ -48,7 +45,7 @@ .xres_virtual = 1024, .yres_virtual = 512, .bits_per_pixel = 16, - .red = {6, 5, 0}, + .red = {6, 5, 0}, .green = {11, 5, 0}, .blue = {0, 6, 0}, .activate = FB_ACTIVATE_NOW, @@ -57,24 +54,8 @@ .vmode = FB_VMODE_NONINTERLACED, }; -/* frame buffer operations */ -int q40fb_init(void); - -static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, - struct fb_info *info); - -static struct fb_ops q40fb_ops = { - .owner = THIS_MODULE, - .fb_setcolreg = q40fb_setcolreg, - .fb_fillrect = cfb_fillrect, - .fb_copyarea = cfb_copyarea, - .fb_imageblit = cfb_imageblit, - .fb_cursor = soft_cursor, -}; - static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, + unsigned blue, unsigned transp, struct fb_info *info) { /* @@ -82,46 +63,94 @@ * magnitude. * Return != 0 for invalid regno. */ - + + if (regno > 255) + return 1; red>>=11; green>>=11; blue>>=10; if (regno < 16) { - ((u16 *)info->pseudo_palette)[regno] = ((red & 31) <<6) | + ((u32 *)info->pseudo_palette)[regno] = ((red & 31) <<6) | ((green & 31) << 11) | (blue & 63); } return 0; } -int q40fb_init(void) +static struct fb_ops q40fb_ops = { + .owner = THIS_MODULE, + .fb_setcolreg = q40fb_setcolreg, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_cursor = soft_cursor, +}; + +static int __init q40fb_probe(struct device *device) { - if ( !MACH_IS_Q40) - return -ENXIO; + struct platform_device *dev = to_platform_device(device); + struct fb_info *info; + + if (!MACH_IS_Q40) + return -ENXIO; /* mapped in q40/config.c */ q40fb_fix.smem_start = Q40_PHYS_SCREEN_ADDR; - - fb_info.var = q40fb_var; - fb_info.fix = q40fb_fix; - fb_info.fbops = &q40fb_ops; - fb_info.flags = FBINFO_FLAG_DEFAULT; /* not as module for now */ - fb_info.pseudo_palette = pseudo_palette; - fb_info.screen_base = (char *) q40fb_fix.smem_start; - fb_alloc_cmap(&fb_info.cmap, 16, 0); + info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); + if (!info) + return -ENOMEM; + + info->var = q40fb_var; + info->fix = q40fb_fix; + info->fbops = &q40fb_ops; + info->flags = FBINFO_FLAG_DEFAULT; /* not as module for now */ + info->pseudo_palette = info->par; + info->par = NULL; + info->screen_base = (char *) q40fb_fix.smem_start; + + if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { + framebuffer_release(info); + return -ENOMEM; + } master_outb(3, DISPLAY_CONTROL_REG); - if (register_framebuffer(&fb_info) < 0) { + if (register_framebuffer(info) < 0) { printk(KERN_ERR "Unable to register Q40 frame buffer\n"); + fb_dealloc_cmap(&info->cmap); + framebuffer_release(info); return -EINVAL; } printk(KERN_INFO "fb%d: Q40 frame buffer alive and kicking !\n", - fb_info.node); + info->node); return 0; } -MODULE_LICENSE("GPL"); +static struct device_driver q40fb_driver = { + .name = "q40fb", + .bus = &platform_bus_type, + .probe = q40fb_probe, +}; + +static struct platform_device q40fb_device = { + .name = "q40fb", +}; + +int __init q40fb_init(void) +{ + int ret = 0; + + ret = driver_register(&q40fb_driver); + + if (!ret) { + ret = platform_device_register(&q40fb_device); + if (ret) + driver_unregister(&q40fb_driver); + } + return ret; +} + +MODULE_LICENSE("GPL"); ------------------------------------------------------- This SF.Net email is sponsored by Sleepycat Software Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to deliver higher performing products faster, at low TCO. http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-05-07 17:32 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-04-23 23:01 Q40 fbdev updates James Simmons 2004-04-25 11:23 ` Geert Uytterhoeven 2004-04-27 0:15 ` James Simmons 2004-05-05 20:51 ` Richard Zidlicky 2004-05-07 17:32 ` James Simmons
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.