X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fvideo%2Fconsole%2Fnewport_con.c;h=762c7a593141f76f26f3d5721fc793439540c0df;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=7fa1afeae8dc6d413c86af1741925823fc729960;hpb=3944158a6d33f94668dbd6bdc32ff5c67bb53ec2;p=linux-2.6.git diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index 7fa1afeae..762c7a593 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -50,7 +51,6 @@ static int topscan; static int xcurs_correction = 29; static int newport_xsize; static int newport_ysize; -static int newport_has_init; static int newport_set_def_font(int unit, struct console_font *op); @@ -149,7 +149,7 @@ static inline void newport_clear_lines(int ystart, int yend, int ci) newport_clear_screen(0, ystart, 1280 + 63, yend, ci); } -static void newport_reset(void) +void newport_reset(void) { unsigned short treg; int i; @@ -193,7 +193,7 @@ static void newport_reset(void) * calculate the actual screen size by reading * the video timing out of the VC2 */ -static void newport_get_screensize(void) +void newport_get_screensize(void) { int i, cols; unsigned short ventry, treg; @@ -283,15 +283,6 @@ static void newport_get_revisions(void) xcurs_correction = 21; } -static void newport_exit(void) -{ - int i; - - /* free memory used by user font */ - for (i = 0; i < MAX_NR_CONSOLES; i++) - newport_set_def_font(i, NULL); -} - /* Can't be __init, take_over_console may call it later */ static const char *newport_startup(void) { @@ -299,10 +290,8 @@ static const char *newport_startup(void) if (!sgi_gfxaddr) return NULL; - - if (!npregs) - npregs = (struct newport_regs *)/* ioremap cannot fail */ - ioremap(sgi_gfxaddr, sizeof(struct newport_regs)); + npregs = (struct newport_regs *) /* ioremap cannot fail */ + ioremap(sgi_gfxaddr, sizeof(struct newport_regs)); npregs->cset.config = NPORT_CFG_GD0; if (newport_wait(npregs)) @@ -318,11 +307,11 @@ static const char *newport_startup(void) newport_reset(); newport_get_revisions(); newport_get_screensize(); - newport_has_init = 1; return "SGI Newport"; out_unmap: + iounmap((void *)npregs); return NULL; } @@ -335,10 +324,11 @@ static void newport_init(struct vc_data *vc, int init) static void newport_deinit(struct vc_data *c) { - if (!con_is_bound(&newport_con) && newport_has_init) { - newport_exit(); - newport_has_init = 0; - } + int i; + + /* free memory used by user font */ + for (i = 0; i < MAX_NR_CONSOLES; i++) + newport_set_def_font(i, NULL); } static void newport_clear(struct vc_data *vc, int sy, int sx, int height, @@ -738,23 +728,16 @@ const struct consw newport_con = { #ifdef MODULE static int __init newport_console_init(void) { - - if (!sgi_gfxaddr) - return NULL; - - if (!npregs) - npregs = (struct newport_regs *)/* ioremap cannot fail */ - ioremap(sgi_gfxaddr, sizeof(struct newport_regs)); - return take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1); } -module_init(newport_console_init); static void __exit newport_console_exit(void) { give_up_console(&newport_con); iounmap((void *)npregs); } + +module_init(newport_console_init); module_exit(newport_console_exit); #endif