-/*
+/*
* arch/arm/mach-lh7a40x/time.c
*
* Copyright (C) 2004 Logic Product Development
* 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/irq.h>
#include <linux/time.h>
#include <asm/hardware.h>
#include <asm/leds.h>
#include <asm/mach/time.h>
+#include "common.h"
#if HZ < 100
# define TIMER_CONTROL TIMER_CONTROL2
#endif
static irqreturn_t
-lh7a40x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+lh7a40x_timer_interrupt(int irq, void *dev_id)
{
+ write_seqlock(&xtime_lock);
+
TIMER_EOI = 0;
- timer_tick(regs);
+ timer_tick();
+
+ write_sequnlock(&xtime_lock);
return IRQ_HANDLED;
}
static struct irqaction lh7a40x_timer_irq = {
.name = "LHA740x Timer Tick",
- .flags = SA_INTERRUPT,
- .handler = lh7a40x_timer_interrupt
+ .flags = IRQF_DISABLED | IRQF_TIMER,
+ .handler = lh7a40x_timer_interrupt,
};
-void __init lh7a40x_init_time(void)
+static void __init lh7a40x_timer_init (void)
{
/* Stop/disable all timers */
TIMER_CONTROL1 = 0;
TIMER_CONTROL = TIMER_MODE;
}
+struct sys_timer lh7a40x_timer = {
+ .init = &lh7a40x_timer_init,
+};