diff options
Diffstat (limited to 'arch/arm/mach-sa1100/time.c')
| -rw-r--r-- | arch/arm/mach-sa1100/time.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c index 713c86cd3d6..1dea6cfafb3 100644 --- a/arch/arm/mach-sa1100/time.c +++ b/arch/arm/mach-sa1100/time.c @@ -9,6 +9,7 @@   *   */  #include <linux/init.h> +#include <linux/kernel.h>  #include <linux/errno.h>  #include <linux/interrupt.h>  #include <linux/irq.h> @@ -20,7 +21,10 @@  #include <mach/hardware.h>  #include <mach/irqs.h> -static u32 notrace sa1100_read_sched_clock(void) +#define SA1100_CLOCK_FREQ 3686400 +#define SA1100_LATCH DIV_ROUND_CLOSEST(SA1100_CLOCK_FREQ, HZ) + +static u64 notrace sa1100_read_sched_clock(void)  {  	return readl_relaxed(OSCR);  } @@ -93,7 +97,7 @@ static void sa1100_timer_resume(struct clock_event_device *cedev)  	/*  	 * OSMR0 is the system timer: make sure OSCR is sufficiently behind  	 */ -	writel_relaxed(OSMR0 - LATCH, OSCR); +	writel_relaxed(OSMR0 - SA1100_LATCH, OSCR);  }  #else  #define sa1100_timer_suspend NULL @@ -112,7 +116,7 @@ static struct clock_event_device ckevt_sa1100_osmr0 = {  static struct irqaction sa1100_timer_irq = {  	.name		= "ost0", -	.flags		= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, +	.flags		= IRQF_TIMER | IRQF_IRQPOLL,  	.handler	= sa1100_ost0_interrupt,  	.dev_id		= &ckevt_sa1100_osmr0,  }; @@ -122,13 +126,13 @@ void __init sa1100_timer_init(void)  	writel_relaxed(0, OIER);  	writel_relaxed(OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3, OSSR); -	setup_sched_clock(sa1100_read_sched_clock, 32, 3686400); +	sched_clock_register(sa1100_read_sched_clock, 32, 3686400);  	ckevt_sa1100_osmr0.cpumask = cpumask_of(0);  	setup_irq(IRQ_OST0, &sa1100_timer_irq); -	clocksource_mmio_init(OSCR, "oscr", CLOCK_TICK_RATE, 200, 32, +	clocksource_mmio_init(OSCR, "oscr", SA1100_CLOCK_FREQ, 200, 32,  		clocksource_mmio_readl_up);  	clockevents_config_and_register(&ckevt_sa1100_osmr0, 3686400,  					MIN_OSCR_DELTA * 2, 0x7fffffff);  | 
