config SERIAL_SAMSUNG_CONSOLE
        bool "Support for console on Samsung SoC serial port"
-       depends on SERIAL_SAMSUNG=y
+       depends on SERIAL_SAMSUNG
        select SERIAL_CORE_CONSOLE
        select SERIAL_EARLYCON
        help
 
 
 static struct console s3c24xx_serial_console;
 
-static int __init s3c24xx_serial_console_init(void)
+static void __init s3c24xx_serial_register_console(void)
 {
        register_console(&s3c24xx_serial_console);
-       return 0;
 }
-console_initcall(s3c24xx_serial_console_init);
+
+static void s3c24xx_serial_unregister_console(void)
+{
+       if (s3c24xx_serial_console.flags & CON_ENABLED)
+               unregister_console(&s3c24xx_serial_console);
+}
 
 #define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
 #else
+static inline void s3c24xx_serial_register_console(void) { }
+static inline void s3c24xx_serial_unregister_console(void) { }
 #define S3C24XX_SERIAL_CONSOLE NULL
 #endif
 
        },
 };
 
-module_platform_driver(samsung_serial_driver);
+static int __init samsung_serial_init(void)
+{
+       int ret;
+
+       s3c24xx_serial_register_console();
+
+       ret = platform_driver_register(&samsung_serial_driver);
+       if (ret) {
+               s3c24xx_serial_unregister_console();
+               return ret;
+       }
+
+       return 0;
+}
+
+static void __exit samsung_serial_exit(void)
+{
+       platform_driver_unregister(&samsung_serial_driver);
+       s3c24xx_serial_unregister_console();
+}
+
+module_init(samsung_serial_init);
+module_exit(samsung_serial_exit);
 
 #ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
 /*