[PATCH] cg*: New framebuffer_alloc API and class_dev changes

STALE8413d

5 messages, 2 authors, 2003-09-17 · open the first message on its own page

[PATCH] cg*: New framebuffer_alloc API and class_dev changes

From: Kronos <hidden>
Date: 2003-09-15 19:43:58

Hi,
this patch converts driver/video/cg*.c to framebuffer_alloc:

======== drivers/video/cg14.c 1.10 ========
D 1.10 03/09/13 22:59:40+02:00 kronos@kronoz.cjb.net 11 10 50/49/527
P drivers/video/cg14.c
C switch to framebuffer_alloc
------------------------------------------------

===== drivers/video/cg14.c 1.9 vs 1.10 =====
--- 1.9/drivers/video/cg14.c	Fri Aug 22 08:34:52 2003
+++ 1.10/drivers/video/cg14.c	Sat Sep 13 22:59:40 2003
@@ -35,6 +35,7 @@
 static int cg14_ioctl(struct inode *, struct file *, unsigned int,
 		      unsigned long, struct fb_info *);
 static int cg14_pan_display(struct fb_var_screeninfo *, struct fb_info *);
+static void release_cg14fb(struct fb_info *info);
 
 /*
  *  Frame buffer operations
@@ -204,6 +205,7 @@
 	int			mode;
 	int			ramsize;
 	struct sbus_dev		*sdev;
+	struct fb_info		*info;
 	struct list_head	list;
 };
 
@@ -386,16 +388,12 @@
 	{ 0,			0,			0		    }
 };
 
-struct all_info {
-	struct fb_info info;
-	struct cg14_par par;
-	struct list_head list;
-};
 static LIST_HEAD(cg14_list);
 
 static void cg14_init_one(struct sbus_dev *sdev, int node, int parent_node)
 {
-	struct all_info *all;
+	struct fb_info *info;
+	struct cg14_par *par; 
 	unsigned long phys, rphys;
 	u32 bases[6];
 	int is_8mb, linebytes, i;
@@ -413,70 +411,72 @@
 		}
 	}
 
-	all = kmalloc(sizeof(*all), GFP_KERNEL);
-	if (!all) {
+	info = framebuffer_alloc(sizeof(struct cg14_par), NULL);
+	if (!info) {
 		printk(KERN_ERR "cg14: Cannot allocate memory.\n");
 		return;
 	}
-	memset(all, 0, sizeof(*all));
+	par = info->par;
+	par->info = info;
+	info->release = &release_cg14fb;
 
-	INIT_LIST_HEAD(&all->list);
+	INIT_LIST_HEAD(&par->list);
 
-	spin_lock_init(&all->par.lock);
+	spin_lock_init(&par->lock);
 
-	sbusfb_fill_var(&all->info.var, node, 8);
+	sbusfb_fill_var(&info->var, node, 8);
 
 	linebytes = prom_getintdefault(sdev->prom_node, "linebytes",
-				       all->info.var.xres);
-	all->par.fbsize = PAGE_ALIGN(linebytes * all->info.var.yres);
+				       info->var.xres);
+	par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
 
-	all->par.sdev = sdev;
+	par->sdev = sdev;
 	if (sdev) {
 		rphys = sdev->reg_addrs[0].phys_addr;
-		all->par.physbase = phys = sdev->reg_addrs[1].phys_addr;
-		all->par.iospace = sdev->reg_addrs[0].which_io;
+		par->physbase = phys = sdev->reg_addrs[1].phys_addr;
+		par->iospace = sdev->reg_addrs[0].which_io;
 
-		all->par.regs = (struct cg14_regs *)
+		par->regs = (struct cg14_regs *)
 			sbus_ioremap(&sdev->resource[0], 0,
 				     sizeof(struct cg14_regs),
 				     "cg14 regs");
-		all->par.clut = (struct cg14_clut *)
+		par->clut = (struct cg14_clut *)
 			sbus_ioremap(&sdev->resource[0], CG14_CLUT1,
 				     sizeof(struct cg14_clut),
 				     "cg14 clut");
-		all->par.cursor = (struct cg14_cursor *)
+		par->cursor = (struct cg14_cursor *)
 			sbus_ioremap(&sdev->resource[0], CG14_CURSORREGS,
 				     sizeof(struct cg14_cursor),
 				     "cg14 cursor");
-		all->info.screen_base = (char *)
+		info->screen_base = (char *)
 			sbus_ioremap(&sdev->resource[1], 0,
-				     all->par.fbsize, "cg14 ram");
+				     par->fbsize, "cg14 ram");
 	} else {
 		rphys = __get_phys(bases[0]);
-		all->par.physbase = phys = __get_phys(bases[1]);
-		all->par.iospace = __get_iospace(bases[0]);
-		all->par.regs = (struct cg14_regs *)(unsigned long)bases[0];
-		all->par.clut = (struct cg14_clut *)((unsigned long)bases[0] +
+		par->physbase = phys = __get_phys(bases[1]);
+		par->iospace = __get_iospace(bases[0]);
+		par->regs = (struct cg14_regs *)(unsigned long)bases[0];
+		par->clut = (struct cg14_clut *)((unsigned long)bases[0] +
 						     CG14_CLUT1);
-		all->par.cursor =
+		par->cursor =
 			(struct cg14_cursor *)((unsigned long)bases[0] +
 					       CG14_CURSORREGS);
 
-		all->info.screen_base = (char *)(unsigned long)bases[1];
+		info->screen_base = (char *)(unsigned long)bases[1];
 	}
 
 	prom_getproperty(node, "reg", (char *) &bases[0], sizeof(bases));
 	is_8mb = (bases[5] == 0x800000);
 
-	if (sizeof(all->par.mmap_map) != sizeof(__cg14_mmap_map)) {
+	if (sizeof(par->mmap_map) != sizeof(__cg14_mmap_map)) {
 		extern void __cg14_mmap_sized_wrongly(void);
 
 		__cg14_mmap_sized_wrongly();
 	}
 		
-	memcpy(&all->par.mmap_map, &__cg14_mmap_map, sizeof(all->par.mmap_map));
+	memcpy(&par->mmap_map, &__cg14_mmap_map, sizeof(par->mmap_map));
 	for (i = 0; i < CG14_MMAP_ENTRIES; i++) {
-		struct sbus_mmap_map *map = &all->par.mmap_map[i];
+		struct sbus_mmap_map *map = &par->mmap_map[i];
 
 		if (!map->size)
 			break;
@@ -488,34 +488,33 @@
 			map->size *= 2;
 	}
 
-	all->par.mode = MDI_8_PIX;
-	all->par.ramsize = (is_8mb ? 0x800000 : 0x400000);
+	par->mode = MDI_8_PIX;
+	par->ramsize = (is_8mb ? 0x800000 : 0x400000);
 
-	all->info.flags = FBINFO_FLAG_DEFAULT;
-	all->info.fbops = &cg14_ops;
-	all->info.par = &all->par;
+	info->flags = FBINFO_FLAG_DEFAULT;
+	info->fbops = &cg14_ops;
 
-	__cg14_reset(&all->par);
+	__cg14_reset(par);
 
-	if (fb_alloc_cmap(&all->info.cmap, 256, 0)) {
+	if (fb_alloc_cmap(&info->cmap, 256, 0)) {
 		printk(KERN_ERR "cg14: Could not allocate color map.\n");
-		kfree(all);
+		kfree(info);
 		return;
 	}
 
-	cg14_init_fix(&all->info, linebytes);
+	cg14_init_fix(info, linebytes);
 
-	if (register_framebuffer(&all->info) < 0) {
+	if (register_framebuffer(info) < 0) {
 		printk(KERN_ERR "cg14: Could not register framebuffer.\n");
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		fb_dealloc_cmap(&info->cmap);
+		kfree(info);
 		return;
 	}
 
-	list_add(&all->list, &cg14_list);
+	list_add(&par->list, &cg14_list);
 
 	printk("cg14: cgfourteen at %lx:%lx\n",
-	       all->par.physbase, all->par.iospace);
+	       par->physbase, par->iospace);
 
 }
 
@@ -546,16 +545,18 @@
 	return 0;
 }
 
+static void release_cg14fb(struct fb_info *info) {
+	fb_dealloc_cmap(&info->cmap);
+}
+
 void __exit cg14_exit(void)
 {
 	struct list_head *pos, *tmp;
 
 	list_for_each_safe(pos, tmp, &cg14_list) {
-		struct all_info *all = list_entry(pos, typeof(*all), list);
+		struct cg14_par *par = list_entry(pos, typeof(*par), list);
 
-		unregister_framebuffer(&all->info);
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		unregister_framebuffer(par->info);
 	}
 }

======== drivers/video/cg3.c 1.8 ========
D 1.8 03/09/13 23:03:05+02:00 kronos@kronoz.cjb.net 9 8 41/40/438
P drivers/video/cg3.c
C switch to framebuffer_alloc
------------------------------------------------

===== drivers/video/cg3.c 1.7 vs 1.8 =====
--- 1.7/drivers/video/cg3.c	Fri Aug 22 08:34:52 2003
+++ 1.8/drivers/video/cg3.c	Sat Sep 13 23:03:05 2003
@@ -36,6 +36,7 @@
 static int cg3_mmap(struct fb_info *, struct file *, struct vm_area_struct *);
 static int cg3_ioctl(struct inode *, struct file *, unsigned int,
 		     unsigned long, struct fb_info *);
+static void release_cg3fb(struct fb_info *info);
 
 /*
  *  Frame buffer operations
@@ -122,6 +123,7 @@
 	unsigned long		fbsize;
 
 	struct sbus_dev		*sdev;
+	struct fb_info		*info;
 	struct list_head	list;
 };
 
@@ -354,79 +356,76 @@
 	}
 }
 
-struct all_info {
-	struct fb_info info;
-	struct cg3_par par;
-	struct list_head list;
-};
 static LIST_HEAD(cg3_list);
 
 static void cg3_init_one(struct sbus_dev *sdev)
 {
-	struct all_info *all;
+	struct fb_info *info;
+	struct cg3_par *par;
 	int linebytes;
 
-	all = kmalloc(sizeof(*all), GFP_KERNEL);
-	if (!all) {
+	info = framebuffer_alloc(sizeof(struct cg3_par), NULL);
+	if (!info) {
 		printk(KERN_ERR "cg3: Cannot allocate memory.\n");
 		return;
 	}
-	memset(all, 0, sizeof(*all));
+	par = info->par;
+	par->info = info;
+	info->release = &release_cg3fb;
 
-	INIT_LIST_HEAD(&all->list);
+	INIT_LIST_HEAD(&par->list);
 
-	spin_lock_init(&all->par.lock);
-	all->par.sdev = sdev;
+	spin_lock_init(&par->lock);
+	par->sdev = sdev;
 
-	all->par.physbase = sdev->reg_addrs[0].phys_addr;
+	par->physbase = sdev->reg_addrs[0].phys_addr;
 
-	sbusfb_fill_var(&all->info.var, sdev->prom_node, 8);
+	sbusfb_fill_var(&info->var, sdev->prom_node, 8);
 	if (!strcmp(sdev->prom_name, "cgRDI"))
-		all->par.flags |= CG3_FLAG_RDI;
-	if (all->par.flags & CG3_FLAG_RDI)
-		cg3_rdi_maybe_fixup_var(&all->info.var, sdev);
+		par->flags |= CG3_FLAG_RDI;
+	if (par->flags & CG3_FLAG_RDI)
+		cg3_rdi_maybe_fixup_var(&info->var, sdev);
 
 	linebytes = prom_getintdefault(sdev->prom_node, "linebytes",
-				       all->info.var.xres);
-	all->par.fbsize = PAGE_ALIGN(linebytes * all->info.var.yres);
+				       info->var.xres);
+	par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
 
-	all->par.regs = (struct cg3_regs *)
+	par->regs = (struct cg3_regs *)
 		sbus_ioremap(&sdev->resource[0], CG3_REGS_OFFSET,
 			     sizeof(struct cg3_regs), "cg3 regs");
 
-	all->info.flags = FBINFO_FLAG_DEFAULT;
-	all->info.fbops = &cg3_ops;
+	info->flags = FBINFO_FLAG_DEFAULT;
+	info->fbops = &cg3_ops;
 #ifdef CONFIG_SPARC32
-	all->info.screen_base = (char *)
+	info->screen_base = (char *)
 		prom_getintdefault(sdev->prom_node, "address", 0);
 #endif
-	if (!all->info.screen_base)
-		all->info.screen_base = (char *)
+	if (!info->screen_base)
+		info->screen_base = (char *)
 			sbus_ioremap(&sdev->resource[0], CG3_RAM_OFFSET,
-				     all->par.fbsize, "cg3 ram");
-	all->info.par = &all->par;
+				     par->fbsize, "cg3 ram");
 
-	cg3_blank(0, &all->info);
+	cg3_blank(0, info);
 
 	if (!prom_getbool(sdev->prom_node, "width"))
-		cg3_do_default_mode(&all->par);
+		cg3_do_default_mode(par);
 
-	if (fb_alloc_cmap(&all->info.cmap, 256, 0)) {
+	if (fb_alloc_cmap(&info->cmap, 256, 0)) {
 		printk(KERN_ERR "cg3: Could not allocate color map.\n");
-		kfree(all);
+		kfree(info);
 		return;
 	}
 
-	cg3_init_fix(&all->info, linebytes);
+	cg3_init_fix(info, linebytes);
 
-	if (register_framebuffer(&all->info) < 0) {
+	if (register_framebuffer(info) < 0) {
 		printk(KERN_ERR "cg3: Could not register framebuffer.\n");
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		fb_dealloc_cmap(&info->cmap);
+		kfree(info);
 		return;
 	}
 
-	list_add(&all->list, &cg3_list);
+	list_add(&par->list, &cg3_list);
 
 	printk("cg3: %s at %lx:%lx\n",
 	       sdev->prom_name,
@@ -448,16 +447,18 @@
 	return 0;
 }
 
+static void release_cg3fb(struct fb_info *info) {
+	fb_dealloc_cmap(&info->cmap);
+}
+
 void __exit cg3_exit(void)
 {
 	struct list_head *pos, *tmp;
 
 	list_for_each_safe(pos, tmp, &cg3_list) {
-		struct all_info *all = list_entry(pos, typeof(*all), list);
+		struct cg3_par *par = list_entry(pos, typeof(*par), list);
 
-		unregister_framebuffer(&all->info);
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		unregister_framebuffer(par->info);
 	}
 }

======== drivers/video/cg6.c 1.7 ========
D 1.7 03/09/13 23:01:59+02:00 kronos@kronoz.cjb.net 11 10 46/45/720
P drivers/video/cg6.c
C switch to framebuffer_alloc
------------------------------------------------

===== drivers/video/cg6.c 1.6 vs 1.7 =====
--- 1.6/drivers/video/cg6.c	Fri Aug 22 08:34:52 2003
+++ 1.7/drivers/video/cg6.c	Sat Sep 13 23:01:59 2003
@@ -39,6 +39,7 @@
 static int cg6_mmap(struct fb_info *, struct file *, struct vm_area_struct *);
 static int cg6_ioctl(struct inode *, struct file *, unsigned int,
 		     unsigned long, struct fb_info *);
+static void release_cg6fb(struct fb_info *info);
 
 /*
  *  Frame buffer operations
@@ -263,6 +264,7 @@
 	unsigned long		fbsize;
 
 	struct sbus_dev		*sdev;
+	struct fb_info		*info;
 	struct list_head	list;
 };
 
@@ -630,93 +632,90 @@
 	sbus_writel(tmp, &par->bt->control);
 }
 
-struct all_info {
-	struct fb_info info;
-	struct cg6_par par;
-	struct list_head list;
-};
 static LIST_HEAD(cg6_list);
 
 static void cg6_init_one(struct sbus_dev *sdev)
 {
-	struct all_info *all;
+	struct fb_info *info;
+	struct cg6_par *par;
 	int linebytes;
 
-	all = kmalloc(sizeof(*all), GFP_KERNEL);
-	if (!all) {
+	info = framebuffer_alloc(sizeof(struct cg6_par), NULL);
+	if (!info) {
 		printk(KERN_ERR "cg6: Cannot allocate memory.\n");
 		return;
 	}
-	memset(all, 0, sizeof(*all));
+	par = info->par;
+	par->info = info;
+	par->release = &release_cg6fb;
 
-	INIT_LIST_HEAD(&all->list);
+	INIT_LIST_HEAD(&par->list);
 
-	spin_lock_init(&all->par.lock);
-	all->par.sdev = sdev;
+	spin_lock_init(&par->lock);
+	par->sdev = sdev;
 
-	all->par.physbase = sdev->reg_addrs[0].phys_addr;
+	par->physbase = sdev->reg_addrs[0].phys_addr;
 
-	sbusfb_fill_var(&all->info.var, sdev->prom_node, 8);
+	sbusfb_fill_var(&info->var, sdev->prom_node, 8);
 
 	linebytes = prom_getintdefault(sdev->prom_node, "linebytes",
-				       all->info.var.xres);
-	all->par.fbsize = PAGE_ALIGN(linebytes * all->info.var.yres);
+				       info->var.xres);
+	par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
 	if (prom_getbool(sdev->prom_node, "dblbuf"))
-		all->par.fbsize *= 4;
+		par->fbsize *= 4;
 
-	all->par.fbc = (struct cg6_fbc *)
+	par->fbc = (struct cg6_fbc *)
 		sbus_ioremap(&sdev->resource[0], CG6_FBC_OFFSET,
 			     4096, "cgsix fbc");
-	all->par.tec = (struct cg6_tec *)
+	par->tec = (struct cg6_tec *)
 		sbus_ioremap(&sdev->resource[0], CG6_TEC_OFFSET,
 			     sizeof(struct cg6_tec), "cgsix tec");
-	all->par.thc = (struct cg6_thc *)
+	par->thc = (struct cg6_thc *)
 		sbus_ioremap(&sdev->resource[0], CG6_THC_OFFSET,
 			     sizeof(struct cg6_thc), "cgsix thc");
-	all->par.bt = (struct bt_regs *)
+	par->bt = (struct bt_regs *)
 		sbus_ioremap(&sdev->resource[0], CG6_BROOKTREE_OFFSET,
 			     sizeof(struct bt_regs), "cgsix dac");
-	all->par.fhc = (u32 *)
+	par->fhc = (u32 *)
 		sbus_ioremap(&sdev->resource[0], CG6_FHC_OFFSET,
 			     sizeof(u32), "cgsix fhc");
 
-	all->info.flags = FBINFO_FLAG_DEFAULT;
-	all->info.fbops = &cg6_ops;
+	info->flags = FBINFO_FLAG_DEFAULT;
+	info->fbops = &cg6_ops;
 #ifdef CONFIG_SPARC32
-	all->info.screen_base = (char *)
+	info->screen_base = (char *)
 		prom_getintdefault(sdev->prom_node, "address", 0);
 #endif
-	if (!all->info.screen_base)
-		all->info.screen_base = (char *)
+	if (!info->screen_base)
+		info->screen_base = (char *)
 			sbus_ioremap(&sdev->resource[0], CG6_RAM_OFFSET,
-				     all->par.fbsize, "cgsix ram");
-	all->info.par = &all->par;
+				     par->fbsize, "cgsix ram");
 
-	all->info.var.accel_flags = FB_ACCELF_TEXT;
+	info->var.accel_flags = FB_ACCELF_TEXT;
 
-	cg6_bt_init(&all->par);
-	cg6_chip_init(&all->info);
-	cg6_blank(0, &all->info);
+	cg6_bt_init(par);
+	cg6_chip_init(info);
+	cg6_blank(0, info);
 
-	if (fb_alloc_cmap(&all->info.cmap, 256, 0)) {
+	if (fb_alloc_cmap(&info->cmap, 256, 0)) {
 		printk(KERN_ERR "cg6: Could not allocate color map.\n");
-		kfree(all);
+		kfree(info);
 		return;
 	}
 
-	cg6_init_fix(&all->info, linebytes);
+	cg6_init_fix(info, linebytes);
 
-	if (register_framebuffer(&all->info) < 0) {
+	if (register_framebuffer(info) < 0) {
 		printk(KERN_ERR "cg6: Could not register framebuffer.\n");
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		fb_dealloc_cmap(&info->cmap);
+		kfree(info);
 		return;
 	}
 
-	list_add(&all->list, &cg6_list);
+	list_add(&par->list, &cg6_list);
 
 	printk("cg6: CGsix [%s] at %lx:%lx\n",
-	       all->info.fix.id,
+	       info->fix.id,
 	       (long) sdev->reg_addrs[0].which_io,
 	       (long) sdev->reg_addrs[0].phys_addr);
 }
@@ -735,16 +734,18 @@
 	return 0;
 }
 
+static void release_cg6fb(struct fb_info *info) {
+	fb_dealloc_cmap(&info->cmap);
+}
+
 void __exit cg6_exit(void)
 {
 	struct list_head *pos, *tmp;
 
 	list_for_each_safe(pos, tmp, &cg6_list) {
-		struct all_info *all = list_entry(pos, typeof(*all), list);
+		struct cg6_par *par = list_entry(pos, typeof(*par), list);
 
-		unregister_framebuffer(&all->info);
-		fb_dealloc_cmap(&all->info.cmap);
-		kfree(all);
+		unregister_framebuffer(par->info);
 	}
 }

Luca
-- 
Reply-To: kronos@kronoz.cjb.net
Home: http://kronoz.cjb.net
"Di tutte le perversioni sessuali, la castita` e` la piu` strana".
Anatole France


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf

Re: [PATCH] cg*: New framebuffer_alloc API and class_dev changes

From: David S. Miller <hidden>
Date: 2003-09-15 23:38:45

On Mon, 15 Sep 2003 21:42:59 +0200
Kronos [off-list ref] wrote:
this patch converts driver/video/cg*.c to framebuffer_alloc:
This patch also does not apply cleanly to current 2.6.x sources.

Are these patches against some special set of framebuffer changes
that are not in 2.6.x yet?

If so, could you _PLEASE_ indicate this when you send patches
directly to me?  When I see a patch that I'm sent directly, I
expect that this means I should apply it to my tree and that the
patch works with current vanilla sources.


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf

Re: [PATCH] cg*: New framebuffer_alloc API and class_dev changes

From: Kronos <hidden>
Date: 2003-09-16 13:46:47

Il Mon, Sep 15, 2003 at 04:27:05PM -0700, David S. Miller ha scritto: 
quoted
this patch converts driver/video/cg*.c to framebuffer_alloc:
This patch also does not apply cleanly to current 2.6.x sources.

Are these patches against some special set of framebuffer changes
that are not in 2.6.x yet?
They are against James Simmons bk tree. You can find core changes on
fbdev or here:

http://web.tiscali.it/kronoz/linux/fbdev-class_dev-fbmem.c.diff
If so, could you _PLEASE_ indicate this when you send patches
directly to me?  
Yes sorry. Mails were created by a script, I've been too vague.

Btw, how do the patches look?

Luca
-- 
Reply-To: kronos@kronoz.cjb.net
Home: http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf

Re: [PATCH] cg*: New framebuffer_alloc API and class_dev changes

From: David S. Miller <hidden>
Date: 2003-09-17 01:34:27

On Tue, 16 Sep 2003 15:46:03 +0200
Kronos [off-list ref] wrote:
Btw, how do the patches look?
They look fine, just push them into James tree.


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf

Re: [PATCH] cg*: New framebuffer_alloc API and class_dev changes

From: Kronos <hidden>
Date: 2003-09-17 16:40:19

Il Tue, Sep 16, 2003 at 06:21:46PM -0700, David S. Miller ha scritto: 
On Tue, 16 Sep 2003 15:46:03 +0200
Kronos [off-list ref] wrote:
quoted
Btw, how do the patches look?
They look fine, just push them into James tree.
As Russell King pointed out there was a flaw in that API. I reworked it
a bit. I've patched sparc drivers:

drivers/video/bw2.c
drivers/video/cg14.c
drivers/video/cg3.c
drivers/video/cg6.c
drivers/video/ffb.c
drivers/video/leo.c
drivers/video/p9100.c
drivers/video/tcx.c

Patches are almost  identical to the ones  I sent to you,  but I removed
the release_* callback. If you want to  take a look I've just pushed the
changeset:

bk://mesa3d@bkbits.net/fbdev-2.5

Luca
-- 
Reply-To: kronos@kronoz.cjb.net
Home: http://kronoz.cjb.net
"Fare l'amore con dieci donne e` fantastico, soprattutto perche` ti
 presentano un sacco di amiche." -- Fabio Di Iorio


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help