diff options
Diffstat (limited to 'drivers/video/console/fbcon.c')
| -rw-r--r-- | drivers/video/console/fbcon.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 4f6fc785e95f..041d06987861 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
| @@ -687,13 +687,12 @@ static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info, | |||
| 687 | err = -ENODEV; | 687 | err = -ENODEV; |
| 688 | 688 | ||
| 689 | if (!err) { | 689 | if (!err) { |
| 690 | ops = kmalloc(sizeof(struct fbcon_ops), GFP_KERNEL); | 690 | ops = kzalloc(sizeof(struct fbcon_ops), GFP_KERNEL); |
| 691 | if (!ops) | 691 | if (!ops) |
| 692 | err = -ENOMEM; | 692 | err = -ENOMEM; |
| 693 | } | 693 | } |
| 694 | 694 | ||
| 695 | if (!err) { | 695 | if (!err) { |
| 696 | memset(ops, 0, sizeof(struct fbcon_ops)); | ||
| 697 | info->fbcon_par = ops; | 696 | info->fbcon_par = ops; |
| 698 | set_blitting_type(vc, info); | 697 | set_blitting_type(vc, info); |
| 699 | } | 698 | } |
| @@ -919,13 +918,12 @@ static const char *fbcon_startup(void) | |||
| 919 | return NULL; | 918 | return NULL; |
| 920 | } | 919 | } |
| 921 | 920 | ||
| 922 | ops = kmalloc(sizeof(struct fbcon_ops), GFP_KERNEL); | 921 | ops = kzalloc(sizeof(struct fbcon_ops), GFP_KERNEL); |
| 923 | if (!ops) { | 922 | if (!ops) { |
| 924 | module_put(owner); | 923 | module_put(owner); |
| 925 | return NULL; | 924 | return NULL; |
| 926 | } | 925 | } |
| 927 | 926 | ||
| 928 | memset(ops, 0, sizeof(struct fbcon_ops)); | ||
| 929 | ops->currcon = -1; | 927 | ops->currcon = -1; |
| 930 | ops->graphics = 1; | 928 | ops->graphics = 1; |
| 931 | ops->cur_rotate = -1; | 929 | ops->cur_rotate = -1; |
| @@ -1408,16 +1406,13 @@ static __inline__ void ypan_up_redraw(struct vc_data *vc, int t, int count) | |||
| 1408 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; | 1406 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; |
| 1409 | struct fbcon_ops *ops = info->fbcon_par; | 1407 | struct fbcon_ops *ops = info->fbcon_par; |
| 1410 | struct display *p = &fb_display[vc->vc_num]; | 1408 | struct display *p = &fb_display[vc->vc_num]; |
| 1411 | int redraw = 0; | ||
| 1412 | 1409 | ||
| 1413 | p->yscroll += count; | 1410 | p->yscroll += count; |
| 1411 | |||
| 1414 | if (p->yscroll > p->vrows - vc->vc_rows) { | 1412 | if (p->yscroll > p->vrows - vc->vc_rows) { |
| 1415 | p->yscroll -= p->vrows - vc->vc_rows; | 1413 | p->yscroll -= p->vrows - vc->vc_rows; |
| 1416 | redraw = 1; | ||
| 1417 | } | ||
| 1418 | |||
| 1419 | if (redraw) | ||
| 1420 | fbcon_redraw_move(vc, p, t + count, vc->vc_rows - count, t); | 1414 | fbcon_redraw_move(vc, p, t + count, vc->vc_rows - count, t); |
| 1415 | } | ||
| 1421 | 1416 | ||
| 1422 | ops->var.xoffset = 0; | 1417 | ops->var.xoffset = 0; |
| 1423 | ops->var.yoffset = p->yscroll * vc->vc_font.height; | 1418 | ops->var.yoffset = p->yscroll * vc->vc_font.height; |
| @@ -1459,16 +1454,13 @@ static __inline__ void ypan_down_redraw(struct vc_data *vc, int t, int count) | |||
| 1459 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; | 1454 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; |
| 1460 | struct fbcon_ops *ops = info->fbcon_par; | 1455 | struct fbcon_ops *ops = info->fbcon_par; |
| 1461 | struct display *p = &fb_display[vc->vc_num]; | 1456 | struct display *p = &fb_display[vc->vc_num]; |
| 1462 | int redraw = 0; | ||
| 1463 | 1457 | ||
| 1464 | p->yscroll -= count; | 1458 | p->yscroll -= count; |
| 1459 | |||
| 1465 | if (p->yscroll < 0) { | 1460 | if (p->yscroll < 0) { |
| 1466 | p->yscroll += p->vrows - vc->vc_rows; | 1461 | p->yscroll += p->vrows - vc->vc_rows; |
| 1467 | redraw = 1; | ||
| 1468 | } | ||
| 1469 | |||
| 1470 | if (redraw) | ||
| 1471 | fbcon_redraw_move(vc, p, t, vc->vc_rows - count, t + count); | 1462 | fbcon_redraw_move(vc, p, t, vc->vc_rows - count, t + count); |
| 1463 | } | ||
| 1472 | 1464 | ||
| 1473 | ops->var.xoffset = 0; | 1465 | ops->var.xoffset = 0; |
| 1474 | ops->var.yoffset = p->yscroll * vc->vc_font.height; | 1466 | ops->var.yoffset = p->yscroll * vc->vc_font.height; |
| @@ -2105,8 +2097,11 @@ static int fbcon_switch(struct vc_data *vc) | |||
| 2105 | info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { | 2097 | info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { |
| 2106 | if (info->fbops->fb_set_par) | 2098 | if (info->fbops->fb_set_par) |
| 2107 | info->fbops->fb_set_par(info); | 2099 | info->fbops->fb_set_par(info); |
| 2108 | fbcon_del_cursor_timer(old_info); | 2100 | |
| 2109 | fbcon_add_cursor_timer(info); | 2101 | if (old_info != info) { |
| 2102 | fbcon_del_cursor_timer(old_info); | ||
| 2103 | fbcon_add_cursor_timer(info); | ||
| 2104 | } | ||
| 2110 | } | 2105 | } |
| 2111 | 2106 | ||
| 2112 | set_blitting_type(vc, info); | 2107 | set_blitting_type(vc, info); |
