diff options
author | Antonino A. Daplas <adaplas@gmail.com> | 2006-06-26 03:27:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-26 12:58:33 -0400 |
commit | e614b18dcedb247ce6f848e623cdf2336df2b476 (patch) | |
tree | a867f1fa177eb2ed6c577e45d297374744adca3b /drivers/video/fbmem.c | |
parent | 3e795de7631b2366d7301182c8d91f6d2911467b (diff) |
[PATCH] VT binding: Update fbcon to support binding
The control for binding/unbinding is moved from fbcon to the console layer.
Thus the fbcon sysfs attributes, attach and detach, are also gone.
1. Add a notifier event that tells fbcon if a framebuffer driver has been
unregistered. If no registered driver remains, fbcon will unregister
itself from the console layer.
2. Replaced calls to give_up_console() with unregister_con_driver().
3. Still use take_over_console() instead of register_con_driver() to
maintain compatibility
4. Respect the parameter first_fb_vc and last_fb_vc instead of using 0 and
MAX_NR_CONSOLES - 1. These parameters are settable by the user.
5. When fbcon is completely unbound from the console layer, fbcon will
also release (iow, decrement module reference counts to zero) all fbdev
drivers. In other words, a bind or unbind request from the console layer
will propagate down to the framebuffer drivers.
6. If fbcon is not bound to the console, it will ignore all notifier
events (except driver registration and unregistration) and all sysfs
requests.
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/fbmem.c')
-rw-r--r-- | drivers/video/fbmem.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index a2102a543ee7..31143afe7c95 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c | |||
@@ -1353,6 +1353,7 @@ register_framebuffer(struct fb_info *fb_info) | |||
1353 | int | 1353 | int |
1354 | unregister_framebuffer(struct fb_info *fb_info) | 1354 | unregister_framebuffer(struct fb_info *fb_info) |
1355 | { | 1355 | { |
1356 | struct fb_event event; | ||
1356 | int i; | 1357 | int i; |
1357 | 1358 | ||
1358 | i = fb_info->node; | 1359 | i = fb_info->node; |
@@ -1360,13 +1361,17 @@ unregister_framebuffer(struct fb_info *fb_info) | |||
1360 | return -EINVAL; | 1361 | return -EINVAL; |
1361 | devfs_remove("fb/%d", i); | 1362 | devfs_remove("fb/%d", i); |
1362 | 1363 | ||
1363 | if (fb_info->pixmap.addr && (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT)) | 1364 | if (fb_info->pixmap.addr && |
1365 | (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT)) | ||
1364 | kfree(fb_info->pixmap.addr); | 1366 | kfree(fb_info->pixmap.addr); |
1365 | fb_destroy_modelist(&fb_info->modelist); | 1367 | fb_destroy_modelist(&fb_info->modelist); |
1366 | registered_fb[i]=NULL; | 1368 | registered_fb[i]=NULL; |
1367 | num_registered_fb--; | 1369 | num_registered_fb--; |
1368 | fb_cleanup_class_device(fb_info); | 1370 | fb_cleanup_class_device(fb_info); |
1369 | class_device_destroy(fb_class, MKDEV(FB_MAJOR, i)); | 1371 | class_device_destroy(fb_class, MKDEV(FB_MAJOR, i)); |
1372 | event.info = fb_info; | ||
1373 | blocking_notifier_call_chain(&fb_notifier_list, | ||
1374 | FB_EVENT_FB_UNREGISTERED, &event); | ||
1370 | return 0; | 1375 | return 0; |
1371 | } | 1376 | } |
1372 | 1377 | ||