aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-samsung/irq-uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/plat-samsung/irq-uart.c')
-rw-r--r--arch/arm/plat-samsung/irq-uart.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/plat-samsung/irq-uart.c b/arch/arm/plat-samsung/irq-uart.c
index 657405c481d0..3014c7226bd1 100644
--- a/arch/arm/plat-samsung/irq-uart.c
+++ b/arch/arm/plat-samsung/irq-uart.c
@@ -19,6 +19,8 @@
19#include <linux/irq.h> 19#include <linux/irq.h>
20#include <linux/io.h> 20#include <linux/io.h>
21 21
22#include <asm/mach/irq.h>
23
22#include <mach/map.h> 24#include <mach/map.h>
23#include <plat/irq-uart.h> 25#include <plat/irq-uart.h>
24#include <plat/regs-serial.h> 26#include <plat/regs-serial.h>
@@ -30,9 +32,12 @@
30static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc) 32static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc)
31{ 33{
32 struct s3c_uart_irq *uirq = desc->irq_data.handler_data; 34 struct s3c_uart_irq *uirq = desc->irq_data.handler_data;
35 struct irq_chip *chip = irq_get_chip(irq);
33 u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP); 36 u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP);
34 int base = uirq->base_irq; 37 int base = uirq->base_irq;
35 38
39 chained_irq_enter(chip, desc);
40
36 if (pend & (1 << 0)) 41 if (pend & (1 << 0))
37 generic_handle_irq(base); 42 generic_handle_irq(base);
38 if (pend & (1 << 1)) 43 if (pend & (1 << 1))
@@ -41,6 +46,8 @@ static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc)
41 generic_handle_irq(base + 2); 46 generic_handle_irq(base + 2);
42 if (pend & (1 << 3)) 47 if (pend & (1 << 3))
43 generic_handle_irq(base + 3); 48 generic_handle_irq(base + 3);
49
50 chained_irq_exit(chip, desc);
44} 51}
45 52
46static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq) 53static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq)