[PATCH] non-linear frame buffer read/write access
authorThomas Koeller <thomas@koeller.dyndns.org>
Tue, 10 Jan 2006 04:53:48 +0000 (20:53 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 10 Jan 2006 16:01:52 +0000 (08:01 -0800)
While the code in fbmem.c allows for hooking read/write access to
non-linear frame buffers by means of fb_read and fb_write in struct fb_ops,
I could not find a way tho access the actual frame buffer memory from
within these routines.  I therefore had to patch fbmem.c, to be able to
retrieve a pointer to struct fb_info from the 'file' argument to these
functions.

The second hunk of the patch is not strictly required, I only did that for
symmetry reasons (and the code is somewhat shorter).

Signed-off-by: Thomas Koeller <thomas@koeller.dyndns.org>
Acked-by: "Antonino A. Daplas" <adaplas@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/video/fbmem.c

index 83e259413115066ae5b15ac0d19fa92b49dd3462..32a9b69becc51d32764b6a75cbdfdad471dc5af7 100644 (file)
@@ -1234,6 +1234,7 @@ fb_open(struct inode *inode, struct file *file)
                return -ENODEV;
        if (!try_module_get(info->fbops->owner))
                return -ENODEV;
+       file->private_data = info;
        if (info->fbops->fb_open) {
                res = info->fbops->fb_open(info,1);
                if (res)
@@ -1245,11 +1246,9 @@ fb_open(struct inode *inode, struct file *file)
 static int 
 fb_release(struct inode *inode, struct file *file)
 {
-       int fbidx = iminor(inode);
-       struct fb_info *info;
+       struct fb_info * const info = file->private_data;
 
        lock_kernel();
-       info = registered_fb[fbidx];
        if (info->fbops->fb_release)
                info->fbops->fb_release(info,1);
        module_put(info->fbops->owner);