aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch')
-rw-r--r--target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch131
1 files changed, 131 insertions, 0 deletions
diff --git a/target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch b/target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch
new file mode 100644
index 0000000000..6cfa91a049
--- /dev/null
+++ b/target/linux/ramips/patches-3.9/0141-clocksource-make-clocksource_of_init-pass-a-device_n.patch
@@ -0,0 +1,131 @@
+From ec2ed8cdbe8b3d24261f0d88eb039e9d71e5d588 Mon Sep 17 00:00:00 2001
+From: John Crispin <blogic@openwrt.org>
+Date: Thu, 23 May 2013 16:58:12 +0200
+Subject: [PATCH 141/164] clocksource: make clocksource_of_init() pass a
+ device_node pointer
+
+If we look at the clocksources that are OF enabled we will notice, that they
+all do a of_find_matching_node() when being called. This patch changes
+clocksource_of_init() to always pass the struct device_node pointer to the
+init function.
+
+Signed-off-by: John Crispin <blogic@openwrt.org>
+---
+ drivers/clocksource/bcm2835_timer.c | 12 +-----------
+ drivers/clocksource/clksrc-of.c | 4 ++--
+ drivers/clocksource/tegra20_timer.c | 14 +-------------
+ drivers/clocksource/vt8500_timer.c | 14 +-------------
+ 4 files changed, 5 insertions(+), 39 deletions(-)
+
+diff --git a/drivers/clocksource/bcm2835_timer.c b/drivers/clocksource/bcm2835_timer.c
+index 50c68fe..766611d 100644
+--- a/drivers/clocksource/bcm2835_timer.c
++++ b/drivers/clocksource/bcm2835_timer.c
+@@ -95,23 +95,13 @@ static irqreturn_t bcm2835_time_interrupt(int irq, void *dev_id)
+ }
+ }
+
+-static struct of_device_id bcm2835_time_match[] __initconst = {
+- { .compatible = "brcm,bcm2835-system-timer" },
+- {}
+-};
+-
+-static void __init bcm2835_timer_init(void)
++static void __init bcm2835_timer_init(struct device_node *node)
+ {
+- struct device_node *node;
+ void __iomem *base;
+ u32 freq;
+ int irq;
+ struct bcm2835_timer *timer;
+
+- node = of_find_matching_node(NULL, bcm2835_time_match);
+- if (!node)
+- panic("No bcm2835 timer node");
+-
+ base = of_iomap(node, 0);
+ if (!base)
+ panic("Can't remap registers");
+diff --git a/drivers/clocksource/clksrc-of.c b/drivers/clocksource/clksrc-of.c
+index bdabdaa..3ef11fb 100644
+--- a/drivers/clocksource/clksrc-of.c
++++ b/drivers/clocksource/clksrc-of.c
+@@ -26,10 +26,10 @@ void __init clocksource_of_init(void)
+ {
+ struct device_node *np;
+ const struct of_device_id *match;
+- void (*init_func)(void);
++ void (*init_func)(struct device_node *);
+
+ for_each_matching_node_and_match(np, __clksrc_of_table, &match) {
+ init_func = match->data;
+- init_func();
++ init_func(np);
+ }
+ }
+diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c
+index 0bde03f..e698d8e 100644
+--- a/drivers/clocksource/tegra20_timer.c
++++ b/drivers/clocksource/tegra20_timer.c
+@@ -154,29 +154,17 @@ static struct irqaction tegra_timer_irq = {
+ .dev_id = &tegra_clockevent,
+ };
+
+-static const struct of_device_id timer_match[] __initconst = {
+- { .compatible = "nvidia,tegra20-timer" },
+- {}
+-};
+-
+ static const struct of_device_id rtc_match[] __initconst = {
+ { .compatible = "nvidia,tegra20-rtc" },
+ {}
+ };
+
+-static void __init tegra20_init_timer(void)
++static void __init tegra20_init_timer(struct device_node *np)
+ {
+- struct device_node *np;
+ struct clk *clk;
+ unsigned long rate;
+ int ret;
+
+- np = of_find_matching_node(NULL, timer_match);
+- if (!np) {
+- pr_err("Failed to find timer DT node\n");
+- BUG();
+- }
+-
+ timer_reg_base = of_iomap(np, 0);
+ if (!timer_reg_base) {
+ pr_err("Can't map timer registers\n");
+diff --git a/drivers/clocksource/vt8500_timer.c b/drivers/clocksource/vt8500_timer.c
+index 8efc86b..2422552 100644
+--- a/drivers/clocksource/vt8500_timer.c
++++ b/drivers/clocksource/vt8500_timer.c
+@@ -129,22 +129,10 @@ static struct irqaction irq = {
+ .dev_id = &clockevent,
+ };
+
+-static struct of_device_id vt8500_timer_ids[] = {
+- { .compatible = "via,vt8500-timer" },
+- { }
+-};
+-
+-static void __init vt8500_timer_init(void)
++static void __init vt8500_timer_init(struct device_node *np)
+ {
+- struct device_node *np;
+ int timer_irq;
+
+- np = of_find_matching_node(NULL, vt8500_timer_ids);
+- if (!np) {
+- pr_err("%s: Timer description missing from Device Tree\n",
+- __func__);
+- return;
+- }
+ regbase = of_iomap(np, 0);
+ if (!regbase) {
+ pr_err("%s: Missing iobase description in Device Tree\n",
+--
+1.7.10.4
+