From mboxrd@z Thu Jan 1 00:00:00 1970 From: patrice.chotard at st.com Date: Thu, 1 Jun 2017 13:36:15 +0200 Subject: [U-Boot] [PATCH v5 04/11] clk: add clk_count() In-Reply-To: <1496316982-16572-1-git-send-email-patrice.chotard@st.com> References: <1496316982-16572-1-git-send-email-patrice.chotard@st.com> Message-ID: <1496316982-16572-5-git-send-email-patrice.chotard@st.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de From: Patrice Chotard 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 --- v5: _ none v4: _ add clk_count() method drivers/clk/clk-uclass.c | 12 ++++++++++++ include/clk.h | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 83b6328..1215121 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -95,8 +95,20 @@ 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 clk clk; + + for (count = 0; ; count++) { + if (clk_get_by_index(dev, count, &clk)) + 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) -- 1.9.1