serial: lantiq: Make driver modular & console configurable
v3 cover serial: lantiq: Make driver modular & console configurable
Patch 1 is to make lantiq UART driver's use as console selectable/configurable. Patch 2 adds changes so the driver can be compiled as module.
v3:
- Fix a section mismatch warning. Reported-by: kbuild test robot <[email protected]>.
v2:
- Split into two patches. One for console configuration and two for modular driver. (Greg KH)
v1:
- Initial version.
Rahul Tanwar (2):
serial: lantiq: Make UART's use as console selectable
serial: lantiq: Make driver modular
drivers/tty/serial/Kconfig | 13 +++++++++++-- drivers/tty/serial/lantiq.c | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 7 deletions(-)
Signature · 1 line
2.11.0
PATCH v3 1/2 serial: lantiq: Make UART's use as console selectable
Lantiq UART driver can be used for system console. Add changes to make this driver's use as console selectable/configurable.
--- drivers/tty/serial/Kconfig | 9 ++++++++- drivers/tty/serial/lantiq.c | 11 ++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-)
drivers/tty/serial/Kconfig +8 -1
@@ -1037,10 +1037,17 @@ config SERIAL_LANTIQ bool "Lantiq serial driver" depends on (LANTIQ || X86) || COMPILE_TEST select SERIAL_CORE + help + Support for UART on Lantiq and Intel SoCs. + +config SERIAL_LANTIQ_CONSOLE + bool "Console on Lantiq UART" + depends on SERIAL_LANTIQ=y select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON help - Support for console and UART on Lantiq SoCs. + Select this option if you would like to use a Lantiq UART as the + system console. config SERIAL_QE tristate "Freescale QUICC Engine serial port support"
drivers/tty/serial/lantiq.c +10 -1
@@ -597,6 +597,7 @@ static const struct uart_ops lqasc_pops = { .verify_port = lqasc_verify_port, }; +#ifdef CONFIG_SERIAL_LANTIQ_CONSOLE static void lqasc_console_putchar (struct uart_port *port,int ch) {
@@ -705,6 +706,14 @@ lqasc_serial_early_console_setup(struct earlycon_device *device,OF_EARLYCON_DECLARE (lantiq,"lantiq,asc" , lqasc_serial_early_console_setup);OF_EARLYCON_DECLARE (lantiq,"intel,lgm-asc" , lqasc_serial_early_console_setup); +#define LANTIQ_SERIAL_CONSOLE (&lqasc_console) + +#else + +#define LANTIQ_SERIAL_CONSOLE NULL + +#endif /* CONFIG_SERIAL_LANTIQ_CONSOLE */ +static struct uart_driver lqasc_reg = { .owner =THIS_MODULE , .driver_name =DRVNAME ,
@@ -712,7 +721,7 @@ static struct uart_driver lqasc_reg = { .major = 0, .minor = 0, .nr = MAXPORTS, - .cons = &lqasc_console, + .cons = LANTIQ_SERIAL_CONSOLE, };static int fetch_irq_lantiq (struct device *dev,struct ltq_uart_port *ltq_port)
Signature · 1 line
2.11.0
PATCH v3 2/2 serial: lantiq: Make driver modular
In reply to Rahul TanwarAdd changes so Lantiq serial driver can be compiled as a module.
--- drivers/tty/serial/Kconfig | 4 +++- drivers/tty/serial/lantiq.c | 29 +++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-)
drivers/tty/serial/Kconfig +3 -1
@@ -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"
drivers/tty/serial/lantiq.c +25 -4
@@ -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" );
Signature · 1 line
2.11.0