Thread (10 messages) 10 messages, 2 authors, 2013-05-20
DORMANTno replies
Revisions (10)
  1. v1 [diff vs current]
  2. v2 [diff vs current]
  3. v3 [diff vs current]
  4. v3 [diff vs current]
  5. v3 [diff vs current]
  6. v3 [diff vs current]
  7. v3 current
  8. v4 [diff vs current]
  9. v5 [diff vs current]
  10. v6 [diff vs current]

[PATCH v3 2/4] clk: add support for clock reparent on set_rate

From: James Hogan <hidden>
Date: 2013-05-20 09:13:11

On 20/05/13 05:15, Stephen Boyd wrote:
Noticed another minor thing. I'm working on the set rate and
parent at the same time op on top of this patch series. Hopefully
have something soon.

On 05/15, James Hogan wrote:
quoted
@@ -1181,6 +1242,11 @@ static void clk_change_rate(struct clk *clk)
 
 	old_rate = clk->rate;
 
+	/* set parent */
+	if (clk->new_parent && clk->new_parent != clk->parent)
+		__clk_set_parent_no_recalc(clk, clk->new_parent,
+					   clk->new_parent_index);
+
This check here for new_parent != clk->parent ...
quoted
@@ -1451,6 +1501,27 @@ static int __clk_set_parent(struct clk *clk, struct clk *parent, u8 p_index)
 	return 0;
 }
 
+static int __clk_set_parent_no_recalc(struct clk *clk, struct clk *parent,
+				      u8 p_index)
+{
+	int ret = 0;
+
+	if (clk->parent == parent)
+		goto out;
causes this to never be true, so we can probably drop it.
quoted
+
+	/* only re-parent if the clock is not in use */
+	ret = __clk_set_parent(clk, parent, p_index);
+	if (ret)
+		goto out;
+
+	/* reparent, but don't propagate rate recalculation downstream */
+	clk_reparent(clk, parent);
+	clk_debug_reparent(clk, parent);
+
+out:
+	return ret;
+}
Also, we never check the return code so it's sort of useless.
Hi Stephen,

Well spotted, and as you pointed it privately it can use
__clk_set_parent() instead of __clk_set_parent_no_recalc() now :)

Thanks
James
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help