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:
Johan Hedberg 2020-12-21 15:32:45 +02:00 committed by Anas Nashif
parent 048dcea54b
commit 4fa0a9b4b2
4 changed files with 19 additions and 4 deletions

View file

@ -42,7 +42,9 @@ zephyr_library_sources_ifdef(CONFIG_USERSPACE uart_handlers.c)
if(CONFIG_UART_NS16550)
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(
uart_ns16550_port_x.h
${PROJECT_BINARY_DIR}/include/generated/uart_ns16550_port_${NUM}.h

View file

@ -11,6 +11,13 @@ menuconfig 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
bool "Enable Serial Line Control for Apps"
depends on UART_LINE_CTRL

View file

@ -976,7 +976,8 @@ static const struct uart_driver_api uart_ns16550_driver_api = {
#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_1.h>
#include <uart_ns16550_port_2.h>
#include <uart_ns16550_port_3.h>

View file

@ -130,3 +130,8 @@ static void irq_config_func_@NUM@(const struct device *dev)
#endif
#endif
/* Include subsequent instances */
#if @NUM@ < (CONFIG_UART_NS16550_MAX_INSTANCES - 1)
#include <uart_ns16550_port_@NEXT_NUM@.h>
#endif