drivers: serial: mcux: Introduce support for HW flow control

Now that a hw-flow-control DTS binding has been added for MCUX uart,
let's check for the DT_ define and enable support in the MCUX HAL
layer.

Signed-off-by: Michael Scott <mike@foundries.io>
This commit is contained in:
Michael Scott 2019-01-29 11:44:53 -08:00 committed by Kumar Gala
commit 3588b94b06
3 changed files with 21 additions and 0 deletions

View file

@ -16,6 +16,7 @@ struct uart_mcux_config {
char *clock_name;
clock_control_subsys_t clock_subsys;
u32_t baud_rate;
u8_t hw_flow_control;
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
void (*irq_config_func)(struct device *dev);
#endif
@ -245,6 +246,10 @@ static int uart_mcux_init(struct device *dev)
UART_GetDefaultConfig(&uart_config);
uart_config.enableTx = true;
uart_config.enableRx = true;
if (config->hw_flow_control) {
uart_config.enableRxRTS = true;
uart_config.enableTxCTS = true;
}
uart_config.baudRate_Bps = config->baud_rate;
UART_Init(config->base, &uart_config, clock_freq);
@ -289,6 +294,7 @@ static const struct uart_mcux_config uart_mcux_0_config = {
.clock_name = DT_UART_MCUX_0_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_0_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_0_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_0_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_0,
#endif
@ -332,6 +338,7 @@ static const struct uart_mcux_config uart_mcux_1_config = {
.clock_name = DT_UART_MCUX_1_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_1_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_1_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_1_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_1,
#endif
@ -375,6 +382,7 @@ static const struct uart_mcux_config uart_mcux_2_config = {
.clock_name = DT_UART_MCUX_2_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_2_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_2_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_2_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_2,
#endif
@ -418,6 +426,7 @@ static const struct uart_mcux_config uart_mcux_3_config = {
.clock_name = DT_UART_MCUX_3_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_3_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_3_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_3_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_3,
#endif
@ -461,6 +470,7 @@ static const struct uart_mcux_config uart_mcux_4_config = {
.clock_name = DT_UART_MCUX_4_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_4_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_4_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_4_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_4,
#endif
@ -504,6 +514,7 @@ static const struct uart_mcux_config uart_mcux_5_config = {
.clock_name = DT_UART_MCUX_5_CLOCK_NAME,
.clock_subsys = (clock_control_subsys_t)DT_UART_MCUX_5_CLOCK_SUBSYS,
.baud_rate = DT_UART_MCUX_5_BAUD_RATE,
.hw_flow_control = DT_UART_MCUX_5_HW_FLOW_CONTROL,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
.irq_config_func = uart_mcux_config_func_5,
#endif

View file

@ -7,6 +7,7 @@
#define DT_UART_MCUX_0_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006A000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_0_IRQ_STATUS DT_NXP_KINETIS_UART_4006A000_IRQ_STATUS
#define DT_UART_MCUX_0_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006A000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_0_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006A000_HW_FLOW_CONTROL
#define DT_UART_MCUX_0_CLOCK_NAME DT_NXP_KINETIS_UART_4006A000_CLOCK_CONTROLLER
#define DT_UART_MCUX_0_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006A000_CLOCK_NAME
@ -16,6 +17,7 @@
#define DT_UART_MCUX_1_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006B000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_1_IRQ_STATUS DT_NXP_KINETIS_UART_4006B000_IRQ_STATUS
#define DT_UART_MCUX_1_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006B000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_1_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006B000_HW_FLOW_CONTROL
#define DT_UART_MCUX_1_CLOCK_NAME DT_NXP_KINETIS_UART_4006B000_CLOCK_CONTROLLER
#define DT_UART_MCUX_1_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006B000_CLOCK_NAME
@ -25,6 +27,7 @@
#define DT_UART_MCUX_2_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006C000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_2_IRQ_STATUS DT_NXP_KINETIS_UART_4006C000_IRQ_STATUS
#define DT_UART_MCUX_2_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006C000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_2_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006C000_HW_FLOW_CONTROL
#define DT_UART_MCUX_2_CLOCK_NAME DT_NXP_KINETIS_UART_4006C000_CLOCK_CONTROLLER
#define DT_UART_MCUX_2_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006C000_CLOCK_NAME
@ -34,6 +37,7 @@
#define DT_UART_MCUX_3_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006D000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_3_IRQ_STATUS DT_NXP_KINETIS_UART_4006D000_IRQ_STATUS
#define DT_UART_MCUX_3_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006D000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_3_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006D000_HW_FLOW_CONTROL
#define DT_UART_MCUX_3_CLOCK_NAME DT_NXP_KINETIS_UART_4006D000_CLOCK_CONTROLLER
#define DT_UART_MCUX_3_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006D000_CLOCK_NAME
@ -43,6 +47,7 @@
#define DT_UART_MCUX_4_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_400EA000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_4_IRQ_STATUS DT_NXP_KINETIS_UART_400EA000_IRQ_STATUS
#define DT_UART_MCUX_4_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_400EA000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_4_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_400EA000_HW_FLOW_CONTROL
#define DT_UART_MCUX_4_CLOCK_NAME DT_NXP_KINETIS_UART_400EA000_CLOCK_CONTROLLER
#define DT_UART_MCUX_4_CLOCK_SUBSYS DT_NXP_KINETIS_UART_400EA000_CLOCK_NAME
@ -52,6 +57,7 @@
#define DT_UART_MCUX_5_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_400EB000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_5_IRQ_STATUS DT_NXP_KINETIS_UART_400EB000_IRQ_STATUS
#define DT_UART_MCUX_5_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_400EB000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_5_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_400EB000_HW_FLOW_CONTROL
#define DT_UART_MCUX_5_CLOCK_NAME DT_NXP_KINETIS_UART_400EB000_CLOCK_CONTROLLER
#define DT_UART_MCUX_5_CLOCK_SUBSYS DT_NXP_KINETIS_UART_400EB000_CLOCK_NAME

View file

@ -41,6 +41,7 @@
#define DT_UART_MCUX_0_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006A000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_0_IRQ_STATUS DT_NXP_KINETIS_UART_4006A000_IRQ_STATUS
#define DT_UART_MCUX_0_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006A000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_0_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006A000_HW_FLOW_CONTROL
#define DT_UART_MCUX_0_CLOCK_NAME DT_NXP_KINETIS_UART_4006A000_CLOCK_CONTROLLER
#define DT_UART_MCUX_0_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006A000_CLOCK_NAME
@ -50,6 +51,7 @@
#define DT_UART_MCUX_1_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006B000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_1_IRQ_STATUS DT_NXP_KINETIS_UART_4006B000_IRQ_STATUS
#define DT_UART_MCUX_1_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006B000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_1_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006B000_HW_FLOW_CONTROL
#define DT_UART_MCUX_1_CLOCK_NAME DT_NXP_KINETIS_UART_4006B000_CLOCK_CONTROLLER
#define DT_UART_MCUX_1_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006B000_CLOCK_NAME
@ -59,6 +61,7 @@
#define DT_UART_MCUX_2_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006C000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_2_IRQ_STATUS DT_NXP_KINETIS_UART_4006C000_IRQ_STATUS
#define DT_UART_MCUX_2_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006C000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_2_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006C000_HW_FLOW_CONTROL
#define DT_UART_MCUX_2_CLOCK_NAME DT_NXP_KINETIS_UART_4006C000_CLOCK_CONTROLLER
#define DT_UART_MCUX_2_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006C000_CLOCK_NAME
@ -68,6 +71,7 @@
#define DT_UART_MCUX_3_IRQ_ERROR_PRI DT_NXP_KINETIS_UART_4006D000_IRQ_ERROR_PRIORITY
#define DT_UART_MCUX_3_IRQ_STATUS DT_NXP_KINETIS_UART_4006D000_IRQ_STATUS
#define DT_UART_MCUX_3_IRQ_STATUS_PRI DT_NXP_KINETIS_UART_4006D000_IRQ_STATUS_PRIORITY
#define DT_UART_MCUX_3_HW_FLOW_CONTROL DT_NXP_KINETIS_UART_4006D000_HW_FLOW_CONTROL
#define DT_UART_MCUX_3_CLOCK_NAME DT_NXP_KINETIS_UART_4006D000_CLOCK_CONTROLLER
#define DT_UART_MCUX_3_CLOCK_SUBSYS DT_NXP_KINETIS_UART_4006D000_CLOCK_NAME