diff -Napur -X /home/jbarnes/dontdiff --exclude=Makefile linux-2.6.22-rc2/drivers/video/console/fbcon.c linux-2.6.22-rc2-modesetting/drivers/video/console/fbcon.c --- linux-2.6.22-rc2/drivers/video/console/fbcon.c 2007-05-18 21:06:17.000000000 -0700 +++ linux-2.6.22-rc2-modesetting/drivers/video/console/fbcon.c 2007-05-22 14:26:20.000000000 -0700 @@ -2937,6 +2937,21 @@ static int fbcon_mode_deleted(struct fb_ return found; } +static int fbcon_fb_unbind(int idx) +{ + int i; + + for (i = 0; i < MAX_NR_CONSOLES; i++) { + /* Assure we do not unbind other drivers */ + if (idx == con2fb_map[i]) + /* can be optimize to minimize multiple calls to + unbind_con_driver() */ + unbind_con_driver(&fb_con, i, i, 0); + } + + return 0; +} + static int fbcon_fb_unregistered(int idx) { int i; @@ -3114,6 +3129,9 @@ static int fbcon_event_notify(struct not mode = event->data; ret = fbcon_mode_deleted(info, mode); break; + case FB_EVENT_FB_UNBIND: + ret = fbcon_fb_unbind(info->node); + break; case FB_EVENT_FB_REGISTERED: ret = fbcon_fb_registered(info->node); break; diff -Napur -X /home/jbarnes/dontdiff --exclude=Makefile linux-2.6.22-rc2/drivers/video/fbmem.c linux-2.6.22-rc2-modesetting/drivers/video/fbmem.c --- linux-2.6.22-rc2/drivers/video/fbmem.c 2007-05-18 21:06:17.000000000 -0700 +++ linux-2.6.22-rc2-modesetting/drivers/video/fbmem.c 2007-05-22 14:10:35.000000000 -0700 @@ -1400,6 +1400,8 @@ unregister_framebuffer(struct fb_info *f if (!registered_fb[i]) return -EINVAL; + event.info = fb_info; + fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); if (fb_info->pixmap.addr && (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT)) kfree(fb_info->pixmap.addr); diff -Napur -X /home/jbarnes/dontdiff --exclude=Makefile linux-2.6.22-rc2/include/linux/fb.h linux-2.6.22-rc2-modesetting/include/linux/fb.h --- linux-2.6.22-rc2/include/linux/fb.h 2007-05-18 21:06:17.000000000 -0700 +++ linux-2.6.22-rc2-modesetting/include/linux/fb.h 2007-05-22 14:11:00.000000000 -0700 @@ -529,6 +529,9 @@ struct fb_cursor_user { #define FB_EVENT_CONBLANK 0x0C /* Get drawing requirements */ #define FB_EVENT_GET_REQ 0x0D +/* Unbind from the console if possible */ +#define FB_EVENT_FB_UNBIND 0x0E + struct fb_event { struct fb_info *info;