diff options
Diffstat (limited to 'include/asm-arm/arch-omap/clock.h')
-rw-r--r-- | include/asm-arm/arch-omap/clock.h | 95 |
1 files changed, 83 insertions, 12 deletions
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index fa6881049903..4c7b3514f71a 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
@@ -14,6 +14,47 @@ | |||
14 | #define __ARCH_ARM_OMAP_CLOCK_H | 14 | #define __ARCH_ARM_OMAP_CLOCK_H |
15 | 15 | ||
16 | struct module; | 16 | struct module; |
17 | struct clk; | ||
18 | |||
19 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) | ||
20 | |||
21 | struct clksel_rate { | ||
22 | u8 div; | ||
23 | u32 val; | ||
24 | u8 flags; | ||
25 | }; | ||
26 | |||
27 | struct clksel { | ||
28 | struct clk *parent; | ||
29 | const struct clksel_rate *rates; | ||
30 | }; | ||
31 | |||
32 | struct dpll_data { | ||
33 | void __iomem *mult_div1_reg; | ||
34 | u32 mult_mask; | ||
35 | u32 div1_mask; | ||
36 | u16 last_rounded_m; | ||
37 | u8 last_rounded_n; | ||
38 | unsigned long last_rounded_rate; | ||
39 | unsigned int rate_tolerance; | ||
40 | u16 max_multiplier; | ||
41 | u8 max_divider; | ||
42 | u32 max_tolerance; | ||
43 | # if defined(CONFIG_ARCH_OMAP3) | ||
44 | u8 modes; | ||
45 | void __iomem *control_reg; | ||
46 | u32 enable_mask; | ||
47 | u8 auto_recal_bit; | ||
48 | u8 recal_en_bit; | ||
49 | u8 recal_st_bit; | ||
50 | void __iomem *autoidle_reg; | ||
51 | u32 autoidle_mask; | ||
52 | void __iomem *idlest_reg; | ||
53 | u8 idlest_bit; | ||
54 | # endif | ||
55 | }; | ||
56 | |||
57 | #endif | ||
17 | 58 | ||
18 | struct clk { | 59 | struct clk { |
19 | struct list_head node; | 60 | struct list_head node; |
@@ -25,8 +66,6 @@ struct clk { | |||
25 | __u32 flags; | 66 | __u32 flags; |
26 | void __iomem *enable_reg; | 67 | void __iomem *enable_reg; |
27 | __u8 enable_bit; | 68 | __u8 enable_bit; |
28 | __u8 rate_offset; | ||
29 | __u8 src_offset; | ||
30 | __s8 usecount; | 69 | __s8 usecount; |
31 | void (*recalc)(struct clk *); | 70 | void (*recalc)(struct clk *); |
32 | int (*set_rate)(struct clk *, unsigned long); | 71 | int (*set_rate)(struct clk *, unsigned long); |
@@ -34,8 +73,23 @@ struct clk { | |||
34 | void (*init)(struct clk *); | 73 | void (*init)(struct clk *); |
35 | int (*enable)(struct clk *); | 74 | int (*enable)(struct clk *); |
36 | void (*disable)(struct clk *); | 75 | void (*disable)(struct clk *); |
76 | #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) | ||
77 | u8 fixed_div; | ||
78 | void __iomem *clksel_reg; | ||
79 | u32 clksel_mask; | ||
80 | const struct clksel *clksel; | ||
81 | struct dpll_data *dpll_data; | ||
82 | #else | ||
83 | __u8 rate_offset; | ||
84 | __u8 src_offset; | ||
85 | #endif | ||
86 | #if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) | ||
87 | struct dentry *dent; /* For visible tree hierarchy */ | ||
88 | #endif | ||
37 | }; | 89 | }; |
38 | 90 | ||
91 | struct cpufreq_frequency_table; | ||
92 | |||
39 | struct clk_functions { | 93 | struct clk_functions { |
40 | int (*clk_enable)(struct clk *clk); | 94 | int (*clk_enable)(struct clk *clk); |
41 | void (*clk_disable)(struct clk *clk); | 95 | void (*clk_disable)(struct clk *clk); |
@@ -46,6 +100,9 @@ struct clk_functions { | |||
46 | void (*clk_allow_idle)(struct clk *clk); | 100 | void (*clk_allow_idle)(struct clk *clk); |
47 | void (*clk_deny_idle)(struct clk *clk); | 101 | void (*clk_deny_idle)(struct clk *clk); |
48 | void (*clk_disable_unused)(struct clk *clk); | 102 | void (*clk_disable_unused)(struct clk *clk); |
103 | #ifdef CONFIG_CPU_FREQ | ||
104 | void (*clk_init_cpufreq_table)(struct cpufreq_frequency_table **); | ||
105 | #endif | ||
49 | }; | 106 | }; |
50 | 107 | ||
51 | extern unsigned int mpurate; | 108 | extern unsigned int mpurate; |
@@ -54,10 +111,12 @@ extern int clk_init(struct clk_functions * custom_clocks); | |||
54 | extern int clk_register(struct clk *clk); | 111 | extern int clk_register(struct clk *clk); |
55 | extern void clk_unregister(struct clk *clk); | 112 | extern void clk_unregister(struct clk *clk); |
56 | extern void propagate_rate(struct clk *clk); | 113 | extern void propagate_rate(struct clk *clk); |
114 | extern void recalculate_root_clocks(void); | ||
57 | extern void followparent_recalc(struct clk * clk); | 115 | extern void followparent_recalc(struct clk * clk); |
58 | extern void clk_allow_idle(struct clk *clk); | 116 | extern void clk_allow_idle(struct clk *clk); |
59 | extern void clk_deny_idle(struct clk *clk); | 117 | extern void clk_deny_idle(struct clk *clk); |
60 | extern int clk_get_usecount(struct clk *clk); | 118 | extern int clk_get_usecount(struct clk *clk); |
119 | extern void clk_enable_init_clocks(void); | ||
61 | 120 | ||
62 | /* Clock flags */ | 121 | /* Clock flags */ |
63 | #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ | 122 | #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ |
@@ -71,21 +130,33 @@ extern int clk_get_usecount(struct clk *clk); | |||
71 | #define CLOCK_NO_IDLE_PARENT (1 << 8) | 130 | #define CLOCK_NO_IDLE_PARENT (1 << 8) |
72 | #define DELAYED_APP (1 << 9) /* Delay application of clock */ | 131 | #define DELAYED_APP (1 << 9) /* Delay application of clock */ |
73 | #define CONFIG_PARTICIPANT (1 << 10) /* Fundamental clock */ | 132 | #define CONFIG_PARTICIPANT (1 << 10) /* Fundamental clock */ |
74 | #define CM_MPU_SEL1 (1 << 11) /* Domain divider/source */ | 133 | #define ENABLE_ON_INIT (1 << 11) /* Enable upon framework init */ |
75 | #define CM_DSP_SEL1 (1 << 12) | 134 | #define INVERT_ENABLE (1 << 12) /* 0 enables, 1 disables */ |
76 | #define CM_GFX_SEL1 (1 << 13) | 135 | /* bits 13-20 are currently free */ |
77 | #define CM_MODEM_SEL1 (1 << 14) | ||
78 | #define CM_CORE_SEL1 (1 << 15) /* Sets divider for many */ | ||
79 | #define CM_CORE_SEL2 (1 << 16) /* sets parent for GPT */ | ||
80 | #define CM_WKUP_SEL1 (1 << 17) | ||
81 | #define CM_PLL_SEL1 (1 << 18) | ||
82 | #define CM_PLL_SEL2 (1 << 19) | ||
83 | #define CM_SYSCLKOUT_SEL1 (1 << 20) | ||
84 | #define CLOCK_IN_OMAP310 (1 << 21) | 136 | #define CLOCK_IN_OMAP310 (1 << 21) |
85 | #define CLOCK_IN_OMAP730 (1 << 22) | 137 | #define CLOCK_IN_OMAP730 (1 << 22) |
86 | #define CLOCK_IN_OMAP1510 (1 << 23) | 138 | #define CLOCK_IN_OMAP1510 (1 << 23) |
87 | #define CLOCK_IN_OMAP16XX (1 << 24) | 139 | #define CLOCK_IN_OMAP16XX (1 << 24) |
88 | #define CLOCK_IN_OMAP242X (1 << 25) | 140 | #define CLOCK_IN_OMAP242X (1 << 25) |
89 | #define CLOCK_IN_OMAP243X (1 << 26) | 141 | #define CLOCK_IN_OMAP243X (1 << 26) |
142 | #define CLOCK_IN_OMAP343X (1 << 27) /* clocks common to all 343X */ | ||
143 | #define PARENT_CONTROLS_CLOCK (1 << 28) | ||
144 | #define CLOCK_IN_OMAP3430ES1 (1 << 29) /* 3430ES1 clocks only */ | ||
145 | #define CLOCK_IN_OMAP3430ES2 (1 << 30) /* 3430ES2 clocks only */ | ||
146 | |||
147 | /* Clksel_rate flags */ | ||
148 | #define DEFAULT_RATE (1 << 0) | ||
149 | #define RATE_IN_242X (1 << 1) | ||
150 | #define RATE_IN_243X (1 << 2) | ||
151 | #define RATE_IN_343X (1 << 3) /* rates common to all 343X */ | ||
152 | #define RATE_IN_3430ES2 (1 << 4) /* 3430ES2 rates only */ | ||
153 | |||
154 | #define RATE_IN_24XX (RATE_IN_242X | RATE_IN_243X) | ||
155 | |||
156 | |||
157 | /* CM_CLKSEL2_PLL.CORE_CLK_SRC options (24XX) */ | ||
158 | #define CORE_CLK_SRC_32K 0 | ||
159 | #define CORE_CLK_SRC_DPLL 1 | ||
160 | #define CORE_CLK_SRC_DPLL_X2 2 | ||
90 | 161 | ||
91 | #endif | 162 | #endif |