2 * arch/arm/mach-lh7a40x/time.c
4 * Copyright (C) 2004 Logic Product Development
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * version 2 as published by the Free Software Foundation.
11 #include <linux/module.h>
12 #include <linux/kernel.h>
13 #include <linux/interrupt.h>
14 #include <linux/irq.h>
15 #include <linux/time.h>
17 #include <asm/hardware.h>
22 #include <asm/mach/time.h>
26 # define TIMER_CONTROL TIMER_CONTROL2
27 # define TIMER_LOAD TIMER_LOAD2
28 # define TIMER_CONSTANT (508469/HZ)
29 # define TIMER_MODE (TIMER_C_ENABLE | TIMER_C_PERIODIC | TIMER_C_508KHZ)
30 # define TIMER_EOI TIMER_EOI2
31 # define TIMER_IRQ IRQ_T2UI
33 # define TIMER_CONTROL TIMER_CONTROL3
34 # define TIMER_LOAD TIMER_LOAD3
35 # define TIMER_CONSTANT (3686400/HZ)
36 # define TIMER_MODE (TIMER_C_ENABLE | TIMER_C_PERIODIC)
37 # define TIMER_EOI TIMER_EOI3
38 # define TIMER_IRQ IRQ_T3UI
42 lh7a40x_timer_interrupt(int irq
, void *dev_id
)
44 write_seqlock(&xtime_lock
);
49 write_sequnlock(&xtime_lock
);
54 static struct irqaction lh7a40x_timer_irq
= {
55 .name
= "LHA740x Timer Tick",
56 .flags
= IRQF_DISABLED
| IRQF_TIMER
| IRQF_IRQPOLL
,
57 .handler
= lh7a40x_timer_interrupt
,
60 static void __init
lh7a40x_timer_init (void)
62 /* Stop/disable all timers */
67 setup_irq (TIMER_IRQ
, &lh7a40x_timer_irq
);
69 TIMER_LOAD
= TIMER_CONSTANT
;
70 TIMER_CONTROL
= TIMER_MODE
;
73 struct sys_timer lh7a40x_timer
= {
74 .init
= &lh7a40x_timer_init
,