aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/common
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2013-03-13 16:31:12 -0400
committerRob Herring <rob.herring@calxeda.com>2013-04-11 16:11:21 -0400
commit870e2928cf3368ca9b06bc925d0027b0a56bcd8e (patch)
tree77ab94078703065c13f0b3bf9b36f2d439883c9c /arch/arm/common
parent818270d573674188cfe731992e66455e2e183e64 (diff)
ARM: integrator-cp: convert use CLKSRC_OF for timer init
Move the integrator-cp timer init to timer-sp.c and use CLKSRC_OF. There is no reason to use the aliases, so drop them from the init code. The integrator-cp timers are mistakenly called sp804 timers in the dts, but in fact they are not sp804 dual timers, but single timers with the same programming model. Fix the dts to reflect this. Signed-off-by: Rob Herring <rob.herring@calxeda.com> Acked-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'arch/arm/common')
-rw-r--r--arch/arm/common/timer-sp.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/common/timer-sp.c b/arch/arm/common/timer-sp.c
index ded926f7c4e8..ddc740769601 100644
--- a/arch/arm/common/timer-sp.c
+++ b/arch/arm/common/timer-sp.c
@@ -31,6 +31,7 @@
31 31
32#include <asm/sched_clock.h> 32#include <asm/sched_clock.h>
33#include <asm/hardware/arm_timer.h> 33#include <asm/hardware/arm_timer.h>
34#include <asm/hardware/timer-sp.h>
34 35
35static long __init sp804_get_clock_rate(struct clk *clk) 36static long __init sp804_get_clock_rate(struct clk *clk)
36{ 37{
@@ -262,3 +263,37 @@ err:
262 iounmap(base); 263 iounmap(base);
263} 264}
264CLOCKSOURCE_OF_DECLARE(sp804, "arm,sp804", sp804_of_init); 265CLOCKSOURCE_OF_DECLARE(sp804, "arm,sp804", sp804_of_init);
266
267static void __init integrator_cp_of_init(struct device_node *np)
268{
269 static int init_count = 0;
270 void __iomem *base;
271 int irq;
272 const char *name = of_get_property(np, "compatible", NULL);
273
274 base = of_iomap(np, 0);
275 if (WARN_ON(!base))
276 return;
277
278 /* Ensure timer is disabled */
279 writel(0, base + TIMER_CTRL);
280
281 if (init_count == 2 || !of_device_is_available(np))
282 goto err;
283
284 if (!init_count)
285 sp804_clocksource_init(base, name);
286 else {
287 irq = irq_of_parse_and_map(np, 0);
288 if (irq <= 0)
289 goto err;
290
291 sp804_clockevents_init(base, irq, name);
292 }
293
294 init_count++;
295 return;
296err:
297 iounmap(base);
298}
299CLOCKSOURCE_OF_DECLARE(intcp, "arm,integrator-cp-timer", integrator_cp_of_init);