• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Common Clock definitions for various kernel files
3  *
4  * Copyright 2007-2008 Analog Devices Inc.
5  *
6  * Licensed under the GPL-2 or later.
7  */
8 
9 #ifndef _BFIN_CLOCKS_H
10 #define _BFIN_CLOCKS_H
11 
12 #include <asm/dpmc.h>
13 
14 #ifdef CONFIG_CCLK_DIV_1
15 # define CONFIG_CCLK_ACT_DIV   CCLK_DIV1
16 # define CONFIG_CCLK_DIV 1
17 #endif
18 
19 #ifdef CONFIG_CCLK_DIV_2
20 # define CONFIG_CCLK_ACT_DIV   CCLK_DIV2
21 # define CONFIG_CCLK_DIV 2
22 #endif
23 
24 #ifdef CONFIG_CCLK_DIV_4
25 # define CONFIG_CCLK_ACT_DIV   CCLK_DIV4
26 # define CONFIG_CCLK_DIV 4
27 #endif
28 
29 #ifdef CONFIG_CCLK_DIV_8
30 # define CONFIG_CCLK_ACT_DIV   CCLK_DIV8
31 # define CONFIG_CCLK_DIV 8
32 #endif
33 
34 #ifndef CONFIG_PLL_BYPASS
35 # ifndef CONFIG_CLKIN_HALF
36 #  define CONFIG_VCO_HZ   (CONFIG_CLKIN_HZ * CONFIG_VCO_MULT)
37 # else
38 #  define CONFIG_VCO_HZ   ((CONFIG_CLKIN_HZ * CONFIG_VCO_MULT)/2)
39 # endif
40 
41 # define CONFIG_CCLK_HZ  (CONFIG_VCO_HZ/CONFIG_CCLK_DIV)
42 # define CONFIG_SCLK_HZ  (CONFIG_VCO_HZ/CONFIG_SCLK_DIV)
43 
44 #else
45 # define CONFIG_VCO_HZ   (CONFIG_CLKIN_HZ)
46 # define CONFIG_CCLK_HZ  (CONFIG_CLKIN_HZ)
47 # define CONFIG_SCLK_HZ  (CONFIG_CLKIN_HZ)
48 # define CONFIG_VCO_MULT 0
49 #endif
50 
51 #include <linux/clk.h>
52 
53 struct clk_ops {
54 	unsigned long (*get_rate)(struct clk *clk);
55 	unsigned long (*round_rate)(struct clk *clk, unsigned long rate);
56 	int (*set_rate)(struct clk *clk, unsigned long rate);
57 	int (*enable)(struct clk *clk);
58 	int (*disable)(struct clk *clk);
59 };
60 
61 struct clk {
62 	struct clk		*parent;
63 	const char              *name;
64 	unsigned long           rate;
65 	spinlock_t              lock;
66 	u32                     flags;
67 	const struct clk_ops    *ops;
68 	void __iomem            *reg;
69 	u32                     mask;
70 	u32                     shift;
71 };
72 
73 int clk_init(void);
74 #endif
75