<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">diff -Nru a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c
--- a/drivers/video/aty/aty128fb.c	Tue Dec 23 12:53:13 2003
+++ b/drivers/video/aty/aty128fb.c	Tue Dec 23 12:53:13 2003
@@ -1536,6 +1536,7 @@
 	/* fill in info */
 	info-&gt;fbops = &amp;aty128fb_ops;
 	info-&gt;flags = FBINFO_FLAG_DEFAULT;
+	info-&gt;dev = &amp;pdev-&gt;dev;
 
 #ifdef CONFIG_PMAC_PBOOK
 	par-&gt;lcd_on = default_lcd_on;
diff -Nru a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c
--- a/drivers/video/cirrusfb.c	Tue Dec 23 12:53:13 2003
+++ b/drivers/video/cirrusfb.c	Tue Dec 23 12:53:13 2003
@@ -2787,6 +2787,7 @@
 	fb_info-&gt;gen.info.switch_con = &amp;fbgen_switch;
 	fb_info-&gt;gen.info.updatevar = &amp;fbgen_update_var;
 	fb_info-&gt;gen.info.flags = FBINFO_FLAG_DEFAULT;
+	fb_info-&gt;gen.info.dev = fb_info-&gt;pdev;
 
 	for (j = 0; j &lt; 256; j++) {
 		if (j &lt; 16) {
diff -Nru a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c
--- a/drivers/video/cyber2000fb.c	Tue Dec 23 12:53:40 2003
+++ b/drivers/video/cyber2000fb.c	Tue Dec 23 12:53:40 2003
@@ -1366,6 +1366,7 @@
 	cfb-&gt;fb.fix.smem_len   = smem_size;
 	cfb-&gt;fb.fix.mmio_len   = MMIO_SIZE;
 	cfb-&gt;fb.screen_base    = cfb-&gt;region;
+	cfb-&gt;fb.dev            = &amp;cfb-&gt;dev-&gt;dev;
 
 	err = -EINVAL;
 	if (!fb_find_mode(&amp;cfb-&gt;fb.var, &amp;cfb-&gt;fb, NULL, NULL, 0,
diff -Nru a/drivers/video/fbmem.c b/drivers/video/fbmem.c
--- a/drivers/video/fbmem.c	Tue Dec 23 12:53:40 2003
+++ b/drivers/video/fbmem.c	Tue Dec 23 12:53:40 2003
@@ -31,6 +31,7 @@
 #include &lt;linux/kmod.h&gt;
 #endif
 #include &lt;linux/devfs_fs_kernel.h&gt;
+#include &lt;linux/device.h&gt;
 
 #if defined(__mc68000__) || defined(CONFIG_APUS)
 #include &lt;asm/setup.h&gt;
@@ -1199,6 +1200,10 @@
 #endif
 };
 
+static struct class fb_class = {
+	.name	= "video",
+};
+
 /**
  *	register_framebuffer - registers a frame buffer device
  *	@fb_info: frame buffer info structure
@@ -1242,6 +1247,8 @@
 
 	devfs_mk_cdev(MKDEV(FB_MAJOR, i),
 			S_IFCHR | S_IRUGO | S_IWUGO, "fb/%d", i);
+
+	simple_add_class_device(&amp;fb_class, MKDEV(FB_MAJOR, i), fb_info-&gt;dev, "fb%d", i);
 	return 0;
 }
 
@@ -1270,6 +1277,7 @@
 		kfree(fb_info-&gt;pixmap.addr);
 	registered_fb[i]=NULL;
 	num_registered_fb--;
+	simple_remove_class_device(MKDEV(FB_MAJOR, i));
 	return 0;
 }
 
@@ -1293,6 +1301,8 @@
 	devfs_mk_dir("fb");
 	if (register_chrdev(FB_MAJOR,"fb",&amp;fb_fops))
 		printk("unable to get major %d for fb devs\n", FB_MAJOR);
+
+	class_register(&amp;fb_class);
 
 #ifdef CONFIG_FB_OF
 	if (ofonly) {
diff -Nru a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c
--- a/drivers/video/i810/i810_main.c	Tue Dec 23 12:53:19 2003
+++ b/drivers/video/i810/i810_main.c	Tue Dec 23 12:53:19 2003
@@ -1880,6 +1880,7 @@
 	info-&gt;fbops = &amp;par-&gt;i810fb_ops;
 	info-&gt;pseudo_palette = par-&gt;pseudo_palette;
 	info-&gt;flags = FBINFO_FLAG_DEFAULT;
+	info-&gt;dev = &amp;dev-&gt;dev;
 	
 	fb_alloc_cmap(&amp;info-&gt;cmap, 256, 0);
 
diff -Nru a/drivers/video/igafb.c b/drivers/video/igafb.c
--- a/drivers/video/igafb.c	Tue Dec 23 12:53:19 2003
+++ b/drivers/video/igafb.c	Tue Dec 23 12:53:19 2003
@@ -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) 
 		                                         &amp; MEM_SIZE_ALIAS;
@@ -358,6 +358,7 @@
 
 	info-&gt;fbops = &amp;igafb_ops;
 	info-&gt;flags = FBINFO_FLAG_DEFAULT;
+	info-&gt;dev = &amp;dev-&gt;dev;
 
 	fb_alloc_cmap(&amp;info-&gt;cmap, video_cmap_len, 0);
 
@@ -529,7 +530,7 @@
 	info-&gt;fix = igafb_fix;
 	info-&gt;pseudo_palette = (void *)(par + 1);
 
-	if (!iga_init(info, par)) {
+	if (!iga_init(info, par, pdev)) {
 		iounmap((void *)par-&gt;io_base);
 		iounmap(info-&gt;screen_base);
 		if (par-&gt;mmap_map)
diff -Nru a/drivers/video/imsttfb.c b/drivers/video/imsttfb.c
--- a/drivers/video/imsttfb.c	Tue Dec 23 12:53:11 2003
+++ b/drivers/video/imsttfb.c	Tue Dec 23 12:53:11 2003
@@ -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-&gt;par;
 	__u32 i, tmp, *ip, *end;
@@ -1442,6 +1442,7 @@
 
 	info-&gt;fbops = &amp;imsttfb_ops;
 	info-&gt;flags = FBINFO_FLAG_DEFAULT;
+	info-&gt;dev = &amp;pdev-&gt;dev;
 
 	fb_alloc_cmap(&amp;info-&gt;cmap, 0, 0);
 
@@ -1520,7 +1521,7 @@
 	par-&gt;cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000);
 	info-&gt;par = par;
 	info-&gt;pseudo_palette = (void *) (par + 1);
-	init_imstt(info);
+	init_imstt(info, pdev);
 
 	pci_set_drvdata(pdev, info);
 	return 0;
diff -Nru a/drivers/video/matrox/matroxfb_crtc2.c b/drivers/video/matrox/matroxfb_crtc2.c
--- a/drivers/video/matrox/matroxfb_crtc2.c	Tue Dec 23 12:53:30 2003
+++ b/drivers/video/matrox/matroxfb_crtc2.c	Tue Dec 23 12:53:30 2003
@@ -605,6 +605,7 @@
 	m2info-&gt;fbcon.flags = FBINFO_FLAG_DEFAULT;
 	m2info-&gt;fbcon.currcon = -1;
 	m2info-&gt;fbcon.pseudo_palette = m2info-&gt;cmap;
+	m2info-&gt;fbcon.dev = &amp;m2info-&gt;primary_dev-&gt;pcidev-&gt;dev;
 	fb_alloc_cmap(&amp;m2info-&gt;fbcon.cmap, 256, 1);
 
 	if (mem &lt; 64)
diff -Nru a/drivers/video/neofb.c b/drivers/video/neofb.c
--- a/drivers/video/neofb.c	Tue Dec 23 12:53:12 2003
+++ b/drivers/video/neofb.c	Tue Dec 23 12:53:12 2003
@@ -1943,6 +1943,7 @@
 	info-&gt;flags = FBINFO_FLAG_DEFAULT;
 	info-&gt;par = par;
 	info-&gt;pseudo_palette = (void *) (par + 1);
+	info-&gt;dev = &amp;dev-&gt;dev;
 
 	fb_alloc_cmap(&amp;info-&gt;cmap, NR_PALETTE, 0);
 
diff -Nru a/drivers/video/radeonfb.c b/drivers/video/radeonfb.c
--- a/drivers/video/radeonfb.c	Tue Dec 23 12:53:34 2003
+++ b/drivers/video/radeonfb.c	Tue Dec 23 12:53:34 2003
@@ -3033,6 +3033,7 @@
 	pci_set_drvdata(pdev, rinfo);
 	rinfo-&gt;next = board_list;
 	board_list = rinfo;
+	rinfo-&gt;info.dev = &amp;pdev-&gt;dev;
 
 	if (register_framebuffer ((struct fb_info *) rinfo) &lt; 0) {
 		printk ("radeonfb: could not register framebuffer\n");
diff -Nru a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c
--- a/drivers/video/riva/fbdev.c	Tue Dec 23 12:53:31 2003
+++ b/drivers/video/riva/fbdev.c	Tue Dec 23 12:53:31 2003
@@ -1751,6 +1751,7 @@
 	if (info-&gt;pixmap.addr == NULL)
 		goto err_out_kfree1;
 	memset(info-&gt;pixmap.addr, 0, 64 * 1024);
+	info-&gt;dev = &amp;pd-&gt;dev;
 
 	strcat(rivafb_fix.id, rci-&gt;name);
 	default_par-&gt;riva.Architecture = rci-&gt;arch_rev;
diff -Nru a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c
--- a/drivers/video/sis/sis_main.c	Tue Dec 23 12:53:29 2003
+++ b/drivers/video/sis/sis_main.c	Tue Dec 23 12:53:29 2003
@@ -4507,6 +4507,7 @@
 		sis_fb_info.par = &amp;ivideo;
 		sis_fb_info.screen_base = ivideo.video_vbase;
 		sis_fb_info.fbops = &amp;sisfb_ops;
+		sis_fb_info.dev = &amp;pdev-&gt;dev;
 		sisfb_get_fix(&amp;sis_fb_info.fix, -1, &amp;sis_fb_info);
 		sis_fb_info.pseudo_palette = pseudo_palette;
 		
diff -Nru a/drivers/video/sstfb.c b/drivers/video/sstfb.c
--- a/drivers/video/sstfb.c	Tue Dec 23 12:53:40 2003
+++ b/drivers/video/sstfb.c	Tue Dec 23 12:53:40 2003
@@ -1477,6 +1477,7 @@
 	info-&gt;fbops	= &amp;sstfb_ops;
 	info-&gt;currcon	= -1;
 	info-&gt;pseudo_palette = &amp;all-&gt;pseudo_palette;
+	info-&gt;dev	= &amp;pdev-&gt;dev;
 
 	fix-&gt;type	= FB_TYPE_PACKED_PIXELS;
 	fix-&gt;visual	= FB_VISUAL_TRUECOLOR;
diff -Nru a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
--- a/drivers/video/tdfxfb.c	Tue Dec 23 12:53:46 2003
+++ b/drivers/video/tdfxfb.c	Tue Dec 23 12:53:46 2003
@@ -1248,6 +1248,7 @@
 	info-&gt;par		= default_par;
 	info-&gt;pseudo_palette	= (void *)(default_par + 1); 
 	info-&gt;flags		= FBINFO_FLAG_DEFAULT;
+	info-&gt;dev		= &amp;pdev-&gt;dev;
 
 #ifndef MODULE
 	if (!mode_option)
diff -Nru a/drivers/video/tgafb.c b/drivers/video/tgafb.c
--- a/drivers/video/tgafb.c	Tue Dec 23 12:53:25 2003
+++ b/drivers/video/tgafb.c	Tue Dec 23 12:53:25 2003
@@ -1430,6 +1430,7 @@
 	all-&gt;info.currcon = -1;
 	all-&gt;info.par = &amp;all-&gt;par;
 	all-&gt;info.pseudo_palette = all-&gt;pseudo_palette;
+	all-&gt;info.dev = &amp;pdev-&gt;dev;
 
 	/* This should give a reasonable default video mode.  */
 
diff -Nru a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c
--- a/drivers/video/tridentfb.c	Tue Dec 23 12:53:46 2003
+++ b/drivers/video/tridentfb.c	Tue Dec 23 12:53:46 2003
@@ -1156,6 +1156,7 @@
 		default_var.accel_flags &amp;= ~FB_ACCELF_TEXT;
 	default_var.activate |= FB_ACTIVATE_NOW;
 	fb_info.var = default_var;
+	fb_info.dev = &amp;dev-&gt;dev;
 	if (register_framebuffer(&amp;fb_info) &lt; 0) {
 		output("Could not register Trident framebuffer\n");
 		return -EINVAL;
diff -Nru a/include/linux/fb.h b/include/linux/fb.h
--- a/include/linux/fb.h	Tue Dec 23 12:53:34 2003
+++ b/include/linux/fb.h	Tue Dec 23 12:53:34 2003
@@ -352,6 +352,7 @@
 struct fb_info;
 struct vm_area_struct;
 struct file;
+struct device;
 
     /*
      *  Frame buffer operations
@@ -412,6 +413,7 @@
    struct vc_data *display_fg;		/* Console visible on this display */
    int currcon;				/* Current VC. */	
    void *pseudo_palette;                /* Fake palette of 16 colors */ 
+   struct device *dev;                  /* pointer to the device for this fb */
    /* From here on everything is device dependent */
    void *par;	
 };
</pre></body></html>