aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorThomas Koeller <thomas@koeller.dyndns.org>2006-01-09 23:53:48 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-10 11:01:52 -0500
commitcae8a12f49972f040bae6707b7707cd93fe9c9ab (patch)
treec898f9bcd31ba14d0f646e191525cb6ef6a09976 /drivers
parent74b4f04231b9755106d803ef73b11c3cf6978bcd (diff)
[PATCH] non-linear frame buffer read/write access
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/fbmem.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 83e259413115..32a9b69becc5 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -1234,6 +1234,7 @@ fb_open(struct inode *inode, struct file *file)
1234 return -ENODEV; 1234 return -ENODEV;
1235 if (!try_module_get(info->fbops->owner)) 1235 if (!try_module_get(info->fbops->owner))
1236 return -ENODEV; 1236 return -ENODEV;
1237 file->private_data = info;
1237 if (info->fbops->fb_open) { 1238 if (info->fbops->fb_open) {
1238 res = info->fbops->fb_open(info,1); 1239 res = info->fbops->fb_open(info,1);
1239 if (res) 1240 if (res)
@@ -1245,11 +1246,9 @@ fb_open(struct inode *inode, struct file *file)
1245static int 1246static int
1246fb_release(struct inode *inode, struct file *file) 1247fb_release(struct inode *inode, struct file *file)
1247{ 1248{
1248 int fbidx = iminor(inode); 1249 struct fb_info * const info = file->private_data;
1249 struct fb_info *info;
1250 1250
1251 lock_kernel(); 1251 lock_kernel();
1252 info = registered_fb[fbidx];
1253 if (info->fbops->fb_release) 1252 if (info->fbops->fb_release)
1254 info->fbops->fb_release(info,1); 1253 info->fbops->fb_release(info,1);
1255 module_put(info->fbops->owner); 1254 module_put(info->fbops->owner);