Skip to content

Commit

Permalink
tty: serial: samsung: Enable console as module
Browse files Browse the repository at this point in the history
Enable serial driver to be built as a module. To do so, init the console
support on driver/module load instead of using console_initcall().

Inspired by commit 87a0b9f ("tty: serial: meson: enable console as
module").

Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Link: https://lore.kernel.org/r/20211204195757.8600-5-semen.protsenko@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Sam Protsenko authored and Greg Kroah-Hartman committed Dec 20, 2021
1 parent 59f37b7 commit 0882b47
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 5 deletions.
2 changes: 1 addition & 1 deletion drivers/tty/serial/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ config SERIAL_SAMSUNG_UARTS

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
Expand Down
36 changes: 32 additions & 4 deletions drivers/tty/serial/samsung_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -1715,15 +1715,21 @@ s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)

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

Expand Down Expand Up @@ -2898,7 +2904,29 @@ static struct platform_driver samsung_serial_driver = {
},
};

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
/*
Expand Down

0 comments on commit 0882b47

Please sign in to comment.