Skip to content

Commit ec0aa83

Browse files
committed
drivers: uart: uart_cmsdk_apb: fix interrupt handling
The CMSDK uart interrupts for TX and RX can either be treated as a signel interrupt line or distinct interrupts for TX & RX. In the case that they were distinct we didn't get the ifdef correct based on DTS. If we have 2 interrupts in DTS we assume they are for TX & RX and thus build the interrupt support for distinct TX & RX ISRs. Also, cleanup handling of UART_2..UART_4 to be similar to how UART_0/UART_1 code is using DT_INST_IRQN(x). Fixes #30770 Fixes #25601 Signed-off-by: Kumar Gala <[email protected]>
1 parent 92e0051 commit ec0aa83

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

drivers/serial/uart_cmsdk_apb.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ DEVICE_DT_INST_DEFINE(0,
510510
&uart_cmsdk_apb_driver_api);
511511

512512
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
513-
#if DT_INST_IRQ_HAS_CELL(0, irq)
513+
#if DT_NUM_IRQS(DT_DRV_INST(0)) == 1
514514
static void uart_cmsdk_apb_irq_config_func_0(const struct device *dev)
515515
{
516516
IRQ_CONNECT(DT_INST_IRQN(0),
@@ -575,7 +575,7 @@ DEVICE_DT_INST_DEFINE(1,
575575
&uart_cmsdk_apb_driver_api);
576576

577577
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
578-
#if DT_INST_IRQ_HAS_CELL(1, irq)
578+
#if DT_NUM_IRQS(DT_DRV_INST(1)) == 1
579579
static void uart_cmsdk_apb_irq_config_func_1(const struct device *dev)
580580
{
581581
IRQ_CONNECT(DT_INST_IRQN(1),
@@ -640,15 +640,15 @@ DEVICE_DT_INST_DEFINE(2,
640640
&uart_cmsdk_apb_driver_api);
641641

642642
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
643-
#ifdef CMSDK_APB_UART_2_IRQ
643+
#if DT_NUM_IRQS(DT_DRV_INST(2)) == 1
644644
static void uart_cmsdk_apb_irq_config_func_2(const struct device *dev)
645645
{
646-
IRQ_CONNECT(CMSDK_APB_UART_2_IRQ,
646+
IRQ_CONNECT(DT_INST_IRQN(2),
647647
DT_INST_IRQ_BY_NAME(2, priority, irq),
648648
uart_cmsdk_apb_isr,
649649
DEVICE_DT_INST_GET(2),
650650
0);
651-
irq_enable(CMSDK_APB_UART_2_IRQ);
651+
irq_enable(DT_INST_IRQN(2));
652652
}
653653
#else
654654
static void uart_cmsdk_apb_irq_config_func_2(const struct device *dev)
@@ -705,15 +705,15 @@ DEVICE_DT_INST_DEFINE(3,
705705
&uart_cmsdk_apb_driver_api);
706706

707707
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
708-
#ifdef CMSDK_APB_UART_3_IRQ
708+
#if DT_NUM_IRQS(DT_DRV_INST(3)) == 1
709709
static void uart_cmsdk_apb_irq_config_func_3(const struct device *dev)
710710
{
711-
IRQ_CONNECT(CMSDK_APB_UART_3_IRQ,
712-
DT_INST_IRQ_BY_NAME(3, priority, irq),
711+
IRQ_CONNECT(DT_INST_IRQN(3),
712+
DT_INST_IRQ(3, priority),
713713
uart_cmsdk_apb_isr,
714714
DEVICE_DT_INST_GET(3),
715715
0);
716-
irq_enable(CMSDK_APB_UART_3_IRQ);
716+
irq_enable(DT_INST_IRQN(3));
717717
}
718718
#else
719719
static void uart_cmsdk_apb_irq_config_func_3(const struct device *dev)
@@ -770,15 +770,15 @@ DEVICE_DT_INST_DEFINE(4,
770770
&uart_cmsdk_apb_driver_api);
771771

772772
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
773-
#ifdef CMSDK_APB_UART_4_IRQ
773+
#if DT_NUM_IRQS(DT_DRV_INST(4)) == 1
774774
static void uart_cmsdk_apb_irq_config_func_4(const struct device *dev)
775775
{
776-
IRQ_CONNECT(CMSDK_APB_UART_4_IRQ,
776+
IRQ_CONNECT(DT_INST_IRQN(4),
777777
DT_INST_IRQ_BY_NAME(4, priority, irq),
778778
uart_cmsdk_apb_isr,
779779
DEVICE_DT_INST_GET(4),
780780
0);
781-
irq_enable(CMSDK_APB_UART_4_IRQ);
781+
irq_enable(DT_INST_IRQN(4));
782782
}
783783
#else
784784
static void uart_cmsdk_apb_irq_config_func_4(const struct device *dev)

0 commit comments

Comments
 (0)