From: Rob Herring <rob.herr...@calxeda.com>

Signed-off-by: Rob Herring <rob.herr...@calxeda.com>
Cc: Russell King <li...@arm.linux.org.uk>
Cc: linux-arm-ker...@lists.infradead.org
---
 arch/arm/kernel/smp_twd.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
index b22d700..600fbcc 100644
--- a/arch/arm/kernel/smp_twd.c
+++ b/arch/arm/kernel/smp_twd.c
@@ -237,12 +237,15 @@ static irqreturn_t twd_handler(int irq, void *dev_id)
        return IRQ_NONE;
 }
 
-static struct clk *twd_get_clock(void)
+static struct clk *twd_get_clock(struct device_node *np)
 {
-       struct clk *clk;
+       struct clk *clk = NULL;
        int err;
 
-       clk = clk_get_sys("smp_twd", NULL);
+       if (np)
+               clk = of_clk_get(np, 0);
+       if (!clk)
+               clk = clk_get_sys("smp_twd", NULL);
        if (IS_ERR(clk)) {
                pr_err("smp_twd: clock not found: %d\n", (int)PTR_ERR(clk));
                return clk;
@@ -263,6 +266,7 @@ static struct clk *twd_get_clock(void)
                return ERR_PTR(err);
        }
 
+       twd_timer_rate = clk_get_rate(clk);
        return clk;
 }
 
@@ -273,12 +277,7 @@ static int __cpuinit twd_timer_setup(struct 
clock_event_device *clk)
 {
        struct clock_event_device **this_cpu_clk;
 
-       if (!twd_clk)
-               twd_clk = twd_get_clock();
-
-       if (!IS_ERR_OR_NULL(twd_clk))
-               twd_timer_rate = clk_get_rate(twd_clk);
-       else
+       if (IS_ERR_OR_NULL(twd_clk))
                twd_calibrate_rate();
 
        __raw_writel(0, twd_base + TWD_TIMER_CONTROL);
@@ -349,6 +348,10 @@ int __init twd_local_timer_register(struct twd_local_timer 
*tlt)
        if (!twd_base)
                return -ENOMEM;
 
+       twd_clk = twd_get_clock(NULL);
+
+       twd_clk = twd_get_clock(NULL);
+
        return twd_local_timer_common_register();
 }
 
@@ -383,6 +386,8 @@ void __init twd_local_timer_of_register(void)
                goto out;
        }
 
+       twd_clk = twd_get_clock(np);
+
        err = twd_local_timer_common_register();
 
 out:
-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to