Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / drivers / clocksource / time-armada-370-xp.c
index ff37d3abb80625e0af9f792d840b766015080b7a..0c8c5e3375407fad8c6f666c596d1b2c155acc04 100644 (file)
@@ -318,6 +318,7 @@ static void __init armada_xp_timer_init(struct device_node *np)
 
        /* The 25Mhz fixed clock is mandatory, and must always be available */
        BUG_ON(IS_ERR(clk));
+       clk_prepare_enable(clk);
        timer_clk = clk_get_rate(clk);
 
        armada_370_xp_timer_common_init(np);
@@ -325,11 +326,40 @@ static void __init armada_xp_timer_init(struct device_node *np)
 CLOCKSOURCE_OF_DECLARE(armada_xp, "marvell,armada-xp-timer",
                       armada_xp_timer_init);
 
+static void __init armada_375_timer_init(struct device_node *np)
+{
+       struct clk *clk;
+
+       clk = of_clk_get_by_name(np, "fixed");
+       if (!IS_ERR(clk)) {
+               clk_prepare_enable(clk);
+               timer_clk = clk_get_rate(clk);
+       } else {
+
+               /*
+                * This fallback is required in order to retain proper
+                * devicetree backwards compatibility.
+                */
+               clk = of_clk_get(np, 0);
+
+               /* Must have at least a clock */
+               BUG_ON(IS_ERR(clk));
+               clk_prepare_enable(clk);
+               timer_clk = clk_get_rate(clk) / TIMER_DIVIDER;
+               timer25Mhz = false;
+       }
+
+       armada_370_xp_timer_common_init(np);
+}
+CLOCKSOURCE_OF_DECLARE(armada_375, "marvell,armada-375-timer",
+                      armada_375_timer_init);
+
 static void __init armada_370_timer_init(struct device_node *np)
 {
        struct clk *clk = of_clk_get(np, 0);
 
        BUG_ON(IS_ERR(clk));
+       clk_prepare_enable(clk);
        timer_clk = clk_get_rate(clk) / TIMER_DIVIDER;
        timer25Mhz = false;