omap: Use separate init_irq functions to avoid cpu_is_omap tests early
[linux-3.10.git] / arch / arm / mach-omap2 / irq.c
index 3af2b7a..3a12f75 100644 (file)
@@ -141,25 +141,20 @@ omap_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
                                IRQ_NOREQUEST | IRQ_NOPROBE, 0);
 }
 
-void __init omap_init_irq(void)
+static void __init omap_init_irq(u32 base, int nr_irqs)
 {
        unsigned long nr_of_irqs = 0;
        unsigned int nr_banks = 0;
        int i, j;
 
+       omap_irq_base = ioremap(base, SZ_4K);
+       if (WARN_ON(!omap_irq_base))
+               return;
+
        for (i = 0; i < ARRAY_SIZE(irq_banks); i++) {
-               unsigned long base = 0;
                struct omap_irq_bank *bank = irq_banks + i;
 
-               if (cpu_is_omap24xx())
-                       base = OMAP24XX_IC_BASE;
-               else if (cpu_is_omap34xx())
-                       base = OMAP34XX_IC_BASE;
-
-               BUG_ON(!base);
-
-               if (cpu_is_ti816x())
-                       bank->nr_irqs = 128;
+               bank->nr_irqs = nr_irqs;
 
                /* Static mapping, never released */
                bank->base_reg = ioremap(base, SZ_4K);
@@ -181,6 +176,21 @@ void __init omap_init_irq(void)
               nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : "");
 }
 
+void __init omap2_init_irq(void)
+{
+       omap_init_irq(OMAP24XX_IC_BASE, 96);
+}
+
+void __init omap3_init_irq(void)
+{
+       omap_init_irq(OMAP34XX_IC_BASE, 96);
+}
+
+void __init ti816x_init_irq(void)
+{
+       omap_init_irq(OMAP34XX_IC_BASE, 128);
+}
+
 #ifdef CONFIG_ARCH_OMAP3
 static struct omap3_intc_regs intc_context[ARRAY_SIZE(irq_banks)];