Add support for initializing when boot using devicetree. The main difference
is that the irq_base will not be setup, so it needs to be manually handled.

Signed-off-by: Rhyland Klein <[email protected]>
---
 v2: split off irq specific changes based on previous review comments

 drivers/mfd/tps65910-irq.c |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/mfd/tps65910-irq.c b/drivers/mfd/tps65910-irq.c
index 0f1ff7f..066a30f 100644
--- a/drivers/mfd/tps65910-irq.c
+++ b/drivers/mfd/tps65910-irq.c
@@ -180,12 +180,6 @@ int tps65910_irq_init(struct tps65910 *tps65910, int irq,
                return -EINVAL;
        }
 
-       tps65910->irq_mask = 0xFFFFFF;
-
-       mutex_init(&tps65910->irq_lock);
-       tps65910->chip_irq = irq;
-       tps65910->irq_base = pdata->irq_base;
-
        switch (tps65910_chip_id(tps65910)) {
        case TPS65910:
                tps65910->irq_num = TPS65910_NUM_IRQ;
@@ -195,6 +189,21 @@ int tps65910_irq_init(struct tps65910 *tps65910, int irq,
                break;
        }
 
+       if (pdata->irq_base <= 0)
+               pdata->irq_base = irq_alloc_descs(-1, 0, tps65910->irq_num, -1);
+
+       if (pdata->irq_base <= 0) {
+               dev_err(tps65910->dev, "Failed to allocate irq descs: %d\n",
+                       pdata->irq_base);
+               return pdata->irq_base;
+       }
+
+       tps65910->irq_mask = 0xFFFFFF;
+
+       mutex_init(&tps65910->irq_lock);
+       tps65910->chip_irq = irq;
+       tps65910->irq_base = pdata->irq_base;
+
        /* Register with genirq */
        for (cur_irq = tps65910->irq_base;
             cur_irq < tps65910->irq_num + tps65910->irq_base;
-- 
1.7.0.4

_______________________________________________
devicetree-discuss mailing list
[email protected]
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to