|
@@ -124,19 +124,18 @@ static int clk_generated_determine_rate(struct clk_hw *hw,
|
|
|
(gck->range.max && min_rate > gck->range.max))
|
|
|
continue;
|
|
|
|
|
|
- for (div = 1; div < GENERATED_MAX_DIV + 2; div++) {
|
|
|
- tmp_rate = DIV_ROUND_CLOSEST(parent_rate, div);
|
|
|
- tmp_diff = abs(req->rate - tmp_rate);
|
|
|
-
|
|
|
- if (best_diff < 0 || best_diff > tmp_diff) {
|
|
|
- best_rate = tmp_rate;
|
|
|
- best_diff = tmp_diff;
|
|
|
- req->best_parent_rate = parent_rate;
|
|
|
- req->best_parent_hw = parent;
|
|
|
- }
|
|
|
-
|
|
|
- if (!best_diff || tmp_rate < req->rate)
|
|
|
- break;
|
|
|
+ div = DIV_ROUND_CLOSEST(parent_rate, req->rate);
|
|
|
+ if (!div)
|
|
|
+ tmp_rate = parent_rate;
|
|
|
+ else
|
|
|
+ tmp_rate = parent_rate / div;
|
|
|
+ tmp_diff = abs(req->rate - tmp_rate);
|
|
|
+
|
|
|
+ if (best_diff < 0 || best_diff > tmp_diff) {
|
|
|
+ best_rate = tmp_rate;
|
|
|
+ best_diff = tmp_diff;
|
|
|
+ req->best_parent_rate = parent_rate;
|
|
|
+ req->best_parent_hw = parent;
|
|
|
}
|
|
|
|
|
|
if (!best_diff)
|