clock: Add ClockPreUpdate callback event type
Add a new callback event type ClockPreUpdate, which is called on period changes before the period is updated. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Luc Michel <luc@lmichel.fr> Reviewed-by: Hao Wu <wuhaotsh@google.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20210219144617.4782-3-peter.maydell@linaro.org
This commit is contained in:
parent
5ee0abed51
commit
e4341623a3
@ -181,7 +181,14 @@ events.
|
||||
|
||||
The events currently supported are:
|
||||
|
||||
* ``ClockUpdate`` : called after the input clock's period has changed
|
||||
* ``ClockPreUpdate`` : called when the input clock's period is about to
|
||||
update. This is useful if the device needs to do some action for
|
||||
which it needs to know the old value of the clock period. During
|
||||
this callback, Clock API functions like ``clock_get()`` or
|
||||
``clock_ticks_to_ns()`` will use the old period.
|
||||
* ``ClockUpdate`` : called after the input clock's period has changed.
|
||||
During this callback, Clock API functions like ``clock_ticks_to_ns()``
|
||||
will use the new period.
|
||||
|
||||
Note that a clock only has one callback: it is not possible to register
|
||||
different functions for different events. You must register a single
|
||||
|
@ -81,6 +81,9 @@ static void clock_propagate_period(Clock *clk, bool call_callbacks)
|
||||
|
||||
QLIST_FOREACH(child, &clk->children, sibling) {
|
||||
if (child->period != clk->period) {
|
||||
if (call_callbacks) {
|
||||
clock_call_callback(child, ClockPreUpdate);
|
||||
}
|
||||
child->period = clk->period;
|
||||
trace_clock_update(CLOCK_PATH(child), CLOCK_PATH(clk),
|
||||
CLOCK_PERIOD_TO_HZ(clk->period),
|
||||
|
@ -30,6 +30,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(Clock, CLOCK)
|
||||
*/
|
||||
typedef enum ClockEvent {
|
||||
ClockUpdate = 1, /* Clock period has just updated */
|
||||
ClockPreUpdate = 2, /* Clock period is about to update */
|
||||
} ClockEvent;
|
||||
|
||||
typedef void ClockCallback(void *opaque, ClockEvent event);
|
||||
|
Loading…
Reference in New Issue
Block a user