From: Paul Cercueil <p...@crapouillou.net>

If we cannot create the IRQ domain, the driver should fail to probe
instead of succeeding with just a warning message.

Signed-off-by: Paul Cercueil <p...@crapouillou.net>
Signed-off-by: Zhou Yanjie <zhouyan...@zoho.com>
---
 drivers/irqchip/irq-ingenic.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/irqchip/irq-ingenic.c b/drivers/irqchip/irq-ingenic.c
index 06fa810..d97a3a5 100644
--- a/drivers/irqchip/irq-ingenic.c
+++ b/drivers/irqchip/irq-ingenic.c
@@ -87,6 +87,14 @@ static int __init ingenic_intc_of_init(struct device_node 
*node,
                goto out_unmap_irq;
        }
 
+       domain = irq_domain_add_legacy(node, num_chips * 32,
+                                      JZ4740_IRQ_BASE, 0,
+                                      &irq_domain_simple_ops, NULL);
+       if (!domain) {
+               err = -ENOMEM;
+               goto out_unmap_base;
+       }
+
        for (i = 0; i < num_chips; i++) {
                /* Mask all irqs */
                writel(0xffffffff, intc->base + (i * CHIP_SIZE) +
@@ -112,14 +120,11 @@ static int __init ingenic_intc_of_init(struct device_node 
*node,
                                       IRQ_NOPROBE | IRQ_LEVEL);
        }
 
-       domain = irq_domain_add_legacy(node, num_chips * 32, JZ4740_IRQ_BASE, 0,
-                                      &irq_domain_simple_ops, NULL);
-       if (!domain)
-               pr_warn("unable to register IRQ domain\n");
-
        setup_irq(parent_irq, &intc_cascade_action);
        return 0;
 
+out_unmap_base:
+       iounmap(intc->base);
 out_unmap_irq:
        irq_dispose_mapping(parent_irq);
 out_free:
-- 
2.7.4


Reply via email to