1 #ifndef __ASM_ARM_MACH_FAST_TIMER_H
2 #define __ASM_ARM_MACH_FAST_TIMER_H
4 #include <linux/sched.h>
5 #include <linux/timex.h>
6 #include <linux/interrupt.h>
7 #include <asm/hardware.h>
11 static irqreturn_t
fast_timer_interrupt(int irq
, void *dev_id
)
13 __raw_writel(KS8695_INTMASK_TIMERINT0
, KS8695_REG(KS8695_INT_STATUS
));
18 static void fast_timer_set(void)
20 unsigned long interval
, data
, pulse
, ctrl
;
22 /* Setup TIMER0 as fast clock */
23 interval
= (CLOCK_TICK_RATE
/1000000) * fast_timer_rate
;
25 pulse
= interval
- data
;
26 __raw_writel(data
, KS8695_REG(KS8695_TIMER0
));
27 __raw_writel(pulse
, KS8695_REG(KS8695_TIMER0_PCOUNT
));
28 ctrl
= __raw_readl(KS8695_REG(KS8695_TIMER_CTRL
)) | 0x01;
29 __raw_writel(ctrl
, KS8695_REG(KS8695_TIMER_CTRL
));
32 static int __init
fast_timer_setup(void)
34 /* Connect the interrupt handler and enable the interrupt */
35 if (request_irq(KS8695_INT_TIMERINT0
, fast_timer_interrupt
,
36 SA_INTERRUPT
, "fast timer", NULL
))
39 fast_timer_rate
= 2000;
42 printk("fast timer: %d Hz, IRQ %d\n", fast_timer_rate
,
43 KS8695_INT_TIMERINT0
);
47 static void __exit
fast_timer_cleanup(void)
51 ctrl
= __raw_readl(KS8695_REG(KS8695_TIMER_CTRL
)) & 0x02;
52 __raw_writel(ctrl
, KS8695_REG(KS8695_TIMER_CTRL
));
53 free_irq(KS8695_INT_TIMERINT0
, NULL
);