diff -uNr linux-2.6.3-love3/drivers/video/68328fb.c linux-2.6.3-love3_chris/drivers/video/68328fb.c --- linux-2.6.3-love3/drivers/video/68328fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/68328fb.c 2004-02-21 16:21:19.000000000 -0600 @@ -429,7 +429,7 @@ fix->visual = FB_VISUAL_DIRECTCOLOR; info->screen_base = (u_char *) mc68328_fix.smem_start; - if (register_framebuffer(&fb_info) < 0) + if (register_framebuffer(&fb_info, NULL) < 0) panic("Cannot register frame buffer\n"); return 0; } diff -uNr linux-2.6.3-love3/drivers/video/aty/aty128fb.c linux-2.6.3-love3_chris/drivers/video/aty/aty128fb.c --- linux-2.6.3-love3/drivers/video/aty/aty128fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/aty/aty128fb.c 2004-02-21 16:23:10.000000000 -0600 @@ -1856,7 +1856,7 @@ aty128_init_engine(par); - if (register_framebuffer(info) < 0) + if (register_framebuffer(info, &pdev->dev) < 0) return 0; #ifdef CONFIG_PMAC_BACKLIGHT diff -uNr linux-2.6.3-love3/drivers/video/aty/atyfb_base.c linux-2.6.3-love3_chris/drivers/video/aty/atyfb_base.c --- linux-2.6.3-love3/drivers/video/aty/atyfb_base.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/aty/atyfb_base.c 2004-02-21 16:24:19.000000000 -0600 @@ -1895,7 +1895,7 @@ fb_alloc_cmap(&info->cmap, 256, 0); - if (register_framebuffer(info) < 0) + if (register_framebuffer(info, NULL) < 0) return 0; fb_list = info; diff -uNr linux-2.6.3-love3/drivers/video/cirrusfb.c linux-2.6.3-love3_chris/drivers/video/cirrusfb.c --- linux-2.6.3-love3/drivers/video/cirrusfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/cirrusfb.c 2004-02-21 16:25:55.000000000 -0600 @@ -2817,7 +2817,7 @@ fbgen_set_disp (-1, &fb_info->gen); do_install_cmap (0, &fb_info->gen.info); - err = register_framebuffer (&fb_info->gen.info); + err = register_framebuffer (&fb_info->gen.info, fb_info->pdev); if (err) { printk (KERN_ERR "clgen: ERROR - could not register fb device; err = %d!\n", err); DPRINTK ("EXIT, returning -EINVAL\n"); diff -uNr linux-2.6.3-love3/drivers/video/cyber2000fb.c linux-2.6.3-love3_chris/drivers/video/cyber2000fb.c --- linux-2.6.3-love3/drivers/video/cyber2000fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/cyber2000fb.c 2004-02-21 16:27:26.000000000 -0600 @@ -1399,7 +1399,7 @@ cfb->fb.var.xres, cfb->fb.var.yres, h_sync / 1000, h_sync % 1000, v_sync); - err = register_framebuffer(&cfb->fb); + err = register_framebuffer(&cfb->fb, &cfb->dev->dev); failed: return err; diff -uNr linux-2.6.3-love3/drivers/video/fbmem.c linux-2.6.3-love3_chris/drivers/video/fbmem.c --- linux-2.6.3-love3/drivers/video/fbmem.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/fbmem.c 2004-02-21 17:10:33.000000000 -0600 @@ -32,7 +32,7 @@ #include #endif #include - +#include #if defined(__mc68000__) || defined(CONFIG_APUS) #include #endif @@ -1250,6 +1250,83 @@ #endif }; +struct fb_dev { + struct list_head node; + dev_t dev; + struct class_device class_dev; +}; +#define to_fb_dev(d) container_of(d, struct fb_dev, class_dev) + +static void release_fb_dev(struct class_device *class_dev) +{ + struct fb_dev *fb_dev = to_fb_dev(class_dev); + kfree(fb_dev); +} + +static struct class fb_class = { + .name = "video", + .release = &release_fb_dev, +}; + +static LIST_HEAD(fb_dev_list); +static spinlock_t fb_dev_list_lock = SPIN_LOCK_UNLOCKED; + +static ssize_t show_dev(struct class_device *class_dev, char *buf) +{ + struct fb_dev *fb_dev = to_fb_dev(class_dev); + return print_dev_t(buf, fb_dev->dev); +} +static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL); + +static void fb_add_class_device(int minor, struct device *device) +{ + struct fb_dev *fb_dev = NULL; + int retval; + + fb_dev = kmalloc(sizeof(*fb_dev), GFP_KERNEL); + if (!fb_dev) + return; + memset(fb_dev, 0x00, sizeof(*fb_dev)); + + fb_dev->dev = MKDEV(FB_MAJOR, minor); + fb_dev->class_dev.dev = device; + fb_dev->class_dev.class = &fb_class; + snprintf(fb_dev->class_dev.class_id, BUS_ID_SIZE, "fb%d", minor); + retval = class_device_register(&fb_dev->class_dev); + if (retval) + goto error; + class_device_create_file(&fb_dev->class_dev, &class_device_attr_dev); + spin_lock(&fb_dev_list_lock); + list_add(&fb_dev->node, &fb_dev_list); + spin_unlock(&fb_dev_list_lock); + return; + error: + kfree(fb_dev); +} + +void fb_remove_class_device(int minor) +{ + struct fb_dev *fb_dev = NULL; + struct list_head *tmp; + int found = 0; + + spin_lock(&fb_dev_list_lock); + list_for_each(tmp, &fb_dev_list) { + fb_dev = list_entry(tmp, struct fb_dev, node); + if ((MINOR(fb_dev->dev) == minor)) { + found = 1; + break; + } + } + if (found) { + list_del(&fb_dev->node); + spin_unlock(&fb_dev_list_lock); + class_device_unregister(&fb_dev->class_dev); + } else { + spin_unlock(&fb_dev_list_lock); + } +} + /** * register_framebuffer - registers a frame buffer device * @fb_info: frame buffer info structure @@ -1261,7 +1338,7 @@ */ int -register_framebuffer(struct fb_info *fb_info) +register_framebuffer(struct fb_info *fb_info, struct device *dev) { int i; @@ -1307,6 +1384,8 @@ devfs_mk_cdev(MKDEV(FB_MAJOR, i), S_IFCHR | S_IRUGO | S_IWUGO, "fb/%d", i); + + fb_add_class_device(i, dev); return 0; } @@ -1337,6 +1416,7 @@ kfree(fb_info->sprite.addr); registered_fb[i]=NULL; num_registered_fb--; + fb_remove_class_device(i); return 0; } @@ -1398,6 +1478,8 @@ if (register_chrdev(FB_MAJOR,"fb",&fb_fops)) printk("unable to get major %d for fb devs\n", FB_MAJOR); + class_register(&fb_class); + #ifdef CONFIG_FB_OF if (ofonly) { offb_init(); diff -uNr linux-2.6.3-love3/drivers/video/hgafb.c linux-2.6.3-love3_chris/drivers/video/hgafb.c --- linux-2.6.3-love3/drivers/video/hgafb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/hgafb.c 2004-02-21 16:39:35.000000000 -0600 @@ -560,7 +560,7 @@ fb_info.fbops = &hgafb_ops; fb_info.screen_base = (char *)hga_fix.smem_start; - if (register_framebuffer(&fb_info) < 0) + if (register_framebuffer(&fb_info, NULL) < 0) return -EINVAL; printk(KERN_INFO "fb%d: %s frame buffer device\n", diff -uNr linux-2.6.3-love3/drivers/video/hitfb.c linux-2.6.3-love3_chris/drivers/video/hitfb.c --- linux-2.6.3-love3/drivers/video/hitfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/hitfb.c 2004-02-21 16:40:17.000000000 -0600 @@ -331,7 +331,7 @@ size = (fb_info.var.bits_per_pixel == 8) ? 256 : 16; fb_alloc_cmap(&fb_info.cmap, size, 0); - if (register_framebuffer(&fb_info) < 0) + if (register_framebuffer(&fb_info, NULL) < 0) return -EINVAL; printk(KERN_INFO "fb%d: %s frame buffer device\n", diff -uNr linux-2.6.3-love3/drivers/video/hpfb.c linux-2.6.3-love3_chris/drivers/video/hpfb.c --- linux-2.6.3-love3/drivers/video/hpfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/hpfb.c 2004-02-21 16:40:53.000000000 -0600 @@ -158,7 +158,7 @@ fb_alloc_cmap(&fb_info.cmap, 256, 0); - if (register_framebuffer(&fb_info) < 0) + if (register_framebuffer(&fb_info, NULL) < 0) return 1; return 0; } diff -uNr linux-2.6.3-love3/drivers/video/i810/i810_main.c linux-2.6.3-love3_chris/drivers/video/i810/i810_main.c --- linux-2.6.3-love3/drivers/video/i810/i810_main.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/i810/i810_main.c 2004-02-21 16:41:45.000000000 -0600 @@ -1890,7 +1890,7 @@ encode_fix(&info->fix, info); i810fb_init_ringbuffer(info); - err = register_framebuffer(info); + err = register_framebuffer(info, &dev->dev); if (err < 0) { i810fb_release_resource(info, par); printk("i810fb_init: cannot register framebuffer device\n"); diff -uNr linux-2.6.3-love3/drivers/video/igafb.c linux-2.6.3-love3_chris/drivers/video/igafb.c --- linux-2.6.3-love3/drivers/video/igafb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/igafb.c 2004-02-21 16:44:35.000000000 -0600 @@ -332,7 +332,7 @@ #endif }; -static int __init iga_init(struct fb_info *info, struct iga_par *par) +static int __init iga_init(struct fb_info *info, struct iga_par *par, struct pci_dev *dev) { char vramsz = iga_inb(par, IGA_EXT_CNTRL, IGA_IDX_EXT_BUS_CNTL) & MEM_SIZE_ALIAS; @@ -361,7 +361,7 @@ fb_alloc_cmap(&info->cmap, video_cmap_len, 0); - if (register_framebuffer(info) < 0) + if (register_framebuffer(info, &dev->dev) < 0) return 0; printk("fb%d: %s frame buffer device at 0x%08lx [%dMB VRAM]\n", @@ -529,7 +529,7 @@ info->fix = igafb_fix; info->pseudo_palette = (void *)(par + 1); - if (!iga_init(info, par)) { + if (!iga_init(info, par, pdev)) { iounmap((void *)par->io_base); iounmap(info->screen_base); if (par->mmap_map) diff -uNr linux-2.6.3-love3/drivers/video/imsttfb.c linux-2.6.3-love3_chris/drivers/video/imsttfb.c --- linux-2.6.3-love3/drivers/video/imsttfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/imsttfb.c 2004-02-21 16:46:34.000000000 -0600 @@ -1348,7 +1348,7 @@ }; static void __init -init_imstt(struct fb_info *info) +init_imstt(struct fb_info *info, struct pci_dev *pdev) { struct imstt_par *par = (struct imstt_par *) info->par; __u32 i, tmp, *ip, *end; @@ -1445,7 +1445,7 @@ fb_alloc_cmap(&info->cmap, 0, 0); - if (register_framebuffer(info) < 0) { + if (register_framebuffer(info, &pdev->dev) < 0) { kfree(info); return; } @@ -1520,7 +1520,7 @@ par->cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000); info->par = par; info->pseudo_palette = (void *) (par + 1); - init_imstt(info); + init_imstt(info, pdev); pci_set_drvdata(pdev, info); return 0; diff -uNr linux-2.6.3-love3/drivers/video/matrox/matroxfb_base.c linux-2.6.3-love3_chris/drivers/video/matrox/matroxfb_base.c --- linux-2.6.3-love3/drivers/video/matrox/matroxfb_base.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/matrox/matroxfb_base.c 2004-02-21 16:47:54.000000000 -0600 @@ -1824,7 +1824,7 @@ /* We do not have to set currcon to 0... register_framebuffer do it for us on first console * and we do not want currcon == 0 for subsequent framebuffers */ - if (register_framebuffer(&ACCESS_FBINFO(fbcon)) < 0) { + if (register_framebuffer(&ACCESS_FBINFO(fbcon), NULL) < 0) { goto failVideoIO; } printk("fb%d: %s frame buffer device\n", diff -uNr linux-2.6.3-love3/drivers/video/matrox/matroxfb_crtc2.c linux-2.6.3-love3_chris/drivers/video/matrox/matroxfb_crtc2.c --- linux-2.6.3-love3/drivers/video/matrox/matroxfb_crtc2.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/matrox/matroxfb_crtc2.c 2004-02-21 16:50:03.000000000 -0600 @@ -638,7 +638,7 @@ } matroxfb_dh_init_fix(m2info); - if (register_framebuffer(&m2info->fbcon)) { + if (register_framebuffer(&m2info->fbcon, &m2info->primary_dev->pcidev->dev)) { return -ENXIO; } if (m2info->fbcon.currcon < 0) { diff -uNr linux-2.6.3-love3/drivers/video/neofb.c linux-2.6.3-love3_chris/drivers/video/neofb.c --- linux-2.6.3-love3/drivers/video/neofb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/neofb.c 2004-02-21 16:51:02.000000000 -0600 @@ -2014,7 +2014,7 @@ info->var.yres, h_sync / 1000, h_sync % 1000, v_sync); - err = register_framebuffer(info); + err = register_framebuffer(info, &dev->dev); if (err < 0) goto failed; diff -uNr linux-2.6.3-love3/drivers/video/pmag-ba-fb.c linux-2.6.3-love3_chris/drivers/video/pmag-ba-fb.c --- linux-2.6.3-love3/drivers/video/pmag-ba-fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/pmag-ba-fb.c 2004-02-21 16:51:43.000000000 -0600 @@ -146,7 +146,7 @@ fb_alloc_cmap(&fb_info.cmap, 256, 0); - if (register_framebuffer(info) < 0) + if (register_framebuffer(info, NULL) < 0) return 1; return 0; } diff -uNr linux-2.6.3-love3/drivers/video/radeonfb.c linux-2.6.3-love3_chris/drivers/video/radeonfb.c --- linux-2.6.3-love3/drivers/video/radeonfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/radeonfb.c 2004-02-21 16:52:45.000000000 -0600 @@ -3042,7 +3042,7 @@ rinfo->next = board_list; board_list = rinfo; - if (register_framebuffer ((struct fb_info *) rinfo) < 0) { + if (register_framebuffer ((struct fb_info *) rinfo, &pdev->dev) < 0) { printk ("radeonfb: could not register framebuffer\n"); iounmap ((void*)rinfo->fb_base); iounmap ((void*)rinfo->mmio_base); diff -uNr linux-2.6.3-love3/drivers/video/retz3fb.c linux-2.6.3-love3_chris/drivers/video/retz3fb.c --- linux-2.6.3-love3/drivers/video/retz3fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/retz3fb.c 2004-02-21 16:53:40.000000000 -0600 @@ -1424,7 +1424,7 @@ do_install_cmap(0, fb_info); - if (register_framebuffer(fb_info) < 0) + if (register_framebuffer(fb_info, NULL) < 0) return -EINVAL; printk(KERN_INFO "fb%d: %s frame buffer device, using %ldK of " diff -uNr linux-2.6.3-love3/drivers/video/riva/fbdev.c linux-2.6.3-love3_chris/drivers/video/riva/fbdev.c --- linux-2.6.3-love3/drivers/video/riva/fbdev.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/riva/fbdev.c 2004-02-21 16:54:40.000000000 -0600 @@ -1875,7 +1875,7 @@ goto err_out_iounmap_fb; } - if (register_framebuffer(info) < 0) { + if (register_framebuffer(info, &pd->dev) < 0) { printk(KERN_ERR PFX "error registering riva framebuffer\n"); goto err_out_iounmap_fb; diff -uNr linux-2.6.3-love3/drivers/video/sis/sis_main.c linux-2.6.3-love3_chris/drivers/video/sis/sis_main.c --- linux-2.6.3-love3/drivers/video/sis/sis_main.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/sis/sis_main.c 2004-02-21 16:58:23.000000000 -0600 @@ -4945,7 +4945,7 @@ vc_resize_con(1, 1, 0); #endif - if(register_framebuffer(sis_fb_info) < 0) { + if(register_framebuffer(sis_fb_info, &pdev->dev) < 0) { vfree(sishw_ext.pSR); vfree(sishw_ext.pCR); release_mem_region(ivideo.video_base, ivideo.video_size); diff -uNr linux-2.6.3-love3/drivers/video/skeletonfb.c linux-2.6.3-love3_chris/drivers/video/skeletonfb.c --- linux-2.6.3-love3/drivers/video/skeletonfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/skeletonfb.c 2004-02-21 16:59:45.000000000 -0600 @@ -562,8 +562,12 @@ * mode. If we are setting the mode ourselves we don't call this. */ info.var = xxxfb_var; - - if (register_framebuffer(&info) < 0) + + /* + * Pass in a pointer to the struct device that this framebuffer is + * associated with. If there is no struct device available, use NULL. + */ + if (register_framebuffer(&info, NULL) < 0) return -EINVAL; printk(KERN_INFO "fb%d: %s frame buffer device\n", info.node, info.fix.id); diff -uNr linux-2.6.3-love3/drivers/video/sstfb.c linux-2.6.3-love3_chris/drivers/video/sstfb.c --- linux-2.6.3-love3/drivers/video/sstfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/sstfb.c 2004-02-21 17:00:48.000000000 -0600 @@ -1507,7 +1507,7 @@ fb_alloc_cmap(&info->cmap, 256, 0); /* register fb */ - if (register_framebuffer(info) < 0) { + if (register_framebuffer(info, &pdev->dev) < 0) { eprintk("can't register framebuffer.\n"); goto fail; } diff -uNr linux-2.6.3-love3/drivers/video/stifb.c linux-2.6.3-love3_chris/drivers/video/stifb.c --- linux-2.6.3-love3/drivers/video/stifb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/stifb.c 2004-02-21 17:01:29.000000000 -0600 @@ -1343,7 +1343,7 @@ goto out_err2; } - if (register_framebuffer(&fb->info) < 0) + if (register_framebuffer(&fb->info, NULL) < 0) goto out_err3; sti->info = info; /* save for unregister_framebuffer() */ diff -uNr linux-2.6.3-love3/drivers/video/tdfxfb.c linux-2.6.3-love3_chris/drivers/video/tdfxfb.c --- linux-2.6.3-love3/drivers/video/tdfxfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/tdfxfb.c 2004-02-21 17:02:16.000000000 -0600 @@ -1261,7 +1261,7 @@ size = (info->var.bits_per_pixel == 8) ? 256 : 16; fb_alloc_cmap(&info->cmap, size, 0); - if (register_framebuffer(info) < 0) { + if (register_framebuffer(info, &pdev->dev) < 0) { printk("tdfxfb: can't register framebuffer\n"); goto out_err; } diff -uNr linux-2.6.3-love3/drivers/video/tgafb.c linux-2.6.3-love3_chris/drivers/video/tgafb.c --- linux-2.6.3-love3/drivers/video/tgafb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/tgafb.c 2004-02-21 17:03:12.000000000 -0600 @@ -1451,7 +1451,7 @@ tgafb_set_par(&all->info); tgafb_init_fix(&all->info); - if (register_framebuffer(&all->info) < 0) { + if (register_framebuffer(&all->info, &pdev->dev) < 0) { printk(KERN_ERR "tgafb: Could not register framebuffer\n"); ret = -EINVAL; goto err1; diff -uNr linux-2.6.3-love3/drivers/video/tridentfb.c linux-2.6.3-love3_chris/drivers/video/tridentfb.c --- linux-2.6.3-love3/drivers/video/tridentfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/tridentfb.c 2004-02-21 17:04:14.000000000 -0600 @@ -1156,7 +1156,7 @@ default_var.accel_flags &= ~FB_ACCELF_TEXT; default_var.activate |= FB_ACTIVATE_NOW; fb_info.var = default_var; - if (register_framebuffer(&fb_info) < 0) { + if (register_framebuffer(&fb_info, NULL) < 0) { output("Could not register Trident framebuffer\n"); return -EINVAL; } diff -uNr linux-2.6.3-love3/drivers/video/vesafb.c linux-2.6.3-love3_chris/drivers/video/vesafb.c --- linux-2.6.3-love3/drivers/video/vesafb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/vesafb.c 2004-02-21 17:04:50.000000000 -0600 @@ -369,7 +369,7 @@ fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0); - if (register_framebuffer(&fb_info)<0) + if (register_framebuffer(&fb_info, NULL)<0) return -EINVAL; printk(KERN_INFO "fb%d: %s frame buffer device\n", diff -uNr linux-2.6.3-love3/drivers/video/vfb.c linux-2.6.3-love3_chris/drivers/video/vfb.c --- linux-2.6.3-love3/drivers/video/vfb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/vfb.c 2004-02-21 17:05:14.000000000 -0600 @@ -439,7 +439,7 @@ fb_alloc_cmap(&fb_info.cmap, 256, 0); - if (register_framebuffer(&fb_info) < 0) { + if (register_framebuffer(&fb_info, NULL) < 0) { vfree(videomemory); return -EINVAL; } diff -uNr linux-2.6.3-love3/drivers/video/vga16fb.c linux-2.6.3-love3_chris/drivers/video/vga16fb.c --- linux-2.6.3-love3/drivers/video/vga16fb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/vga16fb.c 2004-02-21 17:05:50.000000000 -0600 @@ -1388,7 +1388,7 @@ vga16fb_update_fix(&vga16fb); - if (register_framebuffer(&vga16fb) < 0) { + if (register_framebuffer(&vga16fb, NULL) < 0) { printk(KERN_ERR "vga16fb: unable to register framebuffer\n"); ret = -EINVAL; goto err_check_var; diff -uNr linux-2.6.3-love3/drivers/video/virgefb.c linux-2.6.3-love3_chris/drivers/video/virgefb.c --- linux-2.6.3-love3/drivers/video/virgefb.c 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/drivers/video/virgefb.c 2004-02-21 17:06:12.000000000 -0600 @@ -1797,7 +1797,7 @@ virgefb_set_disp(-1, &fb_info); do_install_cmap(0, &fb_info); - if (register_framebuffer(&fb_info) < 0) { + if (register_framebuffer(&fb_info, NULL) < 0) { #warning release resources printk(KERN_ERR "virgefb.c: register_framebuffer failed\n"); DPRINTK("EXIT\n"); diff -uNr linux-2.6.3-love3/include/linux/fb.h linux-2.6.3-love3_chris/include/linux/fb.h --- linux-2.6.3-love3/include/linux/fb.h 2004-02-21 17:23:00.000000000 -0600 +++ linux-2.6.3-love3_chris/include/linux/fb.h 2004-02-21 17:07:43.000000000 -0600 @@ -532,7 +532,7 @@ extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image); /* drivers/video/fbmem.c */ -extern int register_framebuffer(struct fb_info *fb_info); +extern int register_framebuffer(struct fb_info *fb_info, struct device *dev); extern int unregister_framebuffer(struct fb_info *fb_info); extern int fb_prepare_logo(struct fb_info *fb_info); extern int fb_show_logo(struct fb_info *fb_info);