Merge branch 'liblockdep-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / drivers / irqchip / irq-sun4i.c
index 2029cc5e71c9669444eb2bc26316a5bfebe4a692..6fcef4a95a18af9462431a1d1ef39cd0f100aaa2 100644 (file)
@@ -41,13 +41,11 @@ static void __exception_irq_entry sun4i_handle_irq(struct pt_regs *regs);
 static void sun4i_irq_ack(struct irq_data *irqd)
 {
        unsigned int irq = irqd_to_hwirq(irqd);
-       unsigned int irq_off = irq % 32;
-       int reg = irq / 32;
-       u32 val;
 
-       val = readl(sun4i_irq_base + SUN4I_IRQ_PENDING_REG(reg));
-       writel(val | (1 << irq_off),
-              sun4i_irq_base + SUN4I_IRQ_PENDING_REG(reg));
+       if (irq != 0)
+               return; /* Only IRQ 0 / the ENMI needs to be acked */
+
+       writel(BIT(0), sun4i_irq_base + SUN4I_IRQ_PENDING_REG(0));
 }
 
 static void sun4i_irq_mask(struct irq_data *irqd)
@@ -75,13 +73,6 @@ static void sun4i_irq_unmask(struct irq_data *irqd)
 }
 
 static struct irq_chip sun4i_irq_chip = {
-       .name           = "sun4i_irq",
-       .irq_mask       = sun4i_irq_mask,
-       .irq_unmask     = sun4i_irq_unmask,
-};
-
-/* IRQ 0 / the ENMI needs a late eoi call */
-static struct irq_chip sun4i_irq_chip_enmi = {
        .name           = "sun4i_irq",
        .irq_eoi        = sun4i_irq_ack,
        .irq_mask       = sun4i_irq_mask,
@@ -92,13 +83,7 @@ static struct irq_chip sun4i_irq_chip_enmi = {
 static int sun4i_irq_map(struct irq_domain *d, unsigned int virq,
                         irq_hw_number_t hw)
 {
-       if (hw == 0)
-               irq_set_chip_and_handler(virq, &sun4i_irq_chip_enmi,
-                                        handle_fasteoi_irq);
-       else
-               irq_set_chip_and_handler(virq, &sun4i_irq_chip,
-                                        handle_level_irq);
-
+       irq_set_chip_and_handler(virq, &sun4i_irq_chip, handle_fasteoi_irq);
        set_irq_flags(virq, IRQF_VALID | IRQF_PROBE);
 
        return 0;