diff options
author | Antonino Daplas <adaplas@hotpop.com> | 2004-08-22 22:52:31 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-08-22 22:52:31 -0700 |
commit | 37455dc6721caa6b0d553476543471e7d4a35842 (patch) | |
tree | 42b949a4a86846be0a28b49a58c8fbf6459e8756 /drivers | |
parent | 0a857e2396576c9a8c3c5823e4846b0f0c8b04cf (diff) | |
download | history-37455dc6721caa6b0d553476543471e7d4a35842.tar.gz |
[PATCH] fbdev: do the deletion of mode entries at fbdev level
If a request for deletion of an entry in the mode database is requested, do
it at core fbdev level instead of doing it at the console level.
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')
-rw-r--r-- | drivers/video/console/fbcon.c | 12 | ||||
-rw-r--r-- | drivers/video/fbmem.c | 24 |
2 files changed, 22 insertions, 14 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 521caf7e8ef00f..0767d173a26fd7 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -2671,8 +2671,8 @@ static void fbcon_modechanged(struct fb_info *info) } } -static void fbcon_mode_deleted(struct fb_info *info, - struct fb_videomode *mode) +static int fbcon_mode_deleted(struct fb_info *info, + struct fb_videomode *mode) { struct fb_info *fb_info; struct display *p; @@ -2694,8 +2694,7 @@ static void fbcon_mode_deleted(struct fb_info *info, break; } } - if (!found) - fb_delete_videomode(mode, &info->monspecs.modelist); + return found; } static int fbcon_event_notify(struct notifier_block *self, @@ -2704,6 +2703,7 @@ static int fbcon_event_notify(struct notifier_block *self, struct fb_event *event = (struct fb_event *) data; struct fb_info *info = event->info; struct fb_videomode *mode; + int ret = 0; switch(action) { case FB_EVENT_SUSPEND: @@ -2717,11 +2717,11 @@ static int fbcon_event_notify(struct notifier_block *self, break; case FB_EVENT_MODE_DELETE: mode = (struct fb_videomode *) event->data; - fbcon_mode_deleted(info, mode); + ret = fbcon_mode_deleted(info, mode); break; } - return 0; + return ret; } /* diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 8003c716cbe444..1d570a9b0cc89e 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -1089,18 +1089,26 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var) if (var->activate & FB_ACTIVATE_INV_MODE) { struct fb_videomode mode1, mode2; - struct fb_event event; + int ret = 0; fb_var_to_videomode(&mode1, var); fb_var_to_videomode(&mode2, &info->var); /* make sure we don't delete the videomode of current var */ - if (fb_mode_is_equal(&mode1, &mode2)) - return -EINVAL; - event.info = info; - event.data = &mode1; - notifier_call_chain(&fb_notifier_list, FB_EVENT_MODE_DELETE, - &event); - return 0; + ret = fb_mode_is_equal(&mode1, &mode2); + + if (!ret) { + struct fb_event event; + + event.info = info; + event.data = &mode1; + ret = notifier_call_chain(&fb_notifier_list, + FB_EVENT_MODE_DELETE, &event); + } + + if (!ret) + fb_delete_videomode(&mode1, &info->monspecs.modelist); + + return ret; } if ((var->activate & FB_ACTIVATE_FORCE) || |