Commit 56dfb62e authored by Henrik Brix Andersen's avatar Henrik Brix Andersen Committed by Maureen Helm
Browse files

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: default avatarHenrik Brix Andersen <hebad@vestas.com>
parent 168e1291
Loading
Loading
Loading
Loading
+44 −12
Original line number Diff line number Diff line
@@ -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_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);
	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_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);
	irq_enable(DT_UART_MCUX_LPUART_3_IRQ_1);
#endif /* DT_UART_MCUX_LPUART_3_IRQ_1 */
}
#endif

+6 −6
Original line number Diff line number Diff line
@@ -80,24 +80,24 @@

#define DT_UART_MCUX_LPUART_1_BASE_ADDRESS	DT_NXP_KINETIS_LPUART_40184000_BASE_ADDRESS
#define DT_UART_MCUX_LPUART_1_NAME		DT_NXP_KINETIS_LPUART_40184000_LABEL
#define DT_UART_MCUX_LPUART_1_IRQ		DT_NXP_KINETIS_LPUART_40184000_IRQ_0
#define DT_UART_MCUX_LPUART_1_IRQ_PRI		DT_NXP_KINETIS_LPUART_40184000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_1_IRQ_0		DT_NXP_KINETIS_LPUART_40184000_IRQ_0
#define DT_UART_MCUX_LPUART_1_IRQ_0_PRI		DT_NXP_KINETIS_LPUART_40184000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_1_BAUD_RATE		DT_NXP_KINETIS_LPUART_40184000_CURRENT_SPEED
#define DT_UART_MCUX_LPUART_1_CLOCK_NAME	DT_NXP_KINETIS_LPUART_40184000_CLOCK_CONTROLLER
#define DT_UART_MCUX_LPUART_1_CLOCK_SUBSYS	DT_NXP_KINETIS_LPUART_40184000_CLOCK_NAME

#define DT_UART_MCUX_LPUART_2_BASE_ADDRESS	DT_NXP_KINETIS_LPUART_40188000_BASE_ADDRESS
#define DT_UART_MCUX_LPUART_2_NAME		DT_NXP_KINETIS_LPUART_40188000_LABEL
#define DT_UART_MCUX_LPUART_2_IRQ		DT_NXP_KINETIS_LPUART_40188000_IRQ_0
#define DT_UART_MCUX_LPUART_2_IRQ_PRI		DT_NXP_KINETIS_LPUART_40188000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_2_IRQ_0		DT_NXP_KINETIS_LPUART_40188000_IRQ_0
#define DT_UART_MCUX_LPUART_2_IRQ_0_PRI		DT_NXP_KINETIS_LPUART_40188000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_2_BAUD_RATE		DT_NXP_KINETIS_LPUART_40188000_CURRENT_SPEED
#define DT_UART_MCUX_LPUART_2_CLOCK_NAME	DT_NXP_KINETIS_LPUART_40188000_CLOCK_CONTROLLER
#define DT_UART_MCUX_LPUART_2_CLOCK_SUBSYS	DT_NXP_KINETIS_LPUART_40188000_CLOCK_NAME

#define DT_UART_MCUX_LPUART_3_BASE_ADDRESS	DT_NXP_KINETIS_LPUART_4018C000_BASE_ADDRESS
#define DT_UART_MCUX_LPUART_3_NAME		DT_NXP_KINETIS_LPUART_4018C000_LABEL
#define DT_UART_MCUX_LPUART_3_IRQ		DT_NXP_KINETIS_LPUART_4018C000_IRQ_0
#define DT_UART_MCUX_LPUART_3_IRQ_PRI		DT_NXP_KINETIS_LPUART_4018C000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_3_IRQ_0		DT_NXP_KINETIS_LPUART_4018C000_IRQ_0
#define DT_UART_MCUX_LPUART_3_IRQ_0_PRI		DT_NXP_KINETIS_LPUART_4018C000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_3_BAUD_RATE		DT_NXP_KINETIS_LPUART_4018C000_CURRENT_SPEED
#define DT_UART_MCUX_LPUART_3_CLOCK_NAME	DT_NXP_KINETIS_LPUART_4018C000_CLOCK_CONTROLLER
#define DT_UART_MCUX_LPUART_3_CLOCK_SUBSYS	DT_NXP_KINETIS_LPUART_4018C000_CLOCK_NAME
+2 −2
Original line number Diff line number Diff line
@@ -118,8 +118,8 @@
#define DT_NUM_IRQ_PRIO_BITS		DT_ARM_V6M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS

#define DT_UART_MCUX_LPUART_0_BAUD_RATE	DT_NXP_KINETIS_LPUART_40054000_CURRENT_SPEED
#define DT_UART_MCUX_LPUART_0_IRQ		DT_NXP_KINETIS_LPUART_40054000_IRQ_0
#define DT_UART_MCUX_LPUART_0_IRQ_PRI	DT_NXP_KINETIS_LPUART_40054000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_0_IRQ_0		DT_NXP_KINETIS_LPUART_40054000_IRQ_0
#define DT_UART_MCUX_LPUART_0_IRQ_0_PRI	DT_NXP_KINETIS_LPUART_40054000_IRQ_0_PRIORITY
#define DT_UART_MCUX_LPUART_0_NAME		DT_NXP_KINETIS_LPUART_40054000_LABEL
#define DT_UART_MCUX_LPUART_0_CLOCK_NAME	DT_NXP_KINETIS_LPUART_40054000_CLOCK_CONTROLLER
#define DT_UART_MCUX_LPUART_0_CLOCK_SUBSYS	DT_NXP_KINETIS_LPUART_40054000_CLOCK_NAME