clock: Add new clock_has_source() function
Add a function for checking whether a clock has a source. This is useful for devices which have input clocks that must be wired up by the board as it allows them to fail in realize rather than ploughing on with a zero-period clock. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Luc Michel <luc@lmichel.fr> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20210128114145.20536-3-peter.maydell@linaro.org Message-id: 20210121190622.22000-3-peter.maydell@linaro.org
This commit is contained in:
parent
ad140dadd5
commit
132b10251c
@ -235,6 +235,22 @@ object during device instance init. For example:
|
||||
/* set initial value to 10ns / 100MHz */
|
||||
clock_set_ns(clk, 10);
|
||||
|
||||
To enforce that the clock is wired up by the board code, you can
|
||||
call ``clock_has_source()`` in your device's realize method:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
if (!clock_has_source(s->clk)) {
|
||||
error_setg(errp, "MyDevice: clk input must be connected");
|
||||
return;
|
||||
}
|
||||
|
||||
Note that this only checks that the clock has been wired up; it is
|
||||
still possible that the output clock connected to it is disabled
|
||||
or has not yet been configured, in which case the period will be
|
||||
zero. You should use the clock callback to find out when the clock
|
||||
period changes.
|
||||
|
||||
Fetching clock frequency/period
|
||||
-------------------------------
|
||||
|
||||
|
@ -139,6 +139,21 @@ void clock_clear_callback(Clock *clk);
|
||||
*/
|
||||
void clock_set_source(Clock *clk, Clock *src);
|
||||
|
||||
/**
|
||||
* clock_has_source:
|
||||
* @clk: the clock
|
||||
*
|
||||
* Returns true if the clock has a source clock connected to it.
|
||||
* This is useful for devices which have input clocks which must
|
||||
* be connected by the board/SoC code which creates them. The
|
||||
* device code can use this to check in its realize method that
|
||||
* the clock has been connected.
|
||||
*/
|
||||
static inline bool clock_has_source(const Clock *clk)
|
||||
{
|
||||
return clk->source != NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* clock_set:
|
||||
* @clk: the clock to initialize.
|
||||
|
Loading…
Reference in New Issue
Block a user