diff options
author | Thomas Koeller <thomas@koeller.dyndns.org> | 2006-01-09 23:53:48 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-10 11:01:52 -0500 |
commit | cae8a12f49972f040bae6707b7707cd93fe9c9ab (patch) | |
tree | c898f9bcd31ba14d0f646e191525cb6ef6a09976 /drivers | |
parent | 74b4f04231b9755106d803ef73b11c3cf6978bcd (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.c | 5 |
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) | |||
1245 | static int | 1246 | static int |
1246 | fb_release(struct inode *inode, struct file *file) | 1247 | fb_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); |