The gpmc code is still not a proper driver and is still using the bad old
static way of declaring its IRQ range for the various CS it can handle (8).

Use irq_alloc_descs to get dynamically a set of IRQ descriptors.
Clean some bad line wrapping here and there.

Please note that this code is still not a real driver after this fix, and
will require a massive cleanup...

Signed-off-by: Benoit Cousson <[email protected]>
---
 arch/arm/mach-omap2/gpmc.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
index dfffbbf..95ea50a 100644
--- a/arch/arm/mach-omap2/gpmc.c
+++ b/arch/arm/mach-omap2/gpmc.c
@@ -103,6 +103,8 @@ static struct clk *gpmc_l3_clk;
 
 static irqreturn_t gpmc_handle_irq(int irq, void *dev);
 
+static int irq_base;
+
 static void gpmc_write_reg(int idx, u32 val)
 {
        __raw_writel(val, gpmc_base + idx);
@@ -747,7 +749,13 @@ static int __init gpmc_init(void)
        gpmc_mem_init();
 
        /* initalize the irq_chained */
-       irq = OMAP_GPMC_IRQ_BASE;
+       irq_base = irq_alloc_descs(-1, 0, GPMC_CS_NUM, 0);
+       if (irq_base < 0) {
+               pr_err("%s() Couldn't allocate IRQs\n", __func__);
+               return -ENODEV;
+       }
+
+       irq = irq_base;
        for (cs = 0; cs < GPMC_CS_NUM; cs++) {
                irq_set_chip_and_handler(irq, &dummy_irq_chip,
                                                handle_simple_irq);
@@ -755,11 +763,11 @@ static int __init gpmc_init(void)
                irq++;
        }
 
-       ret = request_irq(gpmc_irq,
-                       gpmc_handle_irq, IRQF_SHARED, "gpmc", gpmc_base);
+       ret = request_irq(gpmc_irq, gpmc_handle_irq, IRQF_SHARED, "gpmc",
+                         gpmc_base);
        if (ret)
-               pr_err("gpmc: irq-%d could not claim: err %d\n",
-                                               gpmc_irq, ret);
+               pr_err("gpmc: irq-%d could not claim: err %d\n", gpmc_irq, ret);
+
        return ret;
 }
 postcore_initcall(gpmc_init);
@@ -770,8 +778,8 @@ static irqreturn_t gpmc_handle_irq(int irq, void *dev)
 
        /* check cs to invoke the irq */
        cs = ((gpmc_read_reg(GPMC_PREFETCH_CONFIG1)) >> CS_NUM_SHIFT) & 0x7;
-       if (OMAP_GPMC_IRQ_BASE+cs <= OMAP_GPMC_IRQ_END)
-               generic_handle_irq(OMAP_GPMC_IRQ_BASE+cs);
+       if (cs <= GPMC_CS_NUM)
+               generic_handle_irq(irq_base + cs);
 
        return IRQ_HANDLED;
 }
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to