Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm: Footbridge: Use common i8253 clockevent

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: John Stultz <john.stultz@linaro.org>
Link: http://lkml.kernel.org/r/20110609130622.241312122@linutronix.de

+4 -52
+1
arch/arm/mach-footbridge/Kconfig
··· 5 5 config ARCH_CATS 6 6 bool "CATS" 7 7 select CLKSRC_I8253 8 + select CLKEVT_I8253 8 9 select FOOTBRIDGE_HOST 9 10 select ISA 10 11 select ISA_DMA
+3 -52
arch/arm/mach-footbridge/isa-timer.c
··· 5 5 * Copyright (C) 1998 Phil Blundell 6 6 */ 7 7 #include <linux/clockchips.h> 8 - #include <linux/clocksource.h> 9 8 #include <linux/i8253.h> 10 9 #include <linux/init.h> 11 10 #include <linux/interrupt.h> 12 11 #include <linux/irq.h> 13 - #include <linux/io.h> 14 12 #include <linux/spinlock.h> 15 13 #include <linux/timex.h> 16 14 ··· 16 18 #include <asm/mach/time.h> 17 19 18 20 #include "common.h" 19 - 20 - static void pit_set_mode(enum clock_event_mode mode, 21 - struct clock_event_device *evt) 22 - { 23 - unsigned long flags; 24 - 25 - raw_local_irq_save(flags); 26 - 27 - switch (mode) { 28 - case CLOCK_EVT_MODE_PERIODIC: 29 - outb_p(0x34, PIT_MODE); 30 - outb_p(PIT_LATCH & 0xff, PIT_CH0); 31 - outb_p(PIT_LATCH >> 8, PIT_CH0); 32 - break; 33 - 34 - case CLOCK_EVT_MODE_SHUTDOWN: 35 - case CLOCK_EVT_MODE_UNUSED: 36 - outb_p(0x30, PIT_MODE); 37 - outb_p(0, PIT_CH0); 38 - outb_p(0, PIT_CH0); 39 - break; 40 - 41 - case CLOCK_EVT_MODE_ONESHOT: 42 - case CLOCK_EVT_MODE_RESUME: 43 - break; 44 - } 45 - local_irq_restore(flags); 46 - } 47 - 48 - static int pit_set_next_event(unsigned long delta, 49 - struct clock_event_device *evt) 50 - { 51 - return 0; 52 - } 53 - 54 - static struct clock_event_device pit_ce = { 55 - .name = "pit", 56 - .features = CLOCK_EVT_FEAT_PERIODIC, 57 - .set_mode = pit_set_mode, 58 - .set_next_event = pit_set_next_event, 59 - .shift = 32, 60 - }; 61 21 62 22 static irqreturn_t pit_timer_interrupt(int irq, void *dev_id) 63 23 { ··· 28 72 .name = "pit", 29 73 .handler = pit_timer_interrupt, 30 74 .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, 31 - .dev_id = &pit_ce, 75 + .dev_id = &i8253_clockevent, 32 76 }; 33 77 34 78 static void __init isa_timer_init(void) 35 79 { 36 - pit_ce.cpumask = cpumask_of(smp_processor_id()); 37 - pit_ce.mult = div_sc(PIT_TICK_RATE, NSEC_PER_SEC, pit_ce.shift); 38 - pit_ce.max_delta_ns = clockevent_delta2ns(0x7fff, &pit_ce); 39 - pit_ce.min_delta_ns = clockevent_delta2ns(0x000f, &pit_ce); 40 - 41 80 clocksource_i8253_init(); 42 81 43 - setup_irq(pit_ce.irq, &pit_timer_irq); 44 - clockevents_register_device(&pit_ce); 82 + setup_irq(i8253_clockevent.irq, &pit_timer_irq); 83 + clockevent_i8253_init(false); 45 84 } 46 85 47 86 struct sys_timer isa_timer = {