浏览代码

sh: clkfwk: Handle NULL clkops for root clocks.

root clocks may simply be placeholders for rate and ancestry information,
and have no real associated operations of their own. Account for this,
so we are still able to use these sorts of clocks for rate propagation.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Paul Mundt 16 年之前
父节点
当前提交
d672fef027
共有 1 个文件被更改,包括 3 次插入3 次删除
  1. 3 3
      arch/sh/kernel/cpu/clock.c

+ 3 - 3
arch/sh/kernel/cpu/clock.c

@@ -103,7 +103,7 @@ void propagate_rate(struct clk *tclk)
 	struct clk *clkp;
 	struct clk *clkp;
 
 
 	list_for_each_entry(clkp, &tclk->children, sibling) {
 	list_for_each_entry(clkp, &tclk->children, sibling) {
-		if (clkp->ops->recalc)
+		if (clkp->ops && clkp->ops->recalc)
 			clkp->rate = clkp->ops->recalc(clkp);
 			clkp->rate = clkp->ops->recalc(clkp);
 		propagate_rate(clkp);
 		propagate_rate(clkp);
 	}
 	}
@@ -196,7 +196,7 @@ void recalculate_root_clocks(void)
 	struct clk *clkp;
 	struct clk *clkp;
 
 
 	list_for_each_entry(clkp, &root_clks, sibling) {
 	list_for_each_entry(clkp, &root_clks, sibling) {
-		if (clkp->ops->recalc)
+		if (clkp->ops && clkp->ops->recalc)
 			clkp->rate = clkp->ops->recalc(clkp);
 			clkp->rate = clkp->ops->recalc(clkp);
 		propagate_rate(clkp);
 		propagate_rate(clkp);
 	}
 	}
@@ -224,7 +224,7 @@ int clk_register(struct clk *clk)
 		list_add(&clk->sibling, &root_clks);
 		list_add(&clk->sibling, &root_clks);
 
 
 	list_add(&clk->node, &clock_list);
 	list_add(&clk->node, &clock_list);
-	if (clk->ops->init)
+	if (clk->ops && clk->ops->init)
 		clk->ops->init(clk);
 		clk->ops->init(clk);
 	mutex_unlock(&clock_list_sem);
 	mutex_unlock(&clock_list_sem);