diff options
author | Viresh Kumar <viresh.kumar@st.com> | 2012-04-11 08:34:23 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-05-12 15:19:26 -0400 |
commit | 5335a639ecc5646cbe8e99086fb7e743b801ac58 (patch) | |
tree | 812d38780a2eecf385e5f42a4ee3808aa3a85da3 /drivers/clk/spear/clk.h | |
parent | 55b8fd4f428501b0f35d62b8313311fd9863c188 (diff) |
SPEAr: clk: Add Auxiliary Synthesizer clock
All SPEAr SoC's contain Auxiliary Synthesizers. Their Fout is derived based on
values of eq, x and y.
Fout from synthesizer can be given from two equations:
Fout1 = (Fin * X/Y)/2 EQ1
Fout2 = Fin * X/Y EQ2
This patch adds in support for this type of clock.
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Reviewed-by: Mike Turquette <mturquette@linaro.org>
Diffstat (limited to 'drivers/clk/spear/clk.h')
-rw-r--r-- | drivers/clk/spear/clk.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/clk/spear/clk.h b/drivers/clk/spear/clk.h index 9979b7f7e767..c2290800503a 100644 --- a/drivers/clk/spear/clk.h +++ b/drivers/clk/spear/clk.h | |||
@@ -16,6 +16,45 @@ | |||
16 | #include <linux/spinlock_types.h> | 16 | #include <linux/spinlock_types.h> |
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | 18 | ||
19 | /* Auxiliary Synth clk */ | ||
20 | /* Default masks */ | ||
21 | #define AUX_EQ_SEL_SHIFT 30 | ||
22 | #define AUX_EQ_SEL_MASK 1 | ||
23 | #define AUX_EQ1_SEL 0 | ||
24 | #define AUX_EQ2_SEL 1 | ||
25 | #define AUX_XSCALE_SHIFT 16 | ||
26 | #define AUX_XSCALE_MASK 0xFFF | ||
27 | #define AUX_YSCALE_SHIFT 0 | ||
28 | #define AUX_YSCALE_MASK 0xFFF | ||
29 | #define AUX_SYNT_ENB 31 | ||
30 | |||
31 | struct aux_clk_masks { | ||
32 | u32 eq_sel_mask; | ||
33 | u32 eq_sel_shift; | ||
34 | u32 eq1_mask; | ||
35 | u32 eq2_mask; | ||
36 | u32 xscale_sel_mask; | ||
37 | u32 xscale_sel_shift; | ||
38 | u32 yscale_sel_mask; | ||
39 | u32 yscale_sel_shift; | ||
40 | u32 enable_bit; | ||
41 | }; | ||
42 | |||
43 | struct aux_rate_tbl { | ||
44 | u16 xscale; | ||
45 | u16 yscale; | ||
46 | u8 eq; | ||
47 | }; | ||
48 | |||
49 | struct clk_aux { | ||
50 | struct clk_hw hw; | ||
51 | void __iomem *reg; | ||
52 | struct aux_clk_masks *masks; | ||
53 | struct aux_rate_tbl *rtbl; | ||
54 | u8 rtbl_cnt; | ||
55 | spinlock_t *lock; | ||
56 | }; | ||
57 | |||
19 | /* VCO-PLL clk */ | 58 | /* VCO-PLL clk */ |
20 | struct pll_rate_tbl { | 59 | struct pll_rate_tbl { |
21 | u8 mode; | 60 | u8 mode; |
@@ -44,6 +83,10 @@ typedef unsigned long (*clk_calc_rate)(struct clk_hw *hw, unsigned long prate, | |||
44 | int index); | 83 | int index); |
45 | 84 | ||
46 | /* clk register routines */ | 85 | /* clk register routines */ |
86 | struct clk *clk_register_aux(const char *aux_name, const char *gate_name, | ||
87 | const char *parent_name, unsigned long flags, void __iomem *reg, | ||
88 | struct aux_clk_masks *masks, struct aux_rate_tbl *rtbl, | ||
89 | u8 rtbl_cnt, spinlock_t *lock, struct clk **gate_clk); | ||
47 | struct clk *clk_register_vco_pll(const char *vco_name, const char *pll_name, | 90 | struct clk *clk_register_vco_pll(const char *vco_name, const char *pll_name, |
48 | const char *vco_gate_name, const char *parent_name, | 91 | const char *vco_gate_name, const char *parent_name, |
49 | unsigned long flags, void __iomem *mode_reg, void __iomem | 92 | unsigned long flags, void __iomem *mode_reg, void __iomem |