diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.30/030-dont-override-logo-with-early-printks.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.30/030-dont-override-logo-with-early-printks.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.30/030-dont-override-logo-with-early-printks.patch b/target/linux/s3c24xx/patches-2.6.30/030-dont-override-logo-with-early-printks.patch new file mode 100644 index 000000000..305af188a --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.30/030-dont-override-logo-with-early-printks.patch @@ -0,0 +1,78 @@ +--- a/drivers/video/console/fbcon.c ++++ b/drivers/video/console/fbcon.c +@@ -562,7 +562,7 @@ static void fbcon_prepare_logo(struct vc + /* Need to make room for the logo */ + struct fbcon_ops *ops = info->fbcon_par; + int cnt, erase = vc->vc_video_erase_char, step; +- unsigned short *save = NULL, *r, *q; ++ unsigned short *r, *q; + int logo_height; + + if (info->flags & FBINFO_MODULE) { +@@ -581,37 +581,18 @@ static void fbcon_prepare_logo(struct vc + q = (unsigned short *) (vc->vc_origin + + vc->vc_size_row * rows); + step = logo_lines * cols; +- for (r = q - logo_lines * cols; r < q; r++) +- if (scr_readw(r) != vc->vc_video_erase_char) +- break; +- if (r != q && new_rows >= rows + logo_lines) { +- save = kmalloc(logo_lines * new_cols * 2, GFP_KERNEL); +- if (save) { +- int i = cols < new_cols ? cols : new_cols; +- scr_memsetw(save, erase, logo_lines * new_cols * 2); +- r = q - step; +- for (cnt = 0; cnt < logo_lines; cnt++, r += i) +- scr_memcpyw(save + cnt * new_cols, r, 2 * i); +- r = q; +- } +- } +- if (r == q) { +- /* We can scroll screen down */ +- r = q - step - cols; +- for (cnt = rows - logo_lines; cnt > 0; cnt--) { +- scr_memcpyw(r + step, r, vc->vc_size_row); +- r -= cols; +- } +- if (!save) { +- int lines; +- if (vc->vc_y + logo_lines >= rows) +- lines = rows - vc->vc_y - 1; +- else +- lines = logo_lines; +- vc->vc_y += lines; +- vc->vc_pos += lines * vc->vc_size_row; +- } +- } ++ r = q - step - cols; ++ for (cnt = rows - logo_lines; cnt > 0; cnt--) { ++ scr_memcpyw(r + step, r, vc->vc_size_row); ++ r -= cols; ++ } ++ int lines; ++ if (vc->vc_y + logo_lines >= rows) ++ lines = rows - vc->vc_y - 1; ++ else ++ lines = logo_lines; ++ vc->vc_y += lines; ++ vc->vc_pos += lines * vc->vc_size_row; + scr_memsetw((unsigned short *) vc->vc_origin, + erase, + vc->vc_size_row * logo_lines); +@@ -621,16 +602,6 @@ static void fbcon_prepare_logo(struct vc + update_screen(vc); + } + +- if (save) { +- q = (unsigned short *) (vc->vc_origin + +- vc->vc_size_row * +- rows); +- scr_memcpyw(q, save, logo_lines * new_cols * 2); +- vc->vc_y += logo_lines; +- vc->vc_pos += logo_lines * vc->vc_size_row; +- kfree(save); +- } +- + if (logo_lines > vc->vc_bottom) { + logo_shown = FBCON_LOGO_CANSHOW; + printk(KERN_INFO |