diff options
Diffstat (limited to 'drivers/video/console/fbcon.c')
-rw-r--r-- | drivers/video/console/fbcon.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index ad31983b43eb..5fa8b76673cb 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -1853,6 +1853,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
1853 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; | 1853 | struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; |
1854 | struct display *p = &fb_display[vc->vc_num]; | 1854 | struct display *p = &fb_display[vc->vc_num]; |
1855 | int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK; | 1855 | int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK; |
1856 | unsigned short saved_ec; | ||
1857 | int ret; | ||
1856 | 1858 | ||
1857 | if (fbcon_is_inactive(vc, info)) | 1859 | if (fbcon_is_inactive(vc, info)) |
1858 | return -EINVAL; | 1860 | return -EINVAL; |
@@ -1865,6 +1867,11 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
1865 | * whole screen (prevents flicker). | 1867 | * whole screen (prevents flicker). |
1866 | */ | 1868 | */ |
1867 | 1869 | ||
1870 | saved_ec = vc->vc_video_erase_char; | ||
1871 | vc->vc_video_erase_char = vc->vc_scrl_erase_char; | ||
1872 | |||
1873 | ret = 0; | ||
1874 | |||
1868 | switch (dir) { | 1875 | switch (dir) { |
1869 | case SM_UP: | 1876 | case SM_UP: |
1870 | if (count > vc->vc_rows) /* Maximum realistic size */ | 1877 | 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, | |||
1883 | (b - count)), | 1890 | (b - count)), |
1884 | vc->vc_scrl_erase_char, | 1891 | vc->vc_scrl_erase_char, |
1885 | vc->vc_size_row * count); | 1892 | vc->vc_size_row * count); |
1886 | return 1; | 1893 | ret = 1; |
1887 | break; | 1894 | break; |
1888 | 1895 | ||
1889 | case SCROLL_WRAP_MOVE: | 1896 | case SCROLL_WRAP_MOVE: |
@@ -1955,7 +1962,8 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
1955 | (b - count)), | 1962 | (b - count)), |
1956 | vc->vc_scrl_erase_char, | 1963 | vc->vc_scrl_erase_char, |
1957 | vc->vc_size_row * count); | 1964 | vc->vc_size_row * count); |
1958 | return 1; | 1965 | ret = 1; |
1966 | break; | ||
1959 | } | 1967 | } |
1960 | break; | 1968 | break; |
1961 | 1969 | ||
@@ -1974,7 +1982,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
1974 | t), | 1982 | t), |
1975 | vc->vc_scrl_erase_char, | 1983 | vc->vc_scrl_erase_char, |
1976 | vc->vc_size_row * count); | 1984 | vc->vc_size_row * count); |
1977 | return 1; | 1985 | ret = 1; |
1978 | break; | 1986 | break; |
1979 | 1987 | ||
1980 | case SCROLL_WRAP_MOVE: | 1988 | case SCROLL_WRAP_MOVE: |
@@ -2044,10 +2052,13 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
2044 | t), | 2052 | t), |
2045 | vc->vc_scrl_erase_char, | 2053 | vc->vc_scrl_erase_char, |
2046 | vc->vc_size_row * count); | 2054 | vc->vc_size_row * count); |
2047 | return 1; | 2055 | ret = 1; |
2056 | break; | ||
2048 | } | 2057 | } |
2058 | break; | ||
2049 | } | 2059 | } |
2050 | return 0; | 2060 | vc->vc_video_erase_char = saved_ec; |
2061 | return ret; | ||
2051 | } | 2062 | } |
2052 | 2063 | ||
2053 | 2064 | ||
@@ -2507,6 +2518,9 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2507 | c = vc->vc_video_erase_char; | 2518 | c = vc->vc_video_erase_char; |
2508 | vc->vc_video_erase_char = | 2519 | vc->vc_video_erase_char = |
2509 | ((c & 0xfe00) >> 1) | (c & 0xff); | 2520 | ((c & 0xfe00) >> 1) | (c & 0xff); |
2521 | c = vc->vc_def_color; | ||
2522 | vc->vc_scrl_erase_char = | ||
2523 | ((c & 0xFE00) >> 1) | (c & 0xFF); | ||
2510 | vc->vc_attr >>= 1; | 2524 | vc->vc_attr >>= 1; |
2511 | } | 2525 | } |
2512 | } else if (!vc->vc_hi_font_mask && cnt == 512) { | 2526 | } else if (!vc->vc_hi_font_mask && cnt == 512) { |
@@ -2537,9 +2551,14 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, | |||
2537 | if (vc->vc_can_do_color) { | 2551 | if (vc->vc_can_do_color) { |
2538 | vc->vc_video_erase_char = | 2552 | vc->vc_video_erase_char = |
2539 | ((c & 0xff00) << 1) | (c & 0xff); | 2553 | ((c & 0xff00) << 1) | (c & 0xff); |
2554 | c = vc->vc_def_color; | ||
2555 | vc->vc_scrl_erase_char = | ||
2556 | ((c & 0xFF00) << 1) | (c & 0xFF); | ||
2540 | vc->vc_attr <<= 1; | 2557 | vc->vc_attr <<= 1; |
2541 | } else | 2558 | } else { |
2542 | vc->vc_video_erase_char = c & ~0x100; | 2559 | vc->vc_video_erase_char = c & ~0x100; |
2560 | vc->vc_scrl_erase_char = c & ~0x100; | ||
2561 | } | ||
2543 | } | 2562 | } |
2544 | 2563 | ||
2545 | } | 2564 | } |