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)
                return IRQ_HANDLED;
 
-       /* Turn off the clock */
-       mfgpt_disable_timer(mfgpt_event_clock);
-
        /* Clear the counter */
        geode_mfgpt_write(mfgpt_event_clock, MFGPT_REG_COUNTER, 0);
 
        }
 
        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 */
        if (geode_mfgpt_setup_irq(mfgpt_event_clock, MFGPT_CMP2, irq)) {
                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 */
        mfgpt_clockevent.mult = div_sc(MFGPT_HZ, NSEC_PER_SEC, 32);
        mfgpt_clockevent.min_delta_ns = clockevent_delta2ns(0xF,