|
@@ -1853,6 +1853,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
|
|
struct display *p = &fb_display[vc->vc_num];
|
|
|
int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK;
|
|
|
+ unsigned short saved_ec;
|
|
|
+ int ret;
|
|
|
|
|
|
if (fbcon_is_inactive(vc, info))
|
|
|
return -EINVAL;
|
|
@@ -1865,6 +1867,11 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
* whole screen (prevents flicker).
|
|
|
*/
|
|
|
|
|
|
+ saved_ec = vc->vc_video_erase_char;
|
|
|
+ vc->vc_video_erase_char = vc->vc_scrl_erase_char;
|
|
|
+
|
|
|
+ ret = 0;
|
|
|
+
|
|
|
switch (dir) {
|
|
|
case SM_UP:
|
|
|
if (count > vc->vc_rows) /* Maximum realistic size */
|
|
@@ -1883,7 +1890,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
(b - count)),
|
|
|
vc->vc_scrl_erase_char,
|
|
|
vc->vc_size_row * count);
|
|
|
- return 1;
|
|
|
+ ret = 1;
|
|
|
break;
|
|
|
|
|
|
case SCROLL_WRAP_MOVE:
|
|
@@ -1955,7 +1962,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
(b - count)),
|
|
|
vc->vc_scrl_erase_char,
|
|
|
vc->vc_size_row * count);
|
|
|
- return 1;
|
|
|
+ ret = 1;
|
|
|
+ break;
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -1974,7 +1982,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
t),
|
|
|
vc->vc_scrl_erase_char,
|
|
|
vc->vc_size_row * count);
|
|
|
- return 1;
|
|
|
+ ret = 1;
|
|
|
break;
|
|
|
|
|
|
case SCROLL_WRAP_MOVE:
|
|
@@ -2044,10 +2052,13 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir,
|
|
|
t),
|
|
|
vc->vc_scrl_erase_char,
|
|
|
vc->vc_size_row * count);
|
|
|
- return 1;
|
|
|
+ ret = 1;
|
|
|
+ break;
|
|
|
}
|
|
|
+ break;
|
|
|
}
|
|
|
- return 0;
|
|
|
+ vc->vc_video_erase_char = saved_ec;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
|