• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/mach-lh7a40x/
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
41static irqreturn_t
42lh7a40x_timer_interrupt(int irq, void *dev_id)
43{
44	TIMER_EOI = 0;
45	timer_tick();
46
47	return IRQ_HANDLED;
48}
49
50static 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
56static 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
69struct sys_timer lh7a40x_timer = {
70	.init		= &lh7a40x_timer_init,
71};
72