drivers: serial: uart_mcux_lpuart: add support for LPUARTs with two IRQs

Add support for NXP MCUX LPUART devices with separate IRQ lines for
transmit and receive status interrupts (e.g. the Kinetis KE1xF SoC
series).

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
This commit is contained in:
Henrik Brix Andersen 2019-05-06 21:42:50 +02:00 committed by Maureen Helm
commit 56dfb62e40
3 changed files with 52 additions and 20 deletions

View file

@ -310,11 +310,19 @@ DEVICE_AND_API_INIT(uart_0, DT_UART_MCUX_LPUART_0_NAME,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void mcux_lpuart_config_func_0(struct device *dev)
{
IRQ_CONNECT(DT_UART_MCUX_LPUART_0_IRQ,
DT_UART_MCUX_LPUART_0_IRQ_PRI,
IRQ_CONNECT(DT_UART_MCUX_LPUART_0_IRQ_0,
DT_UART_MCUX_LPUART_0_IRQ_0_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_0), 0);
irq_enable(DT_UART_MCUX_LPUART_0_IRQ);
irq_enable(DT_UART_MCUX_LPUART_0_IRQ_0);
#ifdef DT_UART_MCUX_LPUART_0_IRQ_1
IRQ_CONNECT(DT_UART_MCUX_LPUART_0_IRQ_1,
DT_UART_MCUX_LPUART_0_IRQ_1_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_0), 0);
irq_enable(DT_UART_MCUX_LPUART_0_IRQ_1);
#endif /* DT_UART_MCUX_LPUART_0_IRQ_1 */
}
#endif
@ -348,11 +356,19 @@ DEVICE_AND_API_INIT(uart_1, DT_UART_MCUX_LPUART_1_NAME,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void mcux_lpuart_config_func_1(struct device *dev)
{
IRQ_CONNECT(DT_UART_MCUX_LPUART_1_IRQ,
DT_UART_MCUX_LPUART_1_IRQ_PRI,
IRQ_CONNECT(DT_UART_MCUX_LPUART_1_IRQ_0,
DT_UART_MCUX_LPUART_1_IRQ_0_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_1), 0);
irq_enable(DT_UART_MCUX_LPUART_1_IRQ);
irq_enable(DT_UART_MCUX_LPUART_1_IRQ_0);
#ifdef DT_UART_MCUX_LPUART_1_IRQ_1
IRQ_CONNECT(DT_UART_MCUX_LPUART_1_IRQ_1,
DT_UART_MCUX_LPUART_1_IRQ_1_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_1), 0);
irq_enable(DT_UART_MCUX_LPUART_1_IRQ_1);
#endif /* DT_UART_MCUX_LPUART_1_IRQ_1 */
}
#endif
@ -386,11 +402,19 @@ DEVICE_AND_API_INIT(uart_2, DT_UART_MCUX_LPUART_2_NAME,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void mcux_lpuart_config_func_2(struct device *dev)
{
IRQ_CONNECT(DT_UART_MCUX_LPUART_2_IRQ,
DT_UART_MCUX_LPUART_2_IRQ_PRI,
IRQ_CONNECT(DT_UART_MCUX_LPUART_2_IRQ_0,
DT_UART_MCUX_LPUART_2_IRQ_0_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_2), 0);
irq_enable(DT_UART_MCUX_LPUART_2_IRQ);
irq_enable(DT_UART_MCUX_LPUART_2_IRQ_0);
#ifdef DT_UART_MCUX_LPUART_2_IRQ_1
IRQ_CONNECT(DT_UART_MCUX_LPUART_2_IRQ_1,
DT_UART_MCUX_LPUART_2_IRQ_1_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_2), 0);
irq_enable(DT_UART_MCUX_LPUART_2_IRQ_1);
#endif /* DT_UART_MCUX_LPUART_2_IRQ_1 */
}
#endif
@ -424,11 +448,19 @@ DEVICE_AND_API_INIT(uart_3, DT_UART_MCUX_LPUART_3_NAME,
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
static void mcux_lpuart_config_func_3(struct device *dev)
{
IRQ_CONNECT(DT_UART_MCUX_LPUART_3_IRQ,
DT_UART_MCUX_LPUART_3_IRQ_PRI,
IRQ_CONNECT(DT_UART_MCUX_LPUART_3_IRQ_0,
DT_UART_MCUX_LPUART_3_IRQ_0_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_3), 0);
irq_enable(DT_UART_MCUX_LPUART_3_IRQ);
irq_enable(DT_UART_MCUX_LPUART_3_IRQ_0);
#ifdef DT_UART_MCUX_LPUART_3_IRQ_1
IRQ_CONNECT(DT_UART_MCUX_LPUART_3_IRQ_1,
DT_UART_MCUX_LPUART_3_IRQ_1_PRI,
mcux_lpuart_isr, DEVICE_GET(uart_3), 0);
irq_enable(DT_UART_MCUX_LPUART_3_IRQ_1);
#endif /* DT_UART_MCUX_LPUART_3_IRQ_1 */
}
#endif