clk: add clk_is_orphan() to check if a clocks inherits from an orphan clock

A patch from »clk: improve handling of orphan clocks« in state Mainline for linux-kernel

From: Heiko Stuebner <heiko@...> Date: Tue, 17 Feb 2015 23:22:03 +0100

Commit-Message

There are cases where it is helpful to know if the full clock path can be trusted or if there is a parent clock missing somewhere in the parent-path. We keep it confined to the ccf area for now, if later users outside the ccf surface it can be made more publically available. Signed-off-by: Heiko Stuebner <heiko@...>

Patch-Comment

drivers/clk/clk.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)

Statistics

  • 38 lines added
  • 0 lines removed

Changes

------------------------------ drivers/clk/clk.c -------------------------------
index 512323f..476f491 100644
@@ -2271,6 +2271,44 @@ bool clk_is_match(const struct clk *p, const struct clk *q)
EXPORT_SYMBOL_GPL(clk_is_match);
/**
+ * __clk_is_orphan - check if a clock or its parent is an orphan
+ *
+ * Walks up the clock parents until it reaches a root-clock or
+ * a clock contained in the orphan list. Returns true if there is
+ * an orphan in the parent-path otherwise false.
+ */
+static bool __clk_is_orphan(struct clk_core *clk)
+{
+ struct clk_core *orphan;
+
+ if (clk->flags & CLK_IS_ROOT)
+ return false;
+
+ hlist_for_each_entry(orphan, &clk_orphan_list, child_node) {
+ if (clk == orphan)
+ return true;
+ }
+
+ if (clk->num_parents)
+ return __clk_is_orphan(clk->parent);
+
+ return false;
+}
+
+static bool clk_is_orphan(struct clk *clk)
+{
+ bool ret;
+
+ if (!clk)
+ return false;
+
+ clk_prepare_lock();
+ ret = __clk_is_orphan(clk->core);
+ clk_prepare_unlock();
+ return ret;
+}
+
+/**
* __clk_init - initialize the data structures in a struct clk
* @dev: device initializing this clk, placeholder for now
* @clk: clk being initialized
 
 

Recent Patches

About Us

Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer.

Read More...