From: Patrice Chotard <patrice.chot...@st.com>

Add clk_disable_all() method which Request/Disable/Free an
array of clocks that has been previously requested by
clk_request/get_by_*()

Signed-off-by: Patrice Chotard <patrice.chot...@st.com>
Reviewed-by: Simon Glass <s...@chromium.org>
---

v6:     _ none
v5:     _ none
v4:     _ none
v3:     _ add commit message
v2:     _ create this independant path for printf() replacement


 drivers/clk/clk-uclass.c | 22 ++++++++++++++++++++++
 include/clk.h            | 10 ++++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 38d5f80..ca1781d 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -200,6 +200,28 @@ int clk_disable(struct clk *clk)
        return ops->disable(clk);
 }
 
+int clk_disable_all(struct clk *clk, int count)
+{
+       int i, ret;
+
+       debug("%s(clk=%p count=%d)\n", __func__, clk, count);
+
+       for (i = 0; i < count; i++) {
+               ret = clk_request(clk->dev, &clk[i]);
+               if (ret && ret != -ENOSYS)
+                       return ret;
+
+               ret = clk_disable(&clk[i]);
+               if (ret && ret != -ENOSYS)
+                       return ret;
+
+               ret = clk_free(&clk[i]);
+               if (ret && ret != -ENOSYS)
+                       return ret;
+       }
+       return 0;
+}
+
 UCLASS_DRIVER(clk) = {
        .id             = UCLASS_CLK,
        .name           = "clk",
diff --git a/include/clk.h b/include/clk.h
index 801920c..25a3f32 100644
--- a/include/clk.h
+++ b/include/clk.h
@@ -186,6 +186,16 @@ int clk_enable(struct clk *clk);
  */
 int clk_disable(struct clk *clk);
 
+/**
+ * clk_disable_all() - Request/Disable (turn off)/Free clocks.
+ *
+ * @clk:       A clock struct array that was previously successfully
+ *             requested by clk_request/get_by_*().
+ * @count      Number of clock contained in the array
+ * @return zero on success, or -ve error code.
+ */
+int clk_disable_all(struct clk *clk, int count);
+
 int soc_clk_dump(void);
 
 #endif
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to