irqchip: vic: update the base IRQ member correctly
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 24 Nov 2013 19:18:57 +0000 (20:18 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 13 Feb 2014 10:21:13 +0000 (11:21 +0100)
When passing 0 as the irq base the VIC driver will dynamically
allocate a number of consecutive interrupt descriptors at some
available number range. Make sure this number is recorded in
the state container rather than the passed-in zero argument
in this case.

Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/irqchip/irq-vic.c

index 8e21ae0bab4658a2ee2beb15a07a7a396411261f..70108c1491bcdc5c68954ccf6fb0fc333e5df864 100644 (file)
@@ -273,7 +273,6 @@ static void __init vic_register(void __iomem *base, unsigned int irq,
        v->base = base;
        v->valid_sources = valid_sources;
        v->resume_sources = resume_sources;
-       v->irq = irq;
        set_handle_irq(vic_handle_irq);
        vic_id++;
        v->domain = irq_domain_add_simple(node, fls(valid_sources), irq,
@@ -282,6 +281,11 @@ static void __init vic_register(void __iomem *base, unsigned int irq,
        for (i = 0; i < fls(valid_sources); i++)
                if (valid_sources & (1 << i))
                        irq_create_mapping(v->domain, i);
+       /* If no base IRQ was passed, figure out our allocated base */
+       if (irq)
+               v->irq = irq;
+       else
+               v->irq = irq_find_mapping(v->domain, 0);
 }
 
 static void vic_ack_irq(struct irq_data *d)