--- zzzz-none-000/linux-2.6.28.10/include/linux/clockchips.h 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/include/linux/clockchips.h 2010-05-06 10:48:52.000000000 +0000 @@ -114,6 +114,28 @@ return (unsigned long) tmp; } +/** + * clockevent_set_clock - calculates an appropriate shift + * and mult values for a clockevent given a + * known clock frequency + * @dev: Clockevent device to initialize + * @hz: Clockevent clock frequency in Hz + */ +static inline void clockevent_set_clock(struct clock_event_device *dev, u32 hz) +{ + u64 temp; + u32 shift; + for (shift = 32; shift > 0; shift--) { + temp = (u64) hz << shift; + do_div(temp, NSEC_PER_SEC); + if ((temp >> 32) == 0) + break; + } + dev->shift = shift; + dev->mult = (u32) temp; +} + + /* Clock event layer functions */ extern unsigned long clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt);