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 fast_timer_interrupt(int irq
, void *dev_id
)
13 /* Clear Pending Interrupt by writing '1' to it */
14 *IXP4XX_OSST
= IXP4XX_OSST_TIMER_2_PEND
;
20 static void fast_timer_set(void)
22 unsigned long interval
;
24 /* Setup the Timer counter value */
25 interval
= (CLOCK_TICK_RATE
+ fast_timer_rate
/2) / fast_timer_rate
;
26 *IXP4XX_OSRT2
= (interval
& ~IXP4XX_OST_RELOAD_MASK
) | IXP4XX_OST_ENABLE
;
29 static int __init
fast_timer_setup(void)
31 /* Clear Pending Interrupt by writing '1' to it */
32 *IXP4XX_OSST
= IXP4XX_OSST_TIMER_2_PEND
;
34 /* Connect the interrupt handler and enable the interrupt */
35 if (request_irq(IRQ_IXP4XX_TIMER2
, fast_timer_interrupt
, SA_INTERRUPT
,
39 fast_timer_rate
= 5000;
42 printk("fast timer: %d Hz, IRQ %d\n", fast_timer_rate
,
47 static void __exit
fast_timer_cleanup(void)
49 *IXP4XX_OSRT2
= IXP4XX_OST_DISABLED
;
50 free_irq(IRQ_IXP4XX_TIMER2
, NULL
);