|
@@ -278,12 +278,12 @@ static int mfgpt_next_event(unsigned long delta, struct clock_event_device *evt)
|
|
|
|
|
|
static irqreturn_t mfgpt_tick(int irq, void *dev_id)
|
|
static irqreturn_t mfgpt_tick(int irq, void *dev_id)
|
|
{
|
|
{
|
|
|
|
+ /* Turn off the clock (and clear the event) */
|
|
|
|
+ mfgpt_disable_timer(mfgpt_event_clock);
|
|
|
|
+
|
|
if (mfgpt_tick_mode == CLOCK_EVT_MODE_SHUTDOWN)
|
|
if (mfgpt_tick_mode == CLOCK_EVT_MODE_SHUTDOWN)
|
|
return IRQ_HANDLED;
|
|
return IRQ_HANDLED;
|
|
|
|
|
|
- /* Turn off the clock */
|
|
|
|
- mfgpt_disable_timer(mfgpt_event_clock);
|
|
|
|
-
|
|
|
|
/* Clear the counter */
|
|
/* Clear the counter */
|
|
geode_mfgpt_write(mfgpt_event_clock, MFGPT_REG_COUNTER, 0);
|
|
geode_mfgpt_write(mfgpt_event_clock, MFGPT_REG_COUNTER, 0);
|
|
|
|
|
|
@@ -319,10 +319,6 @@ static int __init mfgpt_timer_setup(void)
|
|
}
|
|
}
|
|
|
|
|
|
mfgpt_event_clock = timer;
|
|
mfgpt_event_clock = timer;
|
|
- /* Set the clock scale and enable the event mode for CMP2 */
|
|
|
|
- val = MFGPT_SCALE | (3 << 8);
|
|
|
|
-
|
|
|
|
- geode_mfgpt_write(mfgpt_event_clock, MFGPT_REG_SETUP, val);
|
|
|
|
|
|
|
|
/* Set up the IRQ on the MFGPT side */
|
|
/* Set up the IRQ on the MFGPT side */
|
|
if (geode_mfgpt_setup_irq(mfgpt_event_clock, MFGPT_CMP2, irq)) {
|
|
if (geode_mfgpt_setup_irq(mfgpt_event_clock, MFGPT_CMP2, irq)) {
|
|
@@ -339,6 +335,11 @@ static int __init mfgpt_timer_setup(void)
|
|
goto err;
|
|
goto err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* Set the clock scale and enable the event mode for CMP2 */
|
|
|
|
+ val = MFGPT_SCALE | (3 << 8);
|
|
|
|
+
|
|
|
|
+ geode_mfgpt_write(mfgpt_event_clock, MFGPT_REG_SETUP, val);
|
|
|
|
+
|
|
/* Set up the clock event */
|
|
/* Set up the clock event */
|
|
mfgpt_clockevent.mult = div_sc(MFGPT_HZ, NSEC_PER_SEC, 32);
|
|
mfgpt_clockevent.mult = div_sc(MFGPT_HZ, NSEC_PER_SEC, 32);
|
|
mfgpt_clockevent.min_delta_ns = clockevent_delta2ns(0xF,
|
|
mfgpt_clockevent.min_delta_ns = clockevent_delta2ns(0xF,
|