|
@@ -60,7 +60,7 @@ static int s3c_setrate_clksrc(struct clk *clk, unsigned long rate)
|
|
|
|
|
|
rate = clk_round_rate(clk, rate);
|
|
|
div = clk_get_rate(clk->parent) / rate;
|
|
|
- if (div > 16)
|
|
|
+ if (div > (1 << sclk->reg_div.size))
|
|
|
return -EINVAL;
|
|
|
|
|
|
val = __raw_readl(reg);
|
|
@@ -102,7 +102,9 @@ static int s3c_setparent_clksrc(struct clk *clk, struct clk *parent)
|
|
|
static unsigned long s3c_roundrate_clksrc(struct clk *clk,
|
|
|
unsigned long rate)
|
|
|
{
|
|
|
+ struct clksrc_clk *sclk = to_clksrc(clk);
|
|
|
unsigned long parent_rate = clk_get_rate(clk->parent);
|
|
|
+ int max_div = 1 << sclk->reg_div.size;
|
|
|
int div;
|
|
|
|
|
|
if (rate >= parent_rate)
|
|
@@ -114,8 +116,8 @@ static unsigned long s3c_roundrate_clksrc(struct clk *clk,
|
|
|
|
|
|
if (div == 0)
|
|
|
div = 1;
|
|
|
- if (div > 16)
|
|
|
- div = 16;
|
|
|
+ if (div > max_div)
|
|
|
+ div = max_div;
|
|
|
|
|
|
rate = parent_rate / div;
|
|
|
}
|