• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  arch/arm/mach-lh7a40x/time.c
3  *
4  *  Copyright (C) 2004 Logic Product Development
5  *
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.
9  *
10  */
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>
16 #include <linux/io.h>
17 
18 #include <mach/hardware.h>
19 #include <asm/irq.h>
20 #include <asm/leds.h>
21 
22 #include <asm/mach/time.h>
23 #include "common.h"
24 
25 #if HZ < 100
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
32 #else
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
39 #endif
40 
41 static irqreturn_t
lh7a40x_timer_interrupt(int irq,void * dev_id)42 lh7a40x_timer_interrupt(int irq, void *dev_id)
43 {
44 	TIMER_EOI = 0;
45 	timer_tick();
46 
47 	return IRQ_HANDLED;
48 }
49 
50 static struct irqaction lh7a40x_timer_irq = {
51 	.name		= "LHA740x Timer Tick",
52 	.flags		= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
53 	.handler	= lh7a40x_timer_interrupt,
54 };
55 
lh7a40x_timer_init(void)56 static void __init lh7a40x_timer_init (void)
57 {
58 				/* Stop/disable all timers */
59 	TIMER_CONTROL1 = 0;
60 	TIMER_CONTROL2 = 0;
61 	TIMER_CONTROL3 = 0;
62 
63 	setup_irq (TIMER_IRQ, &lh7a40x_timer_irq);
64 
65 	TIMER_LOAD = TIMER_CONSTANT;
66 	TIMER_CONTROL = TIMER_MODE;
67 }
68 
69 struct sys_timer lh7a40x_timer = {
70 	.init		= &lh7a40x_timer_init,
71 };
72