OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -136,17 +136,17 @@ static bool bcma_is_core_needed_early(u1
        return false;
 }
 
-static struct device_node *bcma_of_find_child_device(struct platform_device *parent,
+static struct device_node *bcma_of_find_child_device(struct device *parent,
                                                     struct bcma_device *core)
 {
        struct device_node *node;
        u64 size;
        const __be32 *reg;
 
-       if (!parent || !parent->dev.of_node)
+       if (!parent->of_node)
                return NULL;
 
-       for_each_child_of_node(parent->dev.of_node, node) {
+       for_each_child_of_node(parent->of_node, node) {
                reg = of_get_address(node, 0, &size, NULL);
                if (!reg)
                        continue;
@@ -156,7 +156,7 @@ static struct device_node *bcma_of_find_
        return NULL;
 }
 
-static int bcma_of_irq_parse(struct platform_device *parent,
+static int bcma_of_irq_parse(struct device *parent,
                             struct bcma_device *core,
                             struct of_phandle_args *out_irq, int num)
 {
@@ -169,7 +169,7 @@ static int bcma_of_irq_parse(struct plat
                        return rc;
        }
 
-       out_irq->np = parent->dev.of_node;
+       out_irq->np = parent->of_node;
        out_irq->args_count = 1;
        out_irq->args[0] = num;
 
@@ -177,13 +177,13 @@ static int bcma_of_irq_parse(struct plat
        return of_irq_parse_raw(laddr, out_irq);
 }
 
-static unsigned int bcma_of_get_irq(struct platform_device *parent,
+static unsigned int bcma_of_get_irq(struct device *parent,
                                    struct bcma_device *core, int num)
 {
        struct of_phandle_args out_irq;
        int ret;
 
-       if (!IS_ENABLED(CONFIG_OF_IRQ) || !parent || !parent->dev.of_node)
+       if (!IS_ENABLED(CONFIG_OF_IRQ) || !parent->of_node)
                return 0;
 
        ret = bcma_of_irq_parse(parent, core, &out_irq, num);
@@ -196,7 +196,7 @@ static unsigned int bcma_of_get_irq(stru
        return irq_create_of_mapping(&out_irq);
 }
 
-static void bcma_of_fill_device(struct platform_device *parent,
+static void bcma_of_fill_device(struct device *parent,
                                struct bcma_device *core)
 {
        struct device_node *node;
@@ -227,7 +227,7 @@ unsigned int bcma_core_irq(struct bcma_d
                        return mips_irq <= 4 ? mips_irq + 2 : 0;
                }
                if (bus->host_pdev)
-                       return bcma_of_get_irq(bus->host_pdev, core, num);
+                       return bcma_of_get_irq(&bus->host_pdev->dev, core, num);
                return 0;
        case BCMA_HOSTTYPE_SDIO:
                return 0;
@@ -253,7 +253,8 @@ void bcma_prepare_core(struct bcma_bus *
                if (IS_ENABLED(CONFIG_OF) && bus->host_pdev) {
                        core->dma_dev = &bus->host_pdev->dev;
                        core->dev.parent = &bus->host_pdev->dev;
-                       bcma_of_fill_device(bus->host_pdev, core);
+                       if (core->dev.parent)
+                               bcma_of_fill_device(core->dev.parent, core);
                } else {
                        core->dev.dma_mask = &core->dev.coherent_dma_mask;
                        core->dma_dev = &core->dev;