ARM: 9163/1: amba: Move of_amba_device_decode_irq() into amba_probe()
authorWang Kefeng <wangkefeng.wang@huawei.com>
Fri, 3 Dec 2021 09:25:21 +0000 (10:25 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 17 Dec 2021 11:34:35 +0000 (11:34 +0000)
Similar to other resources the AMBA bus "gets" for the device,
move irq obtain from amba_device_add() to amba_probe().

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
drivers/amba/bus.c

index 16d3c00..e1a5eca 100644 (file)
@@ -171,6 +171,28 @@ static int amba_uevent(struct device *dev, struct kobj_uevent_env *env)
        return retval;
 }
 
+static int of_amba_device_decode_irq(struct amba_device *dev)
+{
+       struct device_node *node = dev->dev.of_node;
+       int i, irq = 0;
+
+       if (IS_ENABLED(CONFIG_OF_IRQ) && node) {
+               /* Decode the IRQs and address ranges */
+               for (i = 0; i < AMBA_NR_IRQS; i++) {
+                       irq = of_irq_get(node, i);
+                       if (irq < 0) {
+                               if (irq == -EPROBE_DEFER)
+                                       return irq;
+                               irq = 0;
+                       }
+
+                       dev->irq[i] = irq;
+               }
+       }
+
+       return 0;
+}
+
 /*
  * These are the device model conversion veneers; they convert the
  * device model structures to our more specific structures.
@@ -183,6 +205,10 @@ static int amba_probe(struct device *dev)
        int ret;
 
        do {
+               ret = of_amba_device_decode_irq(pcdev);
+               if (ret)
+                       break;
+
                ret = of_clk_set_defaults(dev->of_node, false);
                if (ret < 0)
                        break;
@@ -368,38 +394,12 @@ static void amba_device_release(struct device *dev)
        kfree(d);
 }
 
-static int of_amba_device_decode_irq(struct amba_device *dev)
-{
-       struct device_node *node = dev->dev.of_node;
-       int i, irq = 0;
-
-       if (IS_ENABLED(CONFIG_OF_IRQ) && node) {
-               /* Decode the IRQs and address ranges */
-               for (i = 0; i < AMBA_NR_IRQS; i++) {
-                       irq = of_irq_get(node, i);
-                       if (irq < 0) {
-                               if (irq == -EPROBE_DEFER)
-                                       return irq;
-                               irq = 0;
-                       }
-
-                       dev->irq[i] = irq;
-               }
-       }
-
-       return 0;
-}
-
 static int amba_device_try_add(struct amba_device *dev, struct resource *parent)
 {
        u32 size;
        void __iomem *tmp;
        int i, ret;
 
-       ret = of_amba_device_decode_irq(dev);
-       if (ret)
-               goto err_out;
-
        ret = request_resource(parent, &dev->res);
        if (ret)
                goto err_out;