clocksource: convert Integrator/AP 16-bit down counting clocksource
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 8 May 2011 14:35:22 +0000 (15:35 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 23 May 2011 17:04:52 +0000 (18:04 +0100)
Convert the Integrator/AP 16-bit down-counting clocksource to the
generic clocksource infrastructure.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-integrator/Kconfig
arch/arm/mach-integrator/integrator_ap.c

index d701d32a07f1b104273238f9580605bdeabcde55..dfd18f3b50e8a4eb27eddd5029855eb682377b74 100644 (file)
@@ -4,6 +4,7 @@ menu "Integrator Options"
 
 config ARCH_INTEGRATOR_AP
        bool "Support Integrator/AP and Integrator/PP2 platforms"
+       select CLKSRC_MMIO
        select MIGHT_HAVE_PCI
        help
          Include support for the ARM(R) Integrator/AP and
index d3e96451529c90e5b478b03fc68c1a16b987a9b8..6b151288f66c31fbb48d1ec31c06b7ef5d066bb2 100644 (file)
@@ -335,25 +335,9 @@ static void __init ap_init(void)
 
 static unsigned long timer_reload;
 
-static void __iomem * const clksrc_base = (void __iomem *)TIMER2_VA_BASE;
-
-static cycle_t timersp_read(struct clocksource *cs)
-{
-       return ~(readl(clksrc_base + TIMER_VALUE) & 0xffff);
-}
-
-static struct clocksource clocksource_timersp = {
-       .name           = "timer2",
-       .rating         = 200,
-       .read           = timersp_read,
-       .mask           = CLOCKSOURCE_MASK(16),
-       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
 static void integrator_clocksource_init(u32 khz)
 {
-       struct clocksource *cs = &clocksource_timersp;
-       void __iomem *base = clksrc_base;
+       void __iomem *base = (void __iomem *)TIMER2_VA_BASE;
        u32 ctrl = TIMER_CTRL_ENABLE;
 
        if (khz >= 1500) {
@@ -364,7 +348,8 @@ static void integrator_clocksource_init(u32 khz)
        writel(ctrl, base + TIMER_CTRL);
        writel(0xffff, base + TIMER_LOAD);
 
-       clocksource_register_khz(cs, khz);
+       clocksource_mmio_init(base + TIMER_VALUE, "timer2",
+               khz * 1000, 200, 16, clocksource_mmio_readl_down);
 }
 
 static void __iomem * const clkevt_base = (void __iomem *)TIMER1_VA_BASE;