serial: lantiq: Make driver modular
authorRahul Tanwar <rahul.tanwar@linux.intel.com>
Mon, 11 May 2020 05:57:27 +0000 (13:57 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 May 2020 10:22:19 +0000 (12:22 +0200)
Add changes so Lantiq serial driver can be compiled as a module.

Signed-off-by: Rahul Tanwar <rahul.tanwar@linux.intel.com>
Link: https://lore.kernel.org/r/ad9422de006c317401bfa5fe61bdd4293dd29b5e.1589176044.git.rahul.tanwar@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/Kconfig
drivers/tty/serial/lantiq.c

index a81b42b..1cb99d9 100644 (file)
@@ -1034,11 +1034,13 @@ config SERIAL_SIFIVE_CONSOLE
          boot time.)
 
 config SERIAL_LANTIQ
-       bool "Lantiq serial driver"
+       tristate "Lantiq serial driver"
        depends on (LANTIQ || X86) || COMPILE_TEST
        select SERIAL_CORE
        help
          Support for UART on Lantiq and Intel SoCs.
+         To compile this driver as a module, select M here. The
+         module will be called lantiq.
 
 config SERIAL_LANTIQ_CONSOLE
        bool "Console on Lantiq UART"
index d3b62a1..62813e4 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/io.h>
 #include <linux/ioport.h>
 #include <linux/lantiq.h>
+#include <linux/module.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
@@ -823,8 +824,7 @@ static void free_irq_intel(struct uart_port *port)
        free_irq(ltq_port->common_irq, port);
 }
 
-static int __init
-lqasc_probe(struct platform_device *pdev)
+static int lqasc_probe(struct platform_device *pdev)
 {
        struct device_node *node = pdev->dev.of_node;
        struct ltq_uart_port *ltq_port;
@@ -908,6 +908,13 @@ lqasc_probe(struct platform_device *pdev)
        return ret;
 }
 
+static int lqasc_remove(struct platform_device *pdev)
+{
+       struct uart_port *port = platform_get_drvdata(pdev);
+
+       return uart_remove_one_port(&lqasc_reg, port);
+}
+
 static const struct ltq_soc_data soc_data_lantiq = {
        .fetch_irq = fetch_irq_lantiq,
        .request_irq = request_irq_lantiq,
@@ -925,8 +932,11 @@ static const struct of_device_id ltq_asc_match[] = {
        { .compatible = "intel,lgm-asc", .data = &soc_data_intel },
        {},
 };
+MODULE_DEVICE_TABLE(of, ltq_asc_match);
 
 static struct platform_driver lqasc_driver = {
+       .probe          = lqasc_probe,
+       .remove         = lqasc_remove,
        .driver         = {
                .name   = DRVNAME,
                .of_match_table = ltq_asc_match,
@@ -942,10 +952,21 @@ init_lqasc(void)
        if (ret != 0)
                return ret;
 
-       ret = platform_driver_probe(&lqasc_driver, lqasc_probe);
+       ret = platform_driver_register(&lqasc_driver);
        if (ret != 0)
                uart_unregister_driver(&lqasc_reg);
 
        return ret;
 }
-device_initcall(init_lqasc);
+
+static void __exit exit_lqasc(void)
+{
+       platform_driver_unregister(&lqasc_driver);
+       uart_unregister_driver(&lqasc_reg);
+}
+
+module_init(init_lqasc);
+module_exit(exit_lqasc);
+
+MODULE_DESCRIPTION("Serial driver for Lantiq & Intel gateway SoCs");
+MODULE_LICENSE("GPL v2");