Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight
[pandora-kernel.git] / arch / arm / plat-s5p / irq-eint.c
index eaa70aa..e56c807 100644 (file)
@@ -60,7 +60,7 @@ static void s5p_irq_eint_maskack(unsigned int irq)
 
 static int s5p_irq_eint_set_type(unsigned int irq, unsigned int type)
 {
-       int offs = eint_offset(irq);
+       int offs = EINT_OFFSET(irq);
        int shift;
        u32 ctrl, mask;
        u32 newvalue = 0;
@@ -139,17 +139,16 @@ static struct irq_chip s5p_irq_eint = {
  */
 static inline void s5p_irq_demux_eint(unsigned int start)
 {
-       u32 status;
+       u32 status = __raw_readl(S5P_EINT_PEND(EINT_REG_NR(start)));
        u32 mask = __raw_readl(S5P_EINT_MASK(EINT_REG_NR(start)));
        unsigned int irq;
 
-       status = __raw_readl(S5P_EINT_PEND(EINT_REG_NR(start)));
        status &= ~mask;
        status &= 0xff;
 
        while (status) {
-               irq = fls(status);
-               generic_handle_irq(irq - 1 + start);
+               irq = fls(status) - 1;
+               generic_handle_irq(irq + start);
                status &= ~(1 << irq);
        }
 }
@@ -162,12 +161,18 @@ static void s5p_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
 
 static inline void s5p_irq_vic_eint_mask(unsigned int irq)
 {
+       void __iomem *base = get_irq_chip_data(irq);
+
        s5p_irq_eint_mask(irq);
+       writel(1 << EINT_OFFSET(irq), base + VIC_INT_ENABLE_CLEAR);
 }
 
 static void s5p_irq_vic_eint_unmask(unsigned int irq)
 {
+       void __iomem *base = get_irq_chip_data(irq);
+
        s5p_irq_eint_unmask(irq);
+       writel(1 << EINT_OFFSET(irq), base + VIC_INT_ENABLE);
 }
 
 static inline void s5p_irq_vic_eint_ack(unsigned int irq)