Message ID | 1496655731-2251-5-git-send-email-patrice.chotard@st.com |
---|---|
State | Superseded |
Delegated to: | Marek Vasut |
Headers | show |
On 5 June 2017 at 03:42, <patrice.chotard@st.com> wrote: > From: Patrice Chotard <patrice.chotard@st.com> > > Add clk_count() method to be able to get the number > of clocks contained into a clock property. This will allow > to allocate the right amount of memory in order to keep clock > reference. These clock reference can be used later on error path > or in .remove callback to release these clocks. > > Signed-off-by: Patrice Chotard <patrice.chotard@st.com> > --- > > v6: _ replace clk_get_by_index() by dev_read_phandle_with_args() in > clk_count() > v5: _ none > v4: _ add clk_count() method > > > drivers/clk/clk-uclass.c | 13 +++++++++++++ > include/clk.h | 12 ++++++++++++ > 2 files changed, 25 insertions(+) Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 83b6328..38d5f80 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -95,8 +95,21 @@ int clk_get_by_index(struct udevice *dev, int index, struct clk *clk) return clk_request(dev_clk, clk); } + # endif /* OF_PLATDATA */ +int clk_count(struct udevice *dev) +{ + int count; + struct ofnode_phandle_args args; + + for (count = 0; ; count++) { + if (dev_read_phandle_with_args(dev, "clocks", "#clock-cells", 0, + count, &args)) + return count; + } +} + int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk) { int index; diff --git a/include/clk.h b/include/clk.h index 5a5c2ff..801920c 100644 --- a/include/clk.h +++ b/include/clk.h @@ -98,6 +98,18 @@ int clk_get_by_index(struct udevice *dev, int index, struct clk *clk); * @return 0 if OK, or a negative error code. */ int clk_get_by_name(struct udevice *dev, const char *name, struct clk *clk); + +/** + * clk_count - Get clock count contained in the "clocks" property. + * + * This returns the count of clock found into the "clocks" property. This + * allows to allocate the right amount of memory to keep clock reference. + * + * @dev: The client device. + * @return number of clocks found. + */ +int clk_count(struct udevice *dev); + #else static inline int clk_get_by_index(struct udevice *dev, int index, struct clk *clk)