diff options
Diffstat (limited to 'drivers/video/newport_con.c')
-rw-r--r-- | drivers/video/newport_con.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/drivers/video/newport_con.c b/drivers/video/newport_con.c index e9525f785..0775fa60f 100644 --- a/drivers/video/newport_con.c +++ b/drivers/video/newport_con.c @@ -27,12 +27,15 @@ #include <asm/page.h> #include <asm/pgtable.h> #include <asm/newport.h> +#define INCLUDE_LINUX_LOGO_DATA #include <asm/linux_logo.h> +#define LOGO_W 80 +#define LOGO_H 80 + extern unsigned char vga_font[]; extern struct newport_regs *npregs; -static int logo_drawn; static int logo_active; static int topscan; static int xcurs_correction = 29; @@ -99,11 +102,11 @@ static inline void newport_show_logo(void) npregs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_BLOCK | NPORT_DMODE0_CHOST); - npregs->set.xystarti = ((newport_xsize - 80) << 16) | (0); + npregs->set.xystarti = ((newport_xsize - LOGO_W) << 16) | (0); npregs->set.xyendi = ((newport_xsize - 1) << 16); newport_wait(); - for (i = 0; i < 80 * 80; i++) + for (i = 0; i < LOGO_W * LOGO_H; i++) npregs->go.hostrw0 = linux_logo[i] << 24; } @@ -306,12 +309,6 @@ static void newport_clear(struct vc_data *vc, int sy, int sx, int height, int wi if (logo_active) return; - if (!logo_drawn) { - newport_show_logo(); - logo_drawn = 1; - logo_active = 1; - return; - } if (ystart < yend) { newport_clear_screen(sx << 3, ystart, xend, yend, @@ -415,8 +412,17 @@ static void newport_cursor(struct vc_data *vc, int mode) static int newport_switch(struct vc_data *vc) { + static int logo_drawn = 0; + topscan = 0; npregs->cset.topscan = 0x3ff; + + if (!logo_drawn) { + newport_show_logo(); + logo_drawn = 1; + logo_active = 1; + } + return 1; } |