]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-tegra/timer.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/apm
[~andy/linux] / arch / arm / mach-tegra / timer.c
index 1d1acda4f3e0fe268d63f6291cdbf06cf0bba846..1eed8d4a80ef19fd034d72b69718640b59f85848 100644 (file)
@@ -28,7 +28,7 @@
 #include <linux/io.h>
 
 #include <asm/mach/time.h>
-#include <asm/localtimer.h>
+#include <asm/smp_twd.h>
 #include <asm/sched_clock.h>
 
 #include <mach/iomap.h>
@@ -162,6 +162,21 @@ static struct irqaction tegra_timer_irq = {
        .irq            = INT_TMR3,
 };
 
+#ifdef CONFIG_HAVE_ARM_TWD
+static DEFINE_TWD_LOCAL_TIMER(twd_local_timer,
+                             TEGRA_ARM_PERIF_BASE + 0x600,
+                             IRQ_LOCALTIMER);
+
+static void __init tegra_twd_init(void)
+{
+       int err = twd_local_timer_register(&twd_local_timer);
+       if (err)
+               pr_err("twd_local_timer_register failed %d\n", err);
+}
+#else
+#define tegra_twd_init()       do {} while(0)
+#endif
+
 static void __init tegra_init_timer(void)
 {
        struct clk *clk;
@@ -188,10 +203,6 @@ static void __init tegra_init_timer(void)
        else
                clk_enable(clk);
 
-#ifdef CONFIG_HAVE_ARM_TWD
-       twd_base = IO_ADDRESS(TEGRA_ARM_PERIF_BASE + 0x600);
-#endif
-
        switch (rate) {
        case 12000000:
                timer_writel(0x000b, TIMERUS_USEC_CFG);
@@ -231,6 +242,7 @@ static void __init tegra_init_timer(void)
        tegra_clockevent.cpumask = cpu_all_mask;
        tegra_clockevent.irq = tegra_timer_irq.irq;
        clockevents_register_device(&tegra_clockevent);
+       tegra_twd_init();
 }
 
 struct sys_timer tegra_timer = {