Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 235254
b: refs/heads/master
c: 421186e
h: refs/heads/master
v: v3
  • Loading branch information
Colin Cross committed Feb 22, 2011
1 parent 6b5aa90 commit fe9fe5a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 78f379b574dcbe656fa21ea72e95f8dff232e233
refs/heads/master: 421186e71000c067c2687baeffde62954a80cdcc
12 changes: 12 additions & 0 deletions trunk/arch/arm/mach-tegra/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ static unsigned long clk_predict_rate_from_parent(struct clk *c, struct clk *p)

if (c->mul != 0 && c->div != 0) {
rate *= c->mul;
rate += c->div - 1; /* round up */
do_div(rate, c->div);
}

Expand Down Expand Up @@ -240,12 +241,23 @@ EXPORT_SYMBOL(clk_get_parent);

int clk_set_rate_locked(struct clk *c, unsigned long rate)
{
long new_rate;

if (!c->ops || !c->ops->set_rate)
return -ENOSYS;

if (rate > c->max_rate)
rate = c->max_rate;

if (c->ops && c->ops->round_rate) {
new_rate = c->ops->round_rate(c, rate);

if (new_rate < 0)
return new_rate;

rate = new_rate;
}

return c->ops->set_rate(c, rate);
}

Expand Down
8 changes: 4 additions & 4 deletions trunk/arch/arm/mach-tegra/tegra2_clocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -898,9 +898,9 @@ static long tegra2_pll_div_clk_round_rate(struct clk *c, unsigned long rate)
divider = clk_div71_get_divider(parent_rate, rate);
if (divider < 0)
return divider;
return parent_rate * 2 / (divider + 2);
return DIV_ROUND_UP(parent_rate * 2, divider + 2);
} else if (c->flags & DIV_2) {
return parent_rate / 2;
return DIV_ROUND_UP(parent_rate, 2);
}
return -EINVAL;
}
Expand Down Expand Up @@ -1092,12 +1092,12 @@ static long tegra2_periph_clk_round_rate(struct clk *c,
if (divider < 0)
return divider;

return parent_rate * 2 / (divider + 2);
return DIV_ROUND_UP(parent_rate * 2, divider + 2);
} else if (c->flags & DIV_U16) {
divider = clk_div16_get_divider(parent_rate, rate);
if (divider < 0)
return divider;
return parent_rate / (divider + 1);
return DIV_ROUND_UP(parent_rate, divider + 1);
}
return -EINVAL;
}
Expand Down

0 comments on commit fe9fe5a

Please sign in to comment.