--- zzzz-none-000/linux-2.6.28.10/include/linux/clocksource.h 2009-05-02 18:54:43.000000000 +0000 +++ fusiv-7390-686/linux-2.6.28.10/include/linux/clocksource.h 2010-05-06 10:48:52.000000000 +0000 @@ -220,6 +220,28 @@ c->raw_interval = ((u64)c->cycle_interval * c->mult_orig) >> c->shift; } +/** + * clocksource_set_clock - calculates an appropriate shift + * and mult values for a clocksource given a + * known clock frequency + * @cs: Clocksource to initialize + * @hz: Clocksource frequency in Hz + */ +static inline void clocksource_set_clock(struct clocksource *cs, u32 hz) +{ + u64 temp; + u32 shift; + for (shift = 32; shift > 0; shift--) { + temp = (u64) NSEC_PER_SEC << shift; + do_div(temp, hz); + if ((temp >> 32) == 0) + break; + } + cs->shift = shift; + cs->mult = (u32) temp; +} + + /* used to install a new clocksource */ extern int clocksource_register(struct clocksource*);