|
@@ -582,7 +582,7 @@ EXPORT_SYMBOL_GPL(clk_get_rate);
|
|
|
*/
|
|
|
unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
|
|
|
{
|
|
|
- unsigned long unused;
|
|
|
+ unsigned long parent_rate = 0;
|
|
|
|
|
|
if (!clk)
|
|
|
return -EINVAL;
|
|
@@ -590,10 +590,10 @@ unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
|
|
|
if (!clk->ops->round_rate)
|
|
|
return clk->rate;
|
|
|
|
|
|
- if (clk->flags & CLK_SET_RATE_PARENT)
|
|
|
- return clk->ops->round_rate(clk->hw, rate, &unused);
|
|
|
- else
|
|
|
- return clk->ops->round_rate(clk->hw, rate, NULL);
|
|
|
+ if (clk->parent)
|
|
|
+ parent_rate = clk->parent->rate;
|
|
|
+
|
|
|
+ return clk->ops->round_rate(clk->hw, rate, &parent_rate);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -763,7 +763,7 @@ static void clk_calc_subtree(struct clk *clk, unsigned long new_rate)
|
|
|
static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
|
|
|
{
|
|
|
struct clk *top = clk;
|
|
|
- unsigned long best_parent_rate;
|
|
|
+ unsigned long best_parent_rate = 0;
|
|
|
unsigned long new_rate;
|
|
|
|
|
|
/* sanity */
|
|
@@ -775,9 +775,6 @@ static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
|
|
|
if (!clk->ops->round_rate) {
|
|
|
clk->new_rate = clk->rate;
|
|
|
return NULL;
|
|
|
- } else {
|
|
|
- new_rate = clk->ops->round_rate(clk->hw, rate, NULL);
|
|
|
- goto out;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -794,6 +791,7 @@ static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+ best_parent_rate = clk->parent->rate;
|
|
|
new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
|
|
|
|
|
|
if (best_parent_rate != clk->parent->rate) {
|