Skip to content

Commit

Permalink
[ARM] S3C64XX: Fix s3c64xx_setrate_clksrc
Browse files Browse the repository at this point in the history
Some of the rate selection logic in s3c64xx_setrate_clksrc uses what
appears to be parent clock selection logic. This patch corrects it.

I also added a check for overly large dividers to prevent them from
changing unrelated clocks.

Signed-off-by: Werner Almesberger <werner@openmoko.org>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
  • Loading branch information
Werner Almesberger authored and Ben Dooks committed Feb 27, 2009
1 parent fdca9bf commit efeff56
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions arch/arm/plat-s3c64xx/s3c6400-clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)

rate = clk_round_rate(clk, rate);
div = clk_get_rate(clk->parent) / rate;
if (div > 16)
return -EINVAL;

val = __raw_readl(reg);
val &= ~sclk->mask;
val |= (rate - 1) << sclk->shift;
val &= ~(0xf << sclk->shift);
val |= (div - 1) << sclk->shift;
__raw_writel(val, reg);

return 0;
Expand Down

0 comments on commit efeff56

Please sign in to comment.