Switch to using the simple MMIO clocksource driver provided by
kernel.

Signed-off-by: Sekhar Nori <[email protected]>
---
 arch/arm/Kconfig             |    1 +
 arch/arm/mach-davinci/time.c |   30 ++++++++----------------------
 2 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 3304316..69e97e8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -927,6 +927,7 @@ config ARCH_DAVINCI
        select HAVE_IDE
        select HAVE_SCHED_CLOCK
        select CLKDEV_LOOKUP
+       select CLKSRC_MMIO
        select GENERIC_ALLOCATOR
        select GENERIC_IRQ_CHIP
        select ARCH_HAS_HOLES_MEMORYMODEL
diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c
index f307b7d..876e5d7 100644
--- a/arch/arm/mach-davinci/time.c
+++ b/arch/arm/mach-davinci/time.c
@@ -264,20 +264,6 @@ static void __init timer_hw_init(void)
 /*
  * clocksource
  */
-static cycle_t read_cycles(struct clocksource *cs)
-{
-       struct timer_s *t = &timers[TID_CLOCKSOURCE];
-
-       return (cycles_t)timer32_read(t);
-}
-
-static struct clocksource clocksource_davinci = {
-       .rating         = 300,
-       .read           = read_cycles,
-       .mask           = CLOCKSOURCE_MASK(32),
-       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
 static DEFINE_CLOCK_DATA(cd);
 
 /*
@@ -347,8 +333,6 @@ void __init davinci_timer_early_init(void)
        struct davinci_soc_info *soc_info = &davinci_soc_info;
        unsigned int clockevent_id;
        unsigned int clocksource_id;
-       static char err[] __initdata = KERN_ERR
-               "%s: can't register clocksource!\n";
 
        clockevent_id = soc_info->timer_info->clockevent_id;
        clocksource_id = soc_info->timer_info->clocksource_id;
@@ -382,20 +366,16 @@ void __init davinci_timer_early_init(void)
 
        timer_hw_init();
 
-       /* setup clocksource */
-       clocksource_davinci.read = read_cycles;
-       clocksource_davinci.name = id_to_name[clocksource_id];
        init_sched_clock(&cd, davinci_update_sched_clock, 32,
                         davinci_clock_tick_rate);
-       if (clocksource_register_hz(&clocksource_davinci,
-                                   davinci_clock_tick_rate))
-               printk(err, clocksource_davinci.name);
 }
 
 static void __init davinci_timer_late_init(void)
 {
        struct davinci_soc_info *soc_info = &davinci_soc_info;
        struct davinci_timer_instance *dtip = soc_info->timer_info->timers;
+       void __iomem *clocksource_reg = timers[TID_CLOCKSOURCE].base +
+                                       timers[TID_CLOCKSOURCE].tim_off;
        int i;
 
        for (i = 0; i < ARRAY_SIZE(timers); i++) {
@@ -418,6 +398,12 @@ static void __init davinci_timer_late_init(void)
                }
        }
 
+       /* setup clocksource */
+       clocksource_mmio_init(clocksource_reg,
+                             id_to_name[timers[TID_CLOCKSOURCE].id],
+                             davinci_clock_tick_rate, 300, 32,
+                             clocksource_mmio_readl_up);
+
        /* setup clockevent */
        clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
        clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
-- 
1.7.0.4

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to