aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-s5pv310/irq-combiner.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-s5pv310/irq-combiner.c')
-rw-r--r--arch/arm/mach-s5pv310/irq-combiner.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/arm/mach-s5pv310/irq-combiner.c b/arch/arm/mach-s5pv310/irq-combiner.c
index c3f88c3faf6c..aad5c3d525d1 100644
--- a/arch/arm/mach-s5pv310/irq-combiner.c
+++ b/arch/arm/mach-s5pv310/irq-combiner.c
@@ -24,6 +24,7 @@ static DEFINE_SPINLOCK(irq_controller_lock);
24 24
25struct combiner_chip_data { 25struct combiner_chip_data {
26 unsigned int irq_offset; 26 unsigned int irq_offset;
27 unsigned int irq_mask;
27 void __iomem *base; 28 void __iomem *base;
28}; 29};
29 30
@@ -62,6 +63,7 @@ static void combiner_handle_cascade_irq(unsigned int irq, struct irq_desc *desc)
62 spin_lock(&irq_controller_lock); 63 spin_lock(&irq_controller_lock);
63 status = __raw_readl(chip_data->base + COMBINER_INT_STATUS); 64 status = __raw_readl(chip_data->base + COMBINER_INT_STATUS);
64 spin_unlock(&irq_controller_lock); 65 spin_unlock(&irq_controller_lock);
66 status &= chip_data->irq_mask;
65 67
66 if (status == 0) 68 if (status == 0)
67 goto out; 69 goto out;
@@ -104,10 +106,12 @@ void __init combiner_init(unsigned int combiner_nr, void __iomem *base,
104 106
105 combiner_data[combiner_nr].base = base; 107 combiner_data[combiner_nr].base = base;
106 combiner_data[combiner_nr].irq_offset = irq_start; 108 combiner_data[combiner_nr].irq_offset = irq_start;
109 combiner_data[combiner_nr].irq_mask = 0xff << ((combiner_nr % 4) << 3);
107 110
108 /* Disable all interrupts */ 111 /* Disable all interrupts */
109 112
110 __raw_writel(0xffffffff, base + COMBINER_ENABLE_CLEAR); 113 __raw_writel(combiner_data[combiner_nr].irq_mask,
114 base + COMBINER_ENABLE_CLEAR);
111 115
112 /* Setup the Linux IRQ subsystem */ 116 /* Setup the Linux IRQ subsystem */
113 117