diff options
-rw-r--r-- | include/linux/clockchips.h | 2 | ||||
-rw-r--r-- | kernel/time/clockevents.c | 20 |
2 files changed, 22 insertions, 0 deletions
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 80acc79e0dc5..d6733e27af34 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
@@ -132,6 +132,8 @@ extern void clockevents_config_and_register(struct clock_event_device *dev, | |||
132 | u32 freq, unsigned long min_delta, | 132 | u32 freq, unsigned long min_delta, |
133 | unsigned long max_delta); | 133 | unsigned long max_delta); |
134 | 134 | ||
135 | extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); | ||
136 | |||
135 | extern void clockevents_exchange_device(struct clock_event_device *old, | 137 | extern void clockevents_exchange_device(struct clock_event_device *old, |
136 | struct clock_event_device *new); | 138 | struct clock_event_device *new); |
137 | extern void clockevents_set_mode(struct clock_event_device *dev, | 139 | extern void clockevents_set_mode(struct clock_event_device *dev, |
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index c69e88c94446..22a9da9a9c96 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
@@ -238,6 +238,26 @@ void clockevents_config_and_register(struct clock_event_device *dev, | |||
238 | clockevents_register_device(dev); | 238 | clockevents_register_device(dev); |
239 | } | 239 | } |
240 | 240 | ||
241 | /** | ||
242 | * clockevents_update_freq - Update frequency and reprogram a clock event device. | ||
243 | * @dev: device to modify | ||
244 | * @freq: new device frequency | ||
245 | * | ||
246 | * Reconfigure and reprogram a clock event device in oneshot | ||
247 | * mode. Must be called on the cpu for which the device delivers per | ||
248 | * cpu timer events with interrupts disabled! Returns 0 on success, | ||
249 | * -ETIME when the event is in the past. | ||
250 | */ | ||
251 | int clockevents_update_freq(struct clock_event_device *dev, u32 freq) | ||
252 | { | ||
253 | clockevents_config(dev, freq); | ||
254 | |||
255 | if (dev->mode != CLOCK_EVT_MODE_ONESHOT) | ||
256 | return 0; | ||
257 | |||
258 | return clockevents_program_event(dev, dev->next_event, ktime_get()); | ||
259 | } | ||
260 | |||
241 | /* | 261 | /* |
242 | * Noop handler when we shut down an event device | 262 | * Noop handler when we shut down an event device |
243 | */ | 263 | */ |