@@ -134,7 +134,7 @@ EXPORT_SYMBOL(clk_get_rate);
long clk_round_rate(struct clk *clk, unsigned long rate)
{
if (clk == NULL || IS_ERR(clk) || !clk->round_rate)
- return 0;
+ return -EOPNOTSUPP;
return clk->round_rate(clk, rate);
}
@@ -146,12 +146,17 @@ EXPORT_SYMBOL(clk_round_rate);
int clk_set_rate(struct clk *clk, unsigned long rate)
{
int ret = -EINVAL;
+ long rounded_rate;
if (clk == NULL || IS_ERR(clk) || clk->set_rate == NULL || rate == 0)
return ret;
+ rounded_rate = clock_round_rate(clk, rate);
+ if (rounded_rate < 0)
+ return rounded_rate;
+
mutex_lock(&clocks_mutex);
- ret = clk->set_rate(clk, rate);
+ ret = clk->set_rate(clk, rounded_rate);
mutex_unlock(&clocks_mutex);
return ret;