aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAntonino Daplas <adaplas@hotpop.com>2004-08-22 22:52:31 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-22 22:52:31 -0700
commit37455dc6721caa6b0d553476543471e7d4a35842 (patch)
tree42b949a4a86846be0a28b49a58c8fbf6459e8756 /drivers
parent0a857e2396576c9a8c3c5823e4846b0f0c8b04cf (diff)
downloadhistory-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.c12
-rw-r--r--drivers/video/fbmem.c24
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) ||