aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-4.9/070-bcma-from-4.11.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2017-01-27 14:32:10 +0100
committerFelix Fietkau <nbd@nbd.name>2017-02-04 20:28:14 +0100
commitf791fb4af45032a653ba7c850f4564923871cb16 (patch)
treec1fc4e564c8e27faad582e5b55a9ce91816a241c /target/linux/generic/patches-4.9/070-bcma-from-4.11.patch
parent7d00cfe9bb693e376ac9d035e13f8ce8a5ff572c (diff)
downloadupstream-f791fb4af45032a653ba7c850f4564923871cb16.tar.gz
upstream-f791fb4af45032a653ba7c850f4564923871cb16.tar.bz2
upstream-f791fb4af45032a653ba7c850f4564923871cb16.zip
kernel: add linux 4.9 support
Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Tim Harvey <tharvey@gateworks.com> [fixes]
Diffstat (limited to 'target/linux/generic/patches-4.9/070-bcma-from-4.11.patch')
-rw-r--r--target/linux/generic/patches-4.9/070-bcma-from-4.11.patch105
1 files changed, 105 insertions, 0 deletions
diff --git a/target/linux/generic/patches-4.9/070-bcma-from-4.11.patch b/target/linux/generic/patches-4.9/070-bcma-from-4.11.patch
new file mode 100644
index 0000000000..d5bdd2d5ae
--- /dev/null
+++ b/target/linux/generic/patches-4.9/070-bcma-from-4.11.patch
@@ -0,0 +1,105 @@
+--- 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;
+@@ -633,8 +634,11 @@ static int bcma_device_probe(struct devi
+ drv);
+ int err = 0;
+
++ get_device(dev);
+ if (adrv->probe)
+ err = adrv->probe(core);
++ if (err)
++ put_device(dev);
+
+ return err;
+ }
+@@ -647,6 +651,7 @@ static int bcma_device_remove(struct dev
+
+ if (adrv->remove)
+ adrv->remove(core);
++ put_device(dev);
+
+ return 0;
+ }