|
@@ -18,6 +18,12 @@
|
|
|
DEFINE_SPINLOCK(i8253_lock);
|
|
|
EXPORT_SYMBOL(i8253_lock);
|
|
|
|
|
|
+#ifdef CONFIG_X86_32
|
|
|
+static void pit_disable_clocksource(void);
|
|
|
+#else
|
|
|
+static inline void pit_disable_clocksource(void) { }
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* HPET replaces the PIT, when enabled. So we need to know, which of
|
|
|
* the two timers is used
|
|
@@ -52,11 +58,13 @@ static void init_pit_timer(enum clock_event_mode mode,
|
|
|
outb_p(0, PIT_CH0);
|
|
|
outb_p(0, PIT_CH0);
|
|
|
}
|
|
|
+ pit_disable_clocksource();
|
|
|
break;
|
|
|
|
|
|
case CLOCK_EVT_MODE_ONESHOT:
|
|
|
/* One shot setup */
|
|
|
outb_p(0x38, PIT_MODE);
|
|
|
+ pit_disable_clocksource();
|
|
|
break;
|
|
|
|
|
|
case CLOCK_EVT_MODE_RESUME:
|
|
@@ -196,6 +204,17 @@ static struct clocksource clocksource_pit = {
|
|
|
.shift = 20,
|
|
|
};
|
|
|
|
|
|
+static void pit_disable_clocksource(void)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * Use mult to check whether it is registered or not
|
|
|
+ */
|
|
|
+ if (clocksource_pit.mult) {
|
|
|
+ clocksource_unregister(&clocksource_pit);
|
|
|
+ clocksource_pit.mult = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int __init init_pit_clocksource(void)
|
|
|
{
|
|
|
/*
|