123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- * arch/arm/mach-lh7a40x/time.c
- *
- * Copyright (C) 2004 Logic Product Development
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- */
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/interrupt.h>
- #include <linux/time.h>
- #include <asm/hardware.h>
- #include <asm/io.h>
- #include <asm/irq.h>
- #include <asm/leds.h>
- #include <asm/mach/time.h>
- #include "common.h"
- #if HZ < 100
- # define TIMER_CONTROL TIMER_CONTROL2
- # define TIMER_LOAD TIMER_LOAD2
- # define TIMER_CONSTANT (508469/HZ)
- # define TIMER_MODE (TIMER_C_ENABLE | TIMER_C_PERIODIC | TIMER_C_508KHZ)
- # define TIMER_EOI TIMER_EOI2
- # define TIMER_IRQ IRQ_T2UI
- #else
- # define TIMER_CONTROL TIMER_CONTROL3
- # define TIMER_LOAD TIMER_LOAD3
- # define TIMER_CONSTANT (3686400/HZ)
- # define TIMER_MODE (TIMER_C_ENABLE | TIMER_C_PERIODIC)
- # define TIMER_EOI TIMER_EOI3
- # define TIMER_IRQ IRQ_T3UI
- #endif
- static irqreturn_t
- lh7a40x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
- {
- write_seqlock(&xtime_lock);
- TIMER_EOI = 0;
- timer_tick(regs);
- write_sequnlock(&xtime_lock);
- return IRQ_HANDLED;
- }
- static struct irqaction lh7a40x_timer_irq = {
- .name = "LHA740x Timer Tick",
- .flags = SA_INTERRUPT | SA_TIMER,
- .handler = lh7a40x_timer_interrupt,
- };
- static void __init lh7a40x_timer_init(void)
- {
- /* Stop/disable all timers */
- TIMER_CONTROL1 = 0;
- TIMER_CONTROL2 = 0;
- TIMER_CONTROL3 = 0;
- setup_irq (TIMER_IRQ, &lh7a40x_timer_irq);
- TIMER_LOAD = TIMER_CONSTANT;
- TIMER_CONTROL = TIMER_MODE;
- }
- struct sys_timer lh7a40x_timer = {
- .init = &lh7a40x_timer_init,
- };
|