clockevents: Provide interface to reconfigure an active clock event device

Some ARM SoCs have clock event devices which have their frequency
modified due to frequency scaling. Provide an interface which allows
to reconfigure an active device. After reconfiguration reprogram the
current pending event.

Signed-off-by: Thomas Gleixner <[email protected]>
Cc: LAK <[email protected]>
Cc: John Stultz <[email protected]>
Acked-by: Linus Walleij <[email protected]>
Reviewed-by: Ingo Molnar <[email protected]>
Link: http://lkml.kernel.org/r/%3C20110518210136.437459958%40linutronix.de%3E
This commit is contained in:
Thomas Gleixner 2011-05-18 21:33:42 +00:00
commit 80b816b736
2 changed files with 22 additions and 0 deletions

View file

@ -238,6 +238,26 @@ void clockevents_config_and_register(struct clock_event_device *dev,
clockevents_register_device(dev);
}
/**
* clockevents_update_freq - Update frequency and reprogram a clock event device.
* @dev: device to modify
* @freq: new device frequency
*
* Reconfigure and reprogram a clock event device in oneshot
* mode. Must be called on the cpu for which the device delivers per
* cpu timer events with interrupts disabled! Returns 0 on success,
* -ETIME when the event is in the past.
*/
int clockevents_update_freq(struct clock_event_device *dev, u32 freq)
{
clockevents_config(dev, freq);
if (dev->mode != CLOCK_EVT_MODE_ONESHOT)
return 0;
return clockevents_program_event(dev, dev->next_event, ktime_get());
}
/*
* Noop handler when we shut down an event device
*/