|
@@ -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,6 +21,9 @@
|
|
|
#include <mach/hardware.h>
|
|
|
#include <mach/irqs.h>
|
|
|
|
|
|
+#define SA1100_CLOCK_FREQ 3686400
|
|
|
+#define SA1100_LATCH DIV_ROUND_CLOSEST(SA1100_CLOCK_FREQ, HZ)
|
|
|
+
|
|
|
static u32 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
|
|
@@ -128,7 +132,7 @@ void __init sa1100_timer_init(void)
|
|
|
|
|
|
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);
|