Commit | Line | Data |
---|---|---|
55b8fd4f VK |
1 | /* |
2 | * Copyright (C) 2012 ST Microelectronics | |
10d8935f | 3 | * Viresh Kumar <viresh.linux@gmail.com> |
55b8fd4f VK |
4 | * |
5 | * This file is licensed under the terms of the GNU General Public | |
6 | * License version 2. This program is licensed "as is" without any | |
7 | * warranty of any kind, whether express or implied. | |
8 | * | |
9 | * SPEAr clk - Common routines | |
10 | */ | |
11 | ||
12 | #include <linux/clk-provider.h> | |
13 | #include <linux/types.h> | |
14 | #include "clk.h" | |
15 | ||
16 | long clk_round_rate_index(struct clk_hw *hw, unsigned long drate, | |
17 | unsigned long parent_rate, clk_calc_rate calc_rate, u8 rtbl_cnt, | |
18 | int *index) | |
19 | { | |
20 | unsigned long prev_rate, rate = 0; | |
21 | ||
22 | for (*index = 0; *index < rtbl_cnt; (*index)++) { | |
23 | prev_rate = rate; | |
24 | rate = calc_rate(hw, parent_rate, *index); | |
25 | if (drate < rate) { | |
26 | /* previous clock was best */ | |
27 | if (*index) { | |
28 | rate = prev_rate; | |
29 | (*index)--; | |
30 | } | |
31 | break; | |
32 | } | |
33 | } | |
34 | ||
35 | return rate; | |
36 | } |