* 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 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).