drivers: serial: ns16550: Remove hard-coded max instance count
Instead of having a hard-coded maximum instance count, introduce a Kconfig variable for it. The inclusion of the per-instance header files is solved by having them chain-include each other with a pre-processor condition that checks if the current header file is the last one or not. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
048dcea54b
commit
4fa0a9b4b2
4 changed files with 19 additions and 4 deletions
|
@ -42,7 +42,9 @@ zephyr_library_sources_ifdef(CONFIG_USERSPACE uart_handlers.c)
|
||||||
|
|
||||||
if(CONFIG_UART_NS16550)
|
if(CONFIG_UART_NS16550)
|
||||||
zephyr_library_sources(uart_ns16550.c)
|
zephyr_library_sources(uart_ns16550.c)
|
||||||
foreach(NUM RANGE 0 3)
|
math(EXPR max_index "${CONFIG_UART_NS16550_MAX_INSTANCES} - 1")
|
||||||
|
foreach(NUM RANGE 0 ${max_index})
|
||||||
|
math(EXPR NEXT_NUM "${NUM} + 1")
|
||||||
configure_file(
|
configure_file(
|
||||||
uart_ns16550_port_x.h
|
uart_ns16550_port_x.h
|
||||||
${PROJECT_BINARY_DIR}/include/generated/uart_ns16550_port_${NUM}.h
|
${PROJECT_BINARY_DIR}/include/generated/uart_ns16550_port_${NUM}.h
|
||||||
|
|
|
@ -11,6 +11,13 @@ menuconfig UART_NS16550
|
||||||
|
|
||||||
if UART_NS16550
|
if UART_NS16550
|
||||||
|
|
||||||
|
config UART_NS16550_MAX_INSTANCES
|
||||||
|
int "Maximum number of supported driver instances"
|
||||||
|
range 1 32
|
||||||
|
default 4
|
||||||
|
help
|
||||||
|
The maximum number of supported driver instances in device tree.
|
||||||
|
|
||||||
config UART_NS16550_LINE_CTRL
|
config UART_NS16550_LINE_CTRL
|
||||||
bool "Enable Serial Line Control for Apps"
|
bool "Enable Serial Line Control for Apps"
|
||||||
depends on UART_LINE_CTRL
|
depends on UART_LINE_CTRL
|
||||||
|
|
|
@ -976,7 +976,8 @@ static const struct uart_driver_api uart_ns16550_driver_api = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* The instance-specific header files are chained together (each instance
|
||||||
|
* includes the next one, unless it's the last instance) so we only need to
|
||||||
|
* include the first instance.
|
||||||
|
*/
|
||||||
#include <uart_ns16550_port_0.h>
|
#include <uart_ns16550_port_0.h>
|
||||||
#include <uart_ns16550_port_1.h>
|
|
||||||
#include <uart_ns16550_port_2.h>
|
|
||||||
#include <uart_ns16550_port_3.h>
|
|
||||||
|
|
|
@ -130,3 +130,8 @@ static void irq_config_func_@NUM@(const struct device *dev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Include subsequent instances */
|
||||||
|
#if @NUM@ < (CONFIG_UART_NS16550_MAX_INSTANCES - 1)
|
||||||
|
#include <uart_ns16550_port_@NEXT_NUM@.h>
|
||||||
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue