Commit 17e8ea40 authored by Luca Tettamanti's avatar Luca Tettamanti Committed by Greg Kroah-Hartman

[PATCH] Sysfs for framebuffer

the following patch (against 2.6.5-rc2) teaches fb to use class_simple.
With this patch udev will automagically create device nodes for each
framebuffer registered. Once all drivers are converted to
framebuffer_{alloc,release} we can switch to our own class.

This is what sysfs dir looks like:

notebook:~# tree /sys/class/graphics/
/sys/class/graphics/
`-- fb0
    `-- dev
parent 2df5f2d5
......@@ -32,6 +32,9 @@
#include <linux/kmod.h>
#endif
#include <linux/devfs_fs_kernel.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/device.h>
#if defined(__mc68000__) || defined(CONFIG_APUS)
#include <asm/setup.h>
......@@ -1251,6 +1254,8 @@ static struct file_operations fb_fops = {
#endif
};
static struct class_simple *fb_class;
/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
......@@ -1265,6 +1270,7 @@ int
register_framebuffer(struct fb_info *fb_info)
{
int i;
struct class_device *c;
if (num_registered_fb == FB_MAX)
return -ENXIO;
......@@ -1274,6 +1280,12 @@ register_framebuffer(struct fb_info *fb_info)
break;
fb_info->node = i;
c = class_simple_device_add(fb_class, MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(c)) {
/* Not fatal */
printk(KERN_WARNING "Unable to create class_device for framebuffer %d; errno = %ld\n", i, PTR_ERR(c));
}
if (fb_info->pixmap.addr == NULL) {
fb_info->pixmap.addr = kmalloc(FBPIXMAPSIZE, GFP_KERNEL);
if (fb_info->pixmap.addr) {
......@@ -1338,6 +1350,7 @@ unregister_framebuffer(struct fb_info *fb_info)
kfree(fb_info->sprite.addr);
registered_fb[i]=NULL;
num_registered_fb--;
class_simple_device_remove(MKDEV(FB_MAJOR, i));
return 0;
}
......@@ -1399,6 +1412,12 @@ fbmem_init(void)
if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);
fb_class = class_simple_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
}
#ifdef CONFIG_FB_OF
if (ofonly) {
offb_init();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment