diff options
Diffstat (limited to 'target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch')
-rw-r--r-- | target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch | 69 |
1 files changed, 10 insertions, 59 deletions
diff --git a/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch b/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch index 53e4d91fa6..e38b5bc1c6 100644 --- a/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch +++ b/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch @@ -15,73 +15,24 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/drivers/bcma/main.c +++ b/drivers/bcma/main.c -@@ -10,6 +10,8 @@ +@@ -10,6 +10,7 @@ #include <linux/platform_device.h> #include <linux/bcma/bcma.h> #include <linux/slab.h> +#include <linux/of_irq.h> -+#include <linux/of_address.h> + #include <linux/of_address.h> MODULE_DESCRIPTION("Broadcom's specific AMBA driver"); - MODULE_LICENSE("GPL"); -@@ -131,6 +133,45 @@ static bool bcma_is_core_needed_early(u1 - return false; - } +@@ -159,8 +160,10 @@ static void bcma_of_fill_device(struct p + struct device_node *node; -+#ifdef CONFIG_OF -+static struct device_node *bcma_of_find_child_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+ struct device_node *node; -+ u64 size; -+ const __be32 *reg; -+ -+ if (!parent || !parent->dev.of_node) -+ return NULL; -+ -+ for_each_child_of_node(parent->dev.of_node, node) { -+ reg = of_get_address(node, 0, &size, NULL); -+ if (!reg) -+ continue; -+ if (of_translate_address(node, reg) == core->addr) -+ return node; -+ } -+ return NULL; -+} -+ -+static void bcma_of_fill_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+ struct device_node *node; -+ -+ node = bcma_of_find_child_device(parent, core); + node = bcma_of_find_child_device(parent, core); +- if (node) +- core->dev.of_node = node; + if (!node) + return; + core->dev.of_node = node; + core->irq = irq_of_parse_and_map(node, 0); -+} -+#else -+static void bcma_of_fill_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+} -+#endif /* CONFIG_OF */ -+ - static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core) - { - int err; -@@ -147,7 +188,13 @@ static void bcma_register_core(struct bc - break; - case BCMA_HOSTTYPE_SOC: - core->dev.dma_mask = &core->dev.coherent_dma_mask; -- core->dma_dev = &core->dev; -+ if (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); -+ } else { -+ core->dma_dev = &core->dev; -+ } - break; - case BCMA_HOSTTYPE_SDIO: - break; + } + #else + static void bcma_of_fill_device(struct platform_device *parent, |