Blame view

kernel/linux-rt-4.4.41/drivers/clk/spear/clk.c 879 Bytes
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  /*
   * Copyright (C) 2012 ST Microelectronics
   * Viresh Kumar <vireshk@kernel.org>
   *
   * This file is licensed under the terms of the GNU General Public
   * License version 2. This program is licensed "as is" without any
   * warranty of any kind, whether express or implied.
   *
   * SPEAr clk - Common routines
   */
  
  #include <linux/clk-provider.h>
  #include <linux/types.h>
  #include "clk.h"
  
  long clk_round_rate_index(struct clk_hw *hw, unsigned long drate,
  		unsigned long parent_rate, clk_calc_rate calc_rate, u8 rtbl_cnt,
  		int *index)
  {
  	unsigned long prev_rate, rate = 0;
  
  	for (*index = 0; *index < rtbl_cnt; (*index)++) {
  		prev_rate = rate;
  		rate = calc_rate(hw, parent_rate, *index);
  		if (drate < rate) {
  			/* previous clock was best */
  			if (*index) {
  				rate = prev_rate;
  				(*index)--;
  			}
  			break;
  		}
  	}
  
  	if ((*index) == rtbl_cnt)
  		(*index)--;
  
  	return rate;
  }