diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2017-03-08 14:08:55 -0800 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-03-09 08:13:38 +0100 |
commit | b5ea2c6acce4cbe4bdf68c052018859b8c8c50b5 (patch) | |
tree | b3ab878896b3b4a7ab8935c194dd8dd36b35ce71 /drivers/clk/clk.c | |
parent | da1752b37003a0c1c9b25948b05e19f4ab8055a1 (diff) | |
download | barebox-b5ea2c6acce4cbe4bdf68c052018859b8c8c50b5.tar.gz barebox-b5ea2c6acce4cbe4bdf68c052018859b8c8c50b5.tar.xz |
clk: Port two helper functions from Linux
Port of_clk_get_parent_count() and of_clk_parent_fill() from Linux.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/clk/clk.c')
-rw-r--r-- | drivers/clk/clk.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 93e000c6e9..91895212ee 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -452,6 +452,24 @@ struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec) return clk; } +/** + * of_clk_get_parent_count() - Count the number of clocks a device node has + * @np: device node to count + * + * Returns: The number of clocks that are possible parents of this node + */ +unsigned int of_clk_get_parent_count(struct device_node *np) +{ + int count; + + count = of_count_phandle_with_args(np, "clocks", "#clock-cells"); + if (count < 0) + return 0; + + return count; +} +EXPORT_SYMBOL_GPL(of_clk_get_parent_count); + char *of_clk_get_parent_name(struct device_node *np, unsigned int index) { struct of_phandle_args clkspec; @@ -472,6 +490,27 @@ char *of_clk_get_parent_name(struct device_node *np, unsigned int index) } EXPORT_SYMBOL_GPL(of_clk_get_parent_name); +/** + * of_clk_parent_fill() - Fill @parents with names of @np's parents and return + * number of parents + * @np: Device node pointer associated with clock provider + * @parents: pointer to char array that hold the parents' names + * @size: size of the @parents array + * + * Return: number of parents for the clock node. + */ +int of_clk_parent_fill(struct device_node *np, const char **parents, + unsigned int size) +{ + unsigned int i = 0; + + while (i < size && (parents[i] = of_clk_get_parent_name(np, i)) != NULL) + i++; + + return i; +} +EXPORT_SYMBOL_GPL(of_clk_parent_fill); + struct clock_provider { of_clk_init_cb_t clk_init_cb; struct device_node *np; |