return (cycle_t) inl(scx200_cb_base + SCx200_TIMER_OFFSET);
 }
 
-#define HRT_SHIFT_1    22
-#define HRT_SHIFT_27   26
-
 static struct clocksource cs_hrt = {
        .name           = "scx200_hrt",
        .rating         = 250,
 
 static int __init init_hrt_clocksource(void)
 {
+       u32 freq;
        /* Make sure scx200 has initialized the configuration block */
        if (!scx200_cb_present())
                return -ENODEV;
        outb(HR_TMEN | (mhz27 ? HR_TMCLKSEL : 0),
             scx200_cb_base + SCx200_TMCNFG_OFFSET);
 
-       if (mhz27) {
-               cs_hrt.shift = HRT_SHIFT_27;
-               cs_hrt.mult = clocksource_hz2mult((HRT_FREQ + ppm) * 27,
-                                                 cs_hrt.shift);
-       } else {
-               cs_hrt.shift = HRT_SHIFT_1;
-               cs_hrt.mult = clocksource_hz2mult(HRT_FREQ + ppm,
-                                                 cs_hrt.shift);
-       }
+       freq = (HRT_FREQ + ppm);
+       if (mhz27)
+               freq *= 27;
+
        pr_info("enabling scx200 high-res timer (%s MHz +%d ppm)\n",
+       printk(KERN_INFO "enabling scx200 high-res timer (%s MHz +%d ppm)\n",
                mhz27 ? "27":"1", ppm);
 
-       return clocksource_register(&cs_hrt);
+       return clocksource_register_hz(&cs_hrt, freq);
 }
 
 module_init(init_hrt_clocksource);