diff options
Diffstat (limited to 'drivers/video/console/fbcon.c')
-rw-r--r-- | drivers/video/console/fbcon.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 97aff8db10bf..c6299e8a041d 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -107,9 +107,7 @@ static struct display fb_display[MAX_NR_CONSOLES]; | |||
107 | 107 | ||
108 | static signed char con2fb_map[MAX_NR_CONSOLES]; | 108 | static signed char con2fb_map[MAX_NR_CONSOLES]; |
109 | static signed char con2fb_map_boot[MAX_NR_CONSOLES]; | 109 | static signed char con2fb_map_boot[MAX_NR_CONSOLES]; |
110 | #ifndef MODULE | 110 | |
111 | static int logo_height; | ||
112 | #endif | ||
113 | static int logo_lines; | 111 | static int logo_lines; |
114 | /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO | 112 | /* logo_shown is an index to vc_cons when >= 0; otherwise follows FBCON_LOGO |
115 | enums. */ | 113 | enums. */ |
@@ -607,6 +605,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, | |||
607 | struct fbcon_ops *ops = info->fbcon_par; | 605 | struct fbcon_ops *ops = info->fbcon_par; |
608 | int cnt, erase = vc->vc_video_erase_char, step; | 606 | int cnt, erase = vc->vc_video_erase_char, step; |
609 | unsigned short *save = NULL, *r, *q; | 607 | unsigned short *save = NULL, *r, *q; |
608 | int logo_height; | ||
610 | 609 | ||
611 | if (info->flags & FBINFO_MODULE) { | 610 | if (info->flags & FBINFO_MODULE) { |
612 | logo_shown = FBCON_LOGO_DONTSHOW; | 611 | logo_shown = FBCON_LOGO_DONTSHOW; |
@@ -1312,6 +1311,9 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, | |||
1312 | if (!height || !width) | 1311 | if (!height || !width) |
1313 | return; | 1312 | return; |
1314 | 1313 | ||
1314 | if (sy < vc->vc_top && vc->vc_top == logo_lines) | ||
1315 | vc->vc_top = 0; | ||
1316 | |||
1315 | /* Split blits that cross physical y_wrap boundary */ | 1317 | /* Split blits that cross physical y_wrap boundary */ |
1316 | 1318 | ||
1317 | y_break = p->vrows - p->yscroll; | 1319 | y_break = p->vrows - p->yscroll; |
@@ -2516,7 +2518,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2516 | c = vc->vc_video_erase_char; | 2518 | c = vc->vc_video_erase_char; |
2517 | vc->vc_video_erase_char = | 2519 | vc->vc_video_erase_char = |
2518 | ((c & 0xfe00) >> 1) | (c & 0xff); | 2520 | ((c & 0xfe00) >> 1) | (c & 0xff); |
2519 | c = vc->vc_def_color; | 2521 | c = vc->vc_scrl_erase_char; |
2520 | vc->vc_scrl_erase_char = | 2522 | vc->vc_scrl_erase_char = |
2521 | ((c & 0xFE00) >> 1) | (c & 0xFF); | 2523 | ((c & 0xFE00) >> 1) | (c & 0xFF); |
2522 | vc->vc_attr >>= 1; | 2524 | vc->vc_attr >>= 1; |
@@ -2549,7 +2551,7 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2549 | if (vc->vc_can_do_color) { | 2551 | if (vc->vc_can_do_color) { |
2550 | vc->vc_video_erase_char = | 2552 | vc->vc_video_erase_char = |
2551 | ((c & 0xff00) << 1) | (c & 0xff); | 2553 | ((c & 0xff00) << 1) | (c & 0xff); |
2552 | c = vc->vc_def_color; | 2554 | c = vc->vc_scrl_erase_char; |
2553 | vc->vc_scrl_erase_char = | 2555 | vc->vc_scrl_erase_char = |
2554 | ((c & 0xFF00) << 1) | (c & 0xFF); | 2556 | ((c & 0xFF00) << 1) | (c & 0xFF); |
2555 | vc->vc_attr <<= 1; | 2557 | vc->vc_attr <<= 1; |
@@ -3586,7 +3588,8 @@ static int __init fb_console_init(void) | |||
3586 | 3588 | ||
3587 | acquire_console_sem(); | 3589 | acquire_console_sem(); |
3588 | fb_register_client(&fbcon_event_notifier); | 3590 | fb_register_client(&fbcon_event_notifier); |
3589 | fbcon_device = device_create(fb_class, NULL, MKDEV(0, 0), "fbcon"); | 3591 | fbcon_device = device_create_drvdata(fb_class, NULL, MKDEV(0, 0), |
3592 | NULL, "fbcon"); | ||
3590 | 3593 | ||
3591 | if (IS_ERR(fbcon_device)) { | 3594 | if (IS_ERR(fbcon_device)) { |
3592 | printk(KERN_WARNING "Unable to create device " | 3595 | printk(KERN_WARNING "Unable to create device " |