diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index a15b44e..d80e097 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -1007,24 +1007,33 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var) int fb_blank(struct fb_info *info, int blank) -{ - int ret = -EINVAL; +{ + struct fb_event event; + int ret = -EINVAL; - if (blank > FB_BLANK_POWERDOWN) - blank = FB_BLANK_POWERDOWN; + if (blank > FB_BLANK_POWERDOWN) + blank = FB_BLANK_POWERDOWN; - if (info->fbops->fb_blank) - ret = info->fbops->fb_blank(blank, info); + event.info = info; + event.data = ␣ - if (!ret) { - struct fb_event event; + if (blank < FB_BLANK_POWERDOWN) { + if (info->fbops->fb_blank) + ret = info->fbops->fb_blank(blank, info); - event.info = info; - event.data = ␣ - fb_notifier_call_chain(FB_EVENT_BLANK, &event); + ret = fb_notifier_call_chain(FB_EVENT_BLANK, &event); + if ((ret & NOTIFY_STOP_MASK) == NOTIFY_STOP_MASK) + printk(KERN_ERR "notifier_call failed.\n"); + } else { + ret = fb_notifier_call_chain(FB_EVENT_BLANK, &event); + if ((ret & NOTIFY_STOP_MASK) == NOTIFY_STOP_MASK) + printk(KERN_ERR "notifier_call failed.\n"); + + if (info->fbops->fb_blank) + ret = info->fbops->fb_blank(blank, info); } - return ret; + return ret; } static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,