| From 7d45a8582944d287a796ae846e88d41d5e3f02e1 Mon Sep 17 00:00:00 2001 |
| From: Dinh Nguyen <dinguyen@opensource.altera.com> |
| Date: Fri, 5 Jun 2015 11:26:13 -0500 |
| Subject: [PATCH 17/39] clk: of: helper for filling parent clock array and |
| return num of parents |
| |
| Sprinkled all through the platform clock drivers are code like this to |
| fill the clock parent array: |
| |
| for (i = 0; i < num_parents; ++i) |
| parent_names[i] = of_clk_get_parent_name(np, i); |
| |
| The of_clk_parent_fill() will do the same as the code above, and while |
| at it, return the number of parents as well since the logic of the |
| function is to the walk the clock node to look for the parent. |
| |
| Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com> |
| [sboyd@codeaurora.org: Fixed kernel-doc] |
| Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> |
| (cherry picked from commit 2e61dfb3602b904966491f260f62c01b9895936a) |
| Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com> |
| --- |
| drivers/clk/clk.c | 21 +++++++++++++++++++++ |
| include/linux/clk-provider.h | 2 ++ |
| 2 files changed, 23 insertions(+) |
| |
| diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c |
| index 9f9cadd00bc8..80f3f38a2575 100644 |
| --- a/drivers/clk/clk.c |
| +++ b/drivers/clk/clk.c |
| @@ -3069,6 +3069,27 @@ const char *of_clk_get_parent_name(struct device_node *np, 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; |
| diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h |
| index df695313f975..6068df19d08a 100644 |
| --- a/include/linux/clk-provider.h |
| +++ b/include/linux/clk-provider.h |
| @@ -624,6 +624,8 @@ struct clk *of_clk_src_simple_get(struct of_phandle_args *clkspec, |
| void *data); |
| struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data); |
| int of_clk_get_parent_count(struct device_node *np); |
| +int of_clk_parent_fill(struct device_node *np, const char **parents, |
| + unsigned int size); |
| const char *of_clk_get_parent_name(struct device_node *np, int index); |
| |
| void of_clk_init(const struct of_device_id *matches); |
| -- |
| 2.6.2 |
| |