summaryrefslogtreecommitdiff
path: root/include/clk.h
diff options
context:
space:
mode:
authorJean-Jacques Hiblot <jjhiblot@ti.com>2019-10-22 15:00:06 +0300
committerLukasz Majewski <lukma@denx.de>2019-10-22 17:14:05 +0300
commitfd1ba2965244e7628ac3aa539e51653490e1b4fe (patch)
treefef3571441f22b016b6601e73b447a82f18811b0 /include/clk.h
parentdd2e0ce2a408c527b1146a9159b68565596cef56 (diff)
downloadu-boot-fd1ba2965244e7628ac3aa539e51653490e1b4fe.tar.xz
drivers: clk: Fix using assigned-clocks in the node of the clock it sets up
This fixes the case where assigned-clocks is used to define a clock defaults inside this same clock's node. This is used sometimes to setup a default parents and/or rate for a clock. example: muxed_clock: muxed_clock { clocks = <&clk_provider 0>, <&clk_provider 1>; #clock-cells = <0>; assigned-clocks = <&muxed_clock>; assigned-clock-parents = <&clk_provider 1>; }; It doesn't work in u-boot because the assigned-clocks are setup *before* the clock is probed. (clk_set_parent() will likely crash or fail if called before the device probe function) Making it work by handling "assigned-clocks" in 2 steps: first before the clk device is probed, and then after the clk device is probed. Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Diffstat (limited to 'include/clk.h')
-rw-r--r--include/clk.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/include/clk.h b/include/clk.h
index 9be3264113..a5ee53d94a 100644
--- a/include/clk.h
+++ b/include/clk.h
@@ -244,10 +244,13 @@ static inline int clk_release_all(struct clk *clk, int count)
*
* @dev: A device to process (the ofnode associated with this device
* will be processed).
+ * @stage: A integer. 0 indicates that this is called before the device
+ * is probed. 1 indicates that this is called just after the
+ * device has been probed
*/
-int clk_set_defaults(struct udevice *dev);
+int clk_set_defaults(struct udevice *dev, int stage);
#else
-static inline int clk_set_defaults(struct udevice *dev)
+static inline int clk_set_defaults(struct udevice *dev, int stage)
{
return 0;
}