Linux 3.12.28
[linux/fpc-iii.git] / arch / blackfin / include / asm / clocks.h
blob9b3c85b3c28836629832f65c30242366a421a9e3
1 /*
2 * Common Clock definitions for various kernel files
4 * Copyright 2007-2008 Analog Devices Inc.
6 * Licensed under the GPL-2 or later.
7 */
9 #ifndef _BFIN_CLOCKS_H
10 #define _BFIN_CLOCKS_H
12 #include <asm/dpmc.h>
14 #ifdef CONFIG_CCLK_DIV_1
15 # define CONFIG_CCLK_ACT_DIV CCLK_DIV1
16 # define CONFIG_CCLK_DIV 1
17 #endif
19 #ifdef CONFIG_CCLK_DIV_2
20 # define CONFIG_CCLK_ACT_DIV CCLK_DIV2
21 # define CONFIG_CCLK_DIV 2
22 #endif
24 #ifdef CONFIG_CCLK_DIV_4
25 # define CONFIG_CCLK_ACT_DIV CCLK_DIV4
26 # define CONFIG_CCLK_DIV 4
27 #endif
29 #ifdef CONFIG_CCLK_DIV_8
30 # define CONFIG_CCLK_ACT_DIV CCLK_DIV8
31 # define CONFIG_CCLK_DIV 8
32 #endif
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
41 # define CONFIG_CCLK_HZ (CONFIG_VCO_HZ/CONFIG_CCLK_DIV)
42 # define CONFIG_SCLK_HZ (CONFIG_VCO_HZ/CONFIG_SCLK_DIV)
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
51 #include <linux/clk.h>
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);
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;
73 int clk_init(void);
74 #endif