diff options
Diffstat (limited to 'arch/arm/mach-footbridge/isa-timer.c')
| -rw-r--r-- | arch/arm/mach-footbridge/isa-timer.c | 45 | 
1 files changed, 4 insertions, 41 deletions
diff --git a/arch/arm/mach-footbridge/isa-timer.c b/arch/arm/mach-footbridge/isa-timer.c index 441c6ce0d55..7020f1a3fec 100644 --- a/arch/arm/mach-footbridge/isa-timer.c +++ b/arch/arm/mach-footbridge/isa-timer.c @@ -10,53 +10,16 @@  #include <linux/interrupt.h>  #include <linux/irq.h>  #include <linux/io.h> +#include <linux/spinlock.h>  #include <linux/timex.h>  #include <asm/irq.h> - +#include <asm/i8253.h>  #include <asm/mach/time.h>  #include "common.h" -#define PIT_MODE	0x43 -#define PIT_CH0		0x40 - -#define PIT_LATCH	((PIT_TICK_RATE + HZ / 2) / HZ) - -static cycle_t pit_read(struct clocksource *cs) -{ -	unsigned long flags; -	static int old_count; -	static u32 old_jifs; -	int count; -	u32 jifs; - -	raw_local_irq_save(flags); - -	jifs = jiffies; -	outb_p(0x00, PIT_MODE);		/* latch the count */ -	count = inb_p(PIT_CH0);		/* read the latched count */ -	count |= inb_p(PIT_CH0) << 8; - -	if (count > old_count && jifs == old_jifs) -		count = old_count; - -	old_count = count; -	old_jifs = jifs; - -	raw_local_irq_restore(flags); - -	count = (PIT_LATCH - 1) - count; - -	return (cycle_t)(jifs * PIT_LATCH) + count; -} - -static struct clocksource pit_cs = { -	.name		= "pit", -	.rating		= 110, -	.read		= pit_read, -	.mask		= CLOCKSOURCE_MASK(32), -}; +DEFINE_RAW_SPINLOCK(i8253_lock);  static void pit_set_mode(enum clock_event_mode mode,  	struct clock_event_device *evt) @@ -121,7 +84,7 @@ static void __init isa_timer_init(void)  	pit_ce.max_delta_ns = clockevent_delta2ns(0x7fff, &pit_ce);  	pit_ce.min_delta_ns = clockevent_delta2ns(0x000f, &pit_ce); -	clocksource_register_hz(&pit_cs, PIT_TICK_RATE); +	clocksource_i8253_init();  	setup_irq(pit_ce.irq, &pit_timer_irq);  	clockevents_register_device(&pit_ce);  |