linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).