aboutsummaryrefslogtreecommitdiff
path: root/arch/mips/kernel/i8253.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel/i8253.c')
-rw-r--r--arch/mips/kernel/i8253.c47
1 files changed, 29 insertions, 18 deletions
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c
index 475df690421..c5bc344fc74 100644
--- a/arch/mips/kernel/i8253.c
+++ b/arch/mips/kernel/i8253.c
@@ -1,28 +1,39 @@
/*
- * Copyright (C) 2006 IBM Corporation
+ * i8253.c 8253/PIT functions
*
- * Implements device information for i8253 timer chip
- *
- * 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/clockchips.h>
+#include <linux/i8253.h>
+#include <linux/export.h>
+#include <linux/smp.h>
+#include <linux/irq.h>
-#include <linux/platform_device.h>
+#include <asm/time.h>
-static __init int add_pcspkr(void)
+static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
- struct platform_device *pd;
- int ret;
+ i8253_clockevent.event_handler(&i8253_clockevent);
+
+ return IRQ_HANDLED;
+}
- pd = platform_device_alloc("pcspkr", -1);
- if (!pd)
- return -ENOMEM;
+static struct irqaction irq0 = {
+ .handler = timer_interrupt,
+ .flags = IRQF_NOBALANCING | IRQF_TIMER,
+ .name = "timer"
+};
- ret = platform_device_add(pd);
- if (ret)
- platform_device_put(pd);
+void __init setup_pit_timer(void)
+{
+ clockevent_i8253_init(true);
+ setup_irq(0, &irq0);
+}
+
+static int __init init_pit_clocksource(void)
+{
+ if (num_possible_cpus() > 1) /* PIT does not scale! */
+ return 0;
- return ret;
+ return clocksource_i8253_init();
}
-device_initcall(add_pcspkr);
+arch_initcall(init_pit_clocksource);