diff options
-rw-r--r-- | arch/arm/mach-omap2/clock34xx.c | 299 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock34xx.h | 83 | ||||
-rw-r--r-- | arch/arm/mach-omap2/cm-regbits-34xx.h | 18 | ||||
-rw-r--r-- | arch/arm/mach-omap2/cm.h | 1 | ||||
-rw-r--r-- | include/asm-arm/arch-omap/clock.h | 5 |
5 files changed, 376 insertions, 30 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c index b42bdd6079a5..4263099b1ad3 100644 --- a/arch/arm/mach-omap2/clock34xx.c +++ b/arch/arm/mach-omap2/clock34xx.c | |||
@@ -1,10 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * OMAP3-specific clock framework functions | 2 | * OMAP3-specific clock framework functions |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Texas Instruments, Inc. | 4 | * Copyright (C) 2007-2008 Texas Instruments, Inc. |
5 | * Copyright (C) 2007 Nokia Corporation | 5 | * Copyright (C) 2007-2008 Nokia Corporation |
6 | * | 6 | * |
7 | * Written by Paul Walmsley | 7 | * Written by Paul Walmsley |
8 | * Testing and integration fixes by Jouni Högander | ||
8 | * | 9 | * |
9 | * Parts of this code are based on code written by | 10 | * Parts of this code are based on code written by |
10 | * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu | 11 | * Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu |
@@ -23,6 +24,7 @@ | |||
23 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
24 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
25 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | #include <linux/limits.h> | ||
26 | 28 | ||
27 | #include <asm/arch/clock.h> | 29 | #include <asm/arch/clock.h> |
28 | #include <asm/arch/sram.h> | 30 | #include <asm/arch/sram.h> |
@@ -37,8 +39,11 @@ | |||
37 | #include "cm.h" | 39 | #include "cm.h" |
38 | #include "cm-regbits-34xx.h" | 40 | #include "cm-regbits-34xx.h" |
39 | 41 | ||
40 | /* CM_CLKEN_PLL*.EN* bit values */ | 42 | /* CM_AUTOIDLE_PLL*.AUTO_* bit values */ |
41 | #define DPLL_LOCKED 0x7 | 43 | #define DPLL_AUTOIDLE_DISABLE 0x0 |
44 | #define DPLL_AUTOIDLE_LOW_POWER_STOP 0x1 | ||
45 | |||
46 | #define MAX_DPLL_WAIT_TRIES 1000000 | ||
42 | 47 | ||
43 | /** | 48 | /** |
44 | * omap3_dpll_recalc - recalculate DPLL rate | 49 | * omap3_dpll_recalc - recalculate DPLL rate |
@@ -53,6 +58,290 @@ static void omap3_dpll_recalc(struct clk *clk) | |||
53 | propagate_rate(clk); | 58 | propagate_rate(clk); |
54 | } | 59 | } |
55 | 60 | ||
61 | /* _omap3_dpll_write_clken - write clken_bits arg to a DPLL's enable bits */ | ||
62 | static void _omap3_dpll_write_clken(struct clk *clk, u8 clken_bits) | ||
63 | { | ||
64 | const struct dpll_data *dd; | ||
65 | |||
66 | dd = clk->dpll_data; | ||
67 | |||
68 | cm_rmw_reg_bits(dd->enable_mask, clken_bits << __ffs(dd->enable_mask), | ||
69 | dd->control_reg); | ||
70 | } | ||
71 | |||
72 | /* _omap3_wait_dpll_status: wait for a DPLL to enter a specific state */ | ||
73 | static int _omap3_wait_dpll_status(struct clk *clk, u8 state) | ||
74 | { | ||
75 | const struct dpll_data *dd; | ||
76 | int i = 0; | ||
77 | int ret = -EINVAL; | ||
78 | u32 idlest_mask; | ||
79 | |||
80 | dd = clk->dpll_data; | ||
81 | |||
82 | state <<= dd->idlest_bit; | ||
83 | idlest_mask = 1 << dd->idlest_bit; | ||
84 | |||
85 | while (((cm_read_reg(dd->idlest_reg) & idlest_mask) != state) && | ||
86 | i < MAX_DPLL_WAIT_TRIES) { | ||
87 | i++; | ||
88 | udelay(1); | ||
89 | } | ||
90 | |||
91 | if (i == MAX_DPLL_WAIT_TRIES) { | ||
92 | printk(KERN_ERR "clock: %s failed transition to '%s'\n", | ||
93 | clk->name, (state) ? "locked" : "bypassed"); | ||
94 | } else { | ||
95 | pr_debug("clock: %s transition to '%s' in %d loops\n", | ||
96 | clk->name, (state) ? "locked" : "bypassed", i); | ||
97 | |||
98 | ret = 0; | ||
99 | } | ||
100 | |||
101 | return ret; | ||
102 | } | ||
103 | |||
104 | /* Non-CORE DPLL (e.g., DPLLs that do not control SDRC) clock functions */ | ||
105 | |||
106 | /* | ||
107 | * _omap3_noncore_dpll_lock - instruct a DPLL to lock and wait for readiness | ||
108 | * @clk: pointer to a DPLL struct clk | ||
109 | * | ||
110 | * Instructs a non-CORE DPLL to lock. Waits for the DPLL to report | ||
111 | * readiness before returning. Will save and restore the DPLL's | ||
112 | * autoidle state across the enable, per the CDP code. If the DPLL | ||
113 | * locked successfully, return 0; if the DPLL did not lock in the time | ||
114 | * allotted, or DPLL3 was passed in, return -EINVAL. | ||
115 | */ | ||
116 | static int _omap3_noncore_dpll_lock(struct clk *clk) | ||
117 | { | ||
118 | u8 ai; | ||
119 | int r; | ||
120 | |||
121 | if (clk == &dpll3_ck) | ||
122 | return -EINVAL; | ||
123 | |||
124 | pr_debug("clock: locking DPLL %s\n", clk->name); | ||
125 | |||
126 | ai = omap3_dpll_autoidle_read(clk); | ||
127 | |||
128 | _omap3_dpll_write_clken(clk, DPLL_LOCKED); | ||
129 | |||
130 | if (ai) { | ||
131 | /* | ||
132 | * If no downstream clocks are enabled, CM_IDLEST bit | ||
133 | * may never become active, so don't wait for DPLL to lock. | ||
134 | */ | ||
135 | r = 0; | ||
136 | omap3_dpll_allow_idle(clk); | ||
137 | } else { | ||
138 | r = _omap3_wait_dpll_status(clk, 1); | ||
139 | omap3_dpll_deny_idle(clk); | ||
140 | }; | ||
141 | |||
142 | return r; | ||
143 | } | ||
144 | |||
145 | /* | ||
146 | * omap3_noncore_dpll_bypass - instruct a DPLL to bypass and wait for readiness | ||
147 | * @clk: pointer to a DPLL struct clk | ||
148 | * | ||
149 | * Instructs a non-CORE DPLL to enter low-power bypass mode. In | ||
150 | * bypass mode, the DPLL's rate is set equal to its parent clock's | ||
151 | * rate. Waits for the DPLL to report readiness before returning. | ||
152 | * Will save and restore the DPLL's autoidle state across the enable, | ||
153 | * per the CDP code. If the DPLL entered bypass mode successfully, | ||
154 | * return 0; if the DPLL did not enter bypass in the time allotted, or | ||
155 | * DPLL3 was passed in, or the DPLL does not support low-power bypass, | ||
156 | * return -EINVAL. | ||
157 | */ | ||
158 | static int _omap3_noncore_dpll_bypass(struct clk *clk) | ||
159 | { | ||
160 | int r; | ||
161 | u8 ai; | ||
162 | |||
163 | if (clk == &dpll3_ck) | ||
164 | return -EINVAL; | ||
165 | |||
166 | if (!(clk->dpll_data->modes & (1 << DPLL_LOW_POWER_BYPASS))) | ||
167 | return -EINVAL; | ||
168 | |||
169 | pr_debug("clock: configuring DPLL %s for low-power bypass\n", | ||
170 | clk->name); | ||
171 | |||
172 | ai = omap3_dpll_autoidle_read(clk); | ||
173 | |||
174 | _omap3_dpll_write_clken(clk, DPLL_LOW_POWER_BYPASS); | ||
175 | |||
176 | r = _omap3_wait_dpll_status(clk, 0); | ||
177 | |||
178 | if (ai) | ||
179 | omap3_dpll_allow_idle(clk); | ||
180 | else | ||
181 | omap3_dpll_deny_idle(clk); | ||
182 | |||
183 | return r; | ||
184 | } | ||
185 | |||
186 | /* | ||
187 | * _omap3_noncore_dpll_stop - instruct a DPLL to stop | ||
188 | * @clk: pointer to a DPLL struct clk | ||
189 | * | ||
190 | * Instructs a non-CORE DPLL to enter low-power stop. Will save and | ||
191 | * restore the DPLL's autoidle state across the stop, per the CDP | ||
192 | * code. If DPLL3 was passed in, or the DPLL does not support | ||
193 | * low-power stop, return -EINVAL; otherwise, return 0. | ||
194 | */ | ||
195 | static int _omap3_noncore_dpll_stop(struct clk *clk) | ||
196 | { | ||
197 | u8 ai; | ||
198 | |||
199 | if (clk == &dpll3_ck) | ||
200 | return -EINVAL; | ||
201 | |||
202 | if (!(clk->dpll_data->modes & (1 << DPLL_LOW_POWER_STOP))) | ||
203 | return -EINVAL; | ||
204 | |||
205 | pr_debug("clock: stopping DPLL %s\n", clk->name); | ||
206 | |||
207 | ai = omap3_dpll_autoidle_read(clk); | ||
208 | |||
209 | _omap3_dpll_write_clken(clk, DPLL_LOW_POWER_STOP); | ||
210 | |||
211 | if (ai) | ||
212 | omap3_dpll_allow_idle(clk); | ||
213 | else | ||
214 | omap3_dpll_deny_idle(clk); | ||
215 | |||
216 | return 0; | ||
217 | } | ||
218 | |||
219 | /** | ||
220 | * omap3_noncore_dpll_enable - instruct a DPLL to enter bypass or lock mode | ||
221 | * @clk: pointer to a DPLL struct clk | ||
222 | * | ||
223 | * Instructs a non-CORE DPLL to enable, e.g., to enter bypass or lock. | ||
224 | * The choice of modes depends on the DPLL's programmed rate: if it is | ||
225 | * the same as the DPLL's parent clock, it will enter bypass; | ||
226 | * otherwise, it will enter lock. This code will wait for the DPLL to | ||
227 | * indicate readiness before returning, unless the DPLL takes too long | ||
228 | * to enter the target state. Intended to be used as the struct clk's | ||
229 | * enable function. If DPLL3 was passed in, or the DPLL does not | ||
230 | * support low-power stop, or if the DPLL took too long to enter | ||
231 | * bypass or lock, return -EINVAL; otherwise, return 0. | ||
232 | */ | ||
233 | static int omap3_noncore_dpll_enable(struct clk *clk) | ||
234 | { | ||
235 | int r; | ||
236 | |||
237 | if (clk == &dpll3_ck) | ||
238 | return -EINVAL; | ||
239 | |||
240 | if (clk->parent->rate == clk_get_rate(clk)) | ||
241 | r = _omap3_noncore_dpll_bypass(clk); | ||
242 | else | ||
243 | r = _omap3_noncore_dpll_lock(clk); | ||
244 | |||
245 | return r; | ||
246 | } | ||
247 | |||
248 | /** | ||
249 | * omap3_noncore_dpll_enable - instruct a DPLL to enter bypass or lock mode | ||
250 | * @clk: pointer to a DPLL struct clk | ||
251 | * | ||
252 | * Instructs a non-CORE DPLL to enable, e.g., to enter bypass or lock. | ||
253 | * The choice of modes depends on the DPLL's programmed rate: if it is | ||
254 | * the same as the DPLL's parent clock, it will enter bypass; | ||
255 | * otherwise, it will enter lock. This code will wait for the DPLL to | ||
256 | * indicate readiness before returning, unless the DPLL takes too long | ||
257 | * to enter the target state. Intended to be used as the struct clk's | ||
258 | * enable function. If DPLL3 was passed in, or the DPLL does not | ||
259 | * support low-power stop, or if the DPLL took too long to enter | ||
260 | * bypass or lock, return -EINVAL; otherwise, return 0. | ||
261 | */ | ||
262 | static void omap3_noncore_dpll_disable(struct clk *clk) | ||
263 | { | ||
264 | if (clk == &dpll3_ck) | ||
265 | return; | ||
266 | |||
267 | _omap3_noncore_dpll_stop(clk); | ||
268 | } | ||
269 | |||
270 | /** | ||
271 | * omap3_dpll_autoidle_read - read a DPLL's autoidle bits | ||
272 | * @clk: struct clk * of the DPLL to read | ||
273 | * | ||
274 | * Return the DPLL's autoidle bits, shifted down to bit 0. Returns | ||
275 | * -EINVAL if passed a null pointer or if the struct clk does not | ||
276 | * appear to refer to a DPLL. | ||
277 | */ | ||
278 | static u32 omap3_dpll_autoidle_read(struct clk *clk) | ||
279 | { | ||
280 | const struct dpll_data *dd; | ||
281 | u32 v; | ||
282 | |||
283 | if (!clk || !clk->dpll_data) | ||
284 | return -EINVAL; | ||
285 | |||
286 | dd = clk->dpll_data; | ||
287 | |||
288 | v = cm_read_reg(dd->autoidle_reg); | ||
289 | v &= dd->autoidle_mask; | ||
290 | v >>= __ffs(dd->autoidle_mask); | ||
291 | |||
292 | return v; | ||
293 | } | ||
294 | |||
295 | /** | ||
296 | * omap3_dpll_allow_idle - enable DPLL autoidle bits | ||
297 | * @clk: struct clk * of the DPLL to operate on | ||
298 | * | ||
299 | * Enable DPLL automatic idle control. This automatic idle mode | ||
300 | * switching takes effect only when the DPLL is locked, at least on | ||
301 | * OMAP3430. The DPLL will enter low-power stop when its downstream | ||
302 | * clocks are gated. No return value. | ||
303 | */ | ||
304 | static void omap3_dpll_allow_idle(struct clk *clk) | ||
305 | { | ||
306 | const struct dpll_data *dd; | ||
307 | |||
308 | if (!clk || !clk->dpll_data) | ||
309 | return; | ||
310 | |||
311 | dd = clk->dpll_data; | ||
312 | |||
313 | /* | ||
314 | * REVISIT: CORE DPLL can optionally enter low-power bypass | ||
315 | * by writing 0x5 instead of 0x1. Add some mechanism to | ||
316 | * optionally enter this mode. | ||
317 | */ | ||
318 | cm_rmw_reg_bits(dd->autoidle_mask, | ||
319 | DPLL_AUTOIDLE_LOW_POWER_STOP << __ffs(dd->autoidle_mask), | ||
320 | dd->autoidle_reg); | ||
321 | } | ||
322 | |||
323 | /** | ||
324 | * omap3_dpll_deny_idle - prevent DPLL from automatically idling | ||
325 | * @clk: struct clk * of the DPLL to operate on | ||
326 | * | ||
327 | * Disable DPLL automatic idle control. No return value. | ||
328 | */ | ||
329 | static void omap3_dpll_deny_idle(struct clk *clk) | ||
330 | { | ||
331 | const struct dpll_data *dd; | ||
332 | |||
333 | if (!clk || !clk->dpll_data) | ||
334 | return; | ||
335 | |||
336 | dd = clk->dpll_data; | ||
337 | |||
338 | cm_rmw_reg_bits(dd->autoidle_mask, | ||
339 | DPLL_AUTOIDLE_DISABLE << __ffs(dd->autoidle_mask), | ||
340 | dd->autoidle_reg); | ||
341 | } | ||
342 | |||
343 | /* Clock control for DPLL outputs */ | ||
344 | |||
56 | /** | 345 | /** |
57 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate | 346 | * omap3_clkoutx2_recalc - recalculate DPLL X2 output virtual clock rate |
58 | * @clk: DPLL output struct clk | 347 | * @clk: DPLL output struct clk |
@@ -89,6 +378,8 @@ static void omap3_clkoutx2_recalc(struct clk *clk) | |||
89 | propagate_rate(clk); | 378 | propagate_rate(clk); |
90 | } | 379 | } |
91 | 380 | ||
381 | /* Common clock code */ | ||
382 | |||
92 | /* | 383 | /* |
93 | * As it is structured now, this will prevent an OMAP2/3 multiboot | 384 | * As it is structured now, this will prevent an OMAP2/3 multiboot |
94 | * kernel from compiling. This will need further attention. | 385 | * kernel from compiling. This will need further attention. |
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h index 73624dc04c97..e349d48ee807 100644 --- a/arch/arm/mach-omap2/clock34xx.h +++ b/arch/arm/mach-omap2/clock34xx.h | |||
@@ -1,14 +1,19 @@ | |||
1 | /* | 1 | /* |
2 | * OMAP3 clock framework | 2 | * OMAP3 clock framework |
3 | * | 3 | * |
4 | * Virtual clocks are introduced as a convenient tools. | ||
5 | * They are sources for other clocks and not supposed | ||
6 | * to be requested from drivers directly. | ||
7 | * | ||
8 | * Copyright (C) 2007-2008 Texas Instruments, Inc. | 4 | * Copyright (C) 2007-2008 Texas Instruments, Inc. |
9 | * Copyright (C) 2007-2008 Nokia Corporation | 5 | * Copyright (C) 2007-2008 Nokia Corporation |
10 | * | 6 | * |
11 | * Written by Paul Walmsley | 7 | * Written by Paul Walmsley |
8 | * With many device clock fixes by Kevin Hilman and Jouni Högander | ||
9 | * DPLL bypass clock support added by Roman Tereshonkov | ||
10 | * | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * Virtual clocks are introduced as convenient tools. | ||
15 | * They are sources for other clocks and not supposed | ||
16 | * to be requested from drivers directly. | ||
12 | */ | 17 | */ |
13 | 18 | ||
14 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H | 19 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H |
@@ -24,6 +29,11 @@ | |||
24 | 29 | ||
25 | static void omap3_dpll_recalc(struct clk *clk); | 30 | static void omap3_dpll_recalc(struct clk *clk); |
26 | static void omap3_clkoutx2_recalc(struct clk *clk); | 31 | static void omap3_clkoutx2_recalc(struct clk *clk); |
32 | static void omap3_dpll_allow_idle(struct clk *clk); | ||
33 | static void omap3_dpll_deny_idle(struct clk *clk); | ||
34 | static u32 omap3_dpll_autoidle_read(struct clk *clk); | ||
35 | static int omap3_noncore_dpll_enable(struct clk *clk); | ||
36 | static void omap3_noncore_dpll_disable(struct clk *clk); | ||
27 | 37 | ||
28 | /* | 38 | /* |
29 | * DPLL1 supplies clock to the MPU. | 39 | * DPLL1 supplies clock to the MPU. |
@@ -33,6 +43,11 @@ static void omap3_clkoutx2_recalc(struct clk *clk); | |||
33 | * DPLL5 supplies other peripheral clocks (USBHOST, USIM). | 43 | * DPLL5 supplies other peripheral clocks (USBHOST, USIM). |
34 | */ | 44 | */ |
35 | 45 | ||
46 | /* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */ | ||
47 | #define DPLL_LOW_POWER_STOP 0x1 | ||
48 | #define DPLL_LOW_POWER_BYPASS 0x5 | ||
49 | #define DPLL_LOCKED 0x7 | ||
50 | |||
36 | /* PRM CLOCKS */ | 51 | /* PRM CLOCKS */ |
37 | 52 | ||
38 | /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */ | 53 | /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */ |
@@ -246,9 +261,14 @@ static const struct dpll_data dpll1_dd = { | |||
246 | .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK, | 261 | .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK, |
247 | .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL), | 262 | .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL), |
248 | .enable_mask = OMAP3430_EN_MPU_DPLL_MASK, | 263 | .enable_mask = OMAP3430_EN_MPU_DPLL_MASK, |
264 | .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), | ||
249 | .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT, | 265 | .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT, |
250 | .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT, | 266 | .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT, |
251 | .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT, | 267 | .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT, |
268 | .autoidle_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL), | ||
269 | .autoidle_mask = OMAP3430_AUTO_MPU_DPLL_MASK, | ||
270 | .idlest_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL), | ||
271 | .idlest_bit = OMAP3430_ST_MPU_CLK_SHIFT, | ||
252 | }; | 272 | }; |
253 | 273 | ||
254 | static struct clk dpll1_ck = { | 274 | static struct clk dpll1_ck = { |
@@ -303,16 +323,24 @@ static const struct dpll_data dpll2_dd = { | |||
303 | .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK, | 323 | .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK, |
304 | .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL), | 324 | .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL), |
305 | .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK, | 325 | .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK, |
326 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED) | | ||
327 | (1 << DPLL_LOW_POWER_BYPASS), | ||
306 | .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT, | 328 | .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT, |
307 | .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT, | 329 | .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT, |
308 | .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT, | 330 | .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT, |
331 | .autoidle_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL), | ||
332 | .autoidle_mask = OMAP3430_AUTO_IVA2_DPLL_MASK, | ||
333 | .idlest_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_IDLEST_PLL), | ||
334 | .idlest_bit = OMAP3430_ST_IVA2_CLK_SHIFT | ||
309 | }; | 335 | }; |
310 | 336 | ||
311 | static struct clk dpll2_ck = { | 337 | static struct clk dpll2_ck = { |
312 | .name = "dpll2_ck", | 338 | .name = "dpll2_ck", |
313 | .parent = &sys_ck, | 339 | .parent = &sys_ck, |
314 | .dpll_data = &dpll2_dd, | 340 | .dpll_data = &dpll2_dd, |
315 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED, | 341 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES, |
342 | .enable = &omap3_noncore_dpll_enable, | ||
343 | .disable = &omap3_noncore_dpll_disable, | ||
316 | .recalc = &omap3_dpll_recalc, | 344 | .recalc = &omap3_dpll_recalc, |
317 | }; | 345 | }; |
318 | 346 | ||
@@ -338,9 +366,11 @@ static struct clk dpll2_m2_ck = { | |||
338 | .recalc = &omap2_clksel_recalc, | 366 | .recalc = &omap2_clksel_recalc, |
339 | }; | 367 | }; |
340 | 368 | ||
341 | /* DPLL3 */ | 369 | /* |
342 | /* Source clock for all interfaces and for some device fclks */ | 370 | * DPLL3 |
343 | /* Type: DPLL */ | 371 | * Source clock for all interfaces and for some device fclks |
372 | * REVISIT: Also supports fast relock bypass - not included below | ||
373 | */ | ||
344 | static const struct dpll_data dpll3_dd = { | 374 | static const struct dpll_data dpll3_dd = { |
345 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), | 375 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), |
346 | .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK, | 376 | .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK, |
@@ -350,6 +380,8 @@ static const struct dpll_data dpll3_dd = { | |||
350 | .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT, | 380 | .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT, |
351 | .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT, | 381 | .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT, |
352 | .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT, | 382 | .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT, |
383 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE), | ||
384 | .autoidle_mask = OMAP3430_AUTO_CORE_DPLL_MASK, | ||
353 | }; | 385 | }; |
354 | 386 | ||
355 | static struct clk dpll3_ck = { | 387 | static struct clk dpll3_ck = { |
@@ -439,7 +471,7 @@ static struct clk core_ck = { | |||
439 | .name = "core_ck", | 471 | .name = "core_ck", |
440 | .init = &omap2_init_clksel_parent, | 472 | .init = &omap2_init_clksel_parent, |
441 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 473 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
442 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 474 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
443 | .clksel = core_ck_clksel, | 475 | .clksel = core_ck_clksel, |
444 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 476 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
445 | PARENT_CONTROLS_CLOCK, | 477 | PARENT_CONTROLS_CLOCK, |
@@ -456,7 +488,7 @@ static struct clk dpll3_m2x2_ck = { | |||
456 | .name = "dpll3_m2x2_ck", | 488 | .name = "dpll3_m2x2_ck", |
457 | .init = &omap2_init_clksel_parent, | 489 | .init = &omap2_init_clksel_parent, |
458 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 490 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
459 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 491 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
460 | .clksel = dpll3_m2x2_ck_clksel, | 492 | .clksel = dpll3_m2x2_ck_clksel, |
461 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 493 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
462 | PARENT_CONTROLS_CLOCK, | 494 | PARENT_CONTROLS_CLOCK, |
@@ -503,7 +535,7 @@ static struct clk emu_core_alwon_ck = { | |||
503 | .parent = &dpll3_m3x2_ck, | 535 | .parent = &dpll3_m3x2_ck, |
504 | .init = &omap2_init_clksel_parent, | 536 | .init = &omap2_init_clksel_parent, |
505 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 537 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
506 | .clksel_mask = OMAP3430_ST_CORE_CLK, | 538 | .clksel_mask = OMAP3430_ST_CORE_CLK_MASK, |
507 | .clksel = emu_core_alwon_ck_clksel, | 539 | .clksel = emu_core_alwon_ck_clksel, |
508 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 540 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
509 | PARENT_CONTROLS_CLOCK, | 541 | PARENT_CONTROLS_CLOCK, |
@@ -519,16 +551,23 @@ static const struct dpll_data dpll4_dd = { | |||
519 | .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK, | 551 | .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK, |
520 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), | 552 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), |
521 | .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK, | 553 | .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK, |
554 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED), | ||
522 | .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT, | 555 | .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT, |
523 | .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT, | 556 | .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT, |
524 | .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT, | 557 | .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT, |
558 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE), | ||
559 | .autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK, | ||
560 | .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | ||
561 | .idlest_bit = OMAP3430_ST_PERIPH_CLK_SHIFT, | ||
525 | }; | 562 | }; |
526 | 563 | ||
527 | static struct clk dpll4_ck = { | 564 | static struct clk dpll4_ck = { |
528 | .name = "dpll4_ck", | 565 | .name = "dpll4_ck", |
529 | .parent = &sys_ck, | 566 | .parent = &sys_ck, |
530 | .dpll_data = &dpll4_dd, | 567 | .dpll_data = &dpll4_dd, |
531 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED, | 568 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES, |
569 | .enable = &omap3_noncore_dpll_enable, | ||
570 | .disable = &omap3_noncore_dpll_disable, | ||
532 | .recalc = &omap3_dpll_recalc, | 571 | .recalc = &omap3_dpll_recalc, |
533 | }; | 572 | }; |
534 | 573 | ||
@@ -584,7 +623,7 @@ static struct clk omap_96m_alwon_fck = { | |||
584 | .parent = &dpll4_m2x2_ck, | 623 | .parent = &dpll4_m2x2_ck, |
585 | .init = &omap2_init_clksel_parent, | 624 | .init = &omap2_init_clksel_parent, |
586 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 625 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
587 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 626 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
588 | .clksel = omap_96m_alwon_fck_clksel, | 627 | .clksel = omap_96m_alwon_fck_clksel, |
589 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 628 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
590 | PARENT_CONTROLS_CLOCK, | 629 | PARENT_CONTROLS_CLOCK, |
@@ -610,7 +649,7 @@ static struct clk cm_96m_fck = { | |||
610 | .parent = &dpll4_m2x2_ck, | 649 | .parent = &dpll4_m2x2_ck, |
611 | .init = &omap2_init_clksel_parent, | 650 | .init = &omap2_init_clksel_parent, |
612 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 651 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
613 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 652 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
614 | .clksel = cm_96m_fck_clksel, | 653 | .clksel = cm_96m_fck_clksel, |
615 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 654 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
616 | PARENT_CONTROLS_CLOCK, | 655 | PARENT_CONTROLS_CLOCK, |
@@ -652,7 +691,7 @@ static struct clk virt_omap_54m_fck = { | |||
652 | .parent = &dpll4_m3x2_ck, | 691 | .parent = &dpll4_m3x2_ck, |
653 | .init = &omap2_init_clksel_parent, | 692 | .init = &omap2_init_clksel_parent, |
654 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 693 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
655 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 694 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
656 | .clksel = virt_omap_54m_fck_clksel, | 695 | .clksel = virt_omap_54m_fck_clksel, |
657 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | | 696 | .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | |
658 | PARENT_CONTROLS_CLOCK, | 697 | PARENT_CONTROLS_CLOCK, |
@@ -810,17 +849,23 @@ static const struct dpll_data dpll5_dd = { | |||
810 | .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK, | 849 | .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK, |
811 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2), | 850 | .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2), |
812 | .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK, | 851 | .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK, |
852 | .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED), | ||
813 | .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT, | 853 | .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT, |
814 | .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT, | 854 | .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT, |
815 | .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT, | 855 | .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT, |
856 | .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_AUTOIDLE2_PLL), | ||
857 | .autoidle_mask = OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK, | ||
858 | .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2), | ||
859 | .idlest_bit = OMAP3430ES2_ST_PERIPH2_CLK_SHIFT, | ||
816 | }; | 860 | }; |
817 | 861 | ||
818 | static struct clk dpll5_ck = { | 862 | static struct clk dpll5_ck = { |
819 | .name = "dpll5_ck", | 863 | .name = "dpll5_ck", |
820 | .parent = &sys_ck, | 864 | .parent = &sys_ck, |
821 | .dpll_data = &dpll5_dd, | 865 | .dpll_data = &dpll5_dd, |
822 | .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES | | 866 | .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES, |
823 | ALWAYS_ENABLED, | 867 | .enable = &omap3_noncore_dpll_enable, |
868 | .disable = &omap3_noncore_dpll_disable, | ||
824 | .recalc = &omap3_dpll_recalc, | 869 | .recalc = &omap3_dpll_recalc, |
825 | }; | 870 | }; |
826 | 871 | ||
@@ -1939,7 +1984,7 @@ static struct clk dss1_alwon_fck = { | |||
1939 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN), | 1984 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN), |
1940 | .enable_bit = OMAP3430_EN_DSS1_SHIFT, | 1985 | .enable_bit = OMAP3430_EN_DSS1_SHIFT, |
1941 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 1986 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
1942 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 1987 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
1943 | .clksel = dss1_alwon_fck_clksel, | 1988 | .clksel = dss1_alwon_fck_clksel, |
1944 | .flags = CLOCK_IN_OMAP343X, | 1989 | .flags = CLOCK_IN_OMAP343X, |
1945 | .recalc = &omap2_clksel_recalc, | 1990 | .recalc = &omap2_clksel_recalc, |
@@ -1995,7 +2040,7 @@ static struct clk cam_mclk = { | |||
1995 | .parent = &dpll4_m5x2_ck, | 2040 | .parent = &dpll4_m5x2_ck, |
1996 | .init = &omap2_init_clksel_parent, | 2041 | .init = &omap2_init_clksel_parent, |
1997 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), | 2042 | .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), |
1998 | .clksel_mask = OMAP3430_ST_PERIPH_CLK, | 2043 | .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK, |
1999 | .clksel = cam_mclk_clksel, | 2044 | .clksel = cam_mclk_clksel, |
2000 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN), | 2045 | .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN), |
2001 | .enable_bit = OMAP3430_EN_CAM_SHIFT, | 2046 | .enable_bit = OMAP3430_EN_CAM_SHIFT, |
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h index 3c38395f6442..ee4c0ca1a708 100644 --- a/arch/arm/mach-omap2/cm-regbits-34xx.h +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h | |||
@@ -72,7 +72,8 @@ | |||
72 | #define OMAP3430_ST_IVA2 (1 << 0) | 72 | #define OMAP3430_ST_IVA2 (1 << 0) |
73 | 73 | ||
74 | /* CM_IDLEST_PLL_IVA2 */ | 74 | /* CM_IDLEST_PLL_IVA2 */ |
75 | #define OMAP3430_ST_IVA2_CLK (1 << 0) | 75 | #define OMAP3430_ST_IVA2_CLK_SHIFT 0 |
76 | #define OMAP3430_ST_IVA2_CLK_MASK (1 << 0) | ||
76 | 77 | ||
77 | /* CM_AUTOIDLE_PLL_IVA2 */ | 78 | /* CM_AUTOIDLE_PLL_IVA2 */ |
78 | #define OMAP3430_AUTO_IVA2_DPLL_SHIFT 0 | 79 | #define OMAP3430_AUTO_IVA2_DPLL_SHIFT 0 |
@@ -115,10 +116,7 @@ | |||
115 | #define OMAP3430_ST_MPU (1 << 0) | 116 | #define OMAP3430_ST_MPU (1 << 0) |
116 | 117 | ||
117 | /* CM_IDLEST_PLL_MPU */ | 118 | /* CM_IDLEST_PLL_MPU */ |
118 | #define OMAP3430_ST_MPU_CLK (1 << 0) | 119 | #define OMAP3430_ST_MPU_CLK_SHIFT 0 |
119 | #define OMAP3430_ST_IVA2_CLK_MASK (1 << 0) | ||
120 | |||
121 | /* CM_IDLEST_PLL_MPU */ | ||
122 | #define OMAP3430_ST_MPU_CLK_MASK (1 << 0) | 120 | #define OMAP3430_ST_MPU_CLK_MASK (1 << 0) |
123 | 121 | ||
124 | /* CM_AUTOIDLE_PLL_MPU */ | 122 | /* CM_AUTOIDLE_PLL_MPU */ |
@@ -408,8 +406,10 @@ | |||
408 | #define OMAP3430_ST_12M_CLK (1 << 4) | 406 | #define OMAP3430_ST_12M_CLK (1 << 4) |
409 | #define OMAP3430_ST_48M_CLK (1 << 3) | 407 | #define OMAP3430_ST_48M_CLK (1 << 3) |
410 | #define OMAP3430_ST_96M_CLK (1 << 2) | 408 | #define OMAP3430_ST_96M_CLK (1 << 2) |
411 | #define OMAP3430_ST_PERIPH_CLK (1 << 1) | 409 | #define OMAP3430_ST_PERIPH_CLK_SHIFT 1 |
412 | #define OMAP3430_ST_CORE_CLK (1 << 0) | 410 | #define OMAP3430_ST_PERIPH_CLK_MASK (1 << 1) |
411 | #define OMAP3430_ST_CORE_CLK_SHIFT 0 | ||
412 | #define OMAP3430_ST_CORE_CLK_MASK (1 << 0) | ||
413 | 413 | ||
414 | /* CM_IDLEST2_CKGEN */ | 414 | /* CM_IDLEST2_CKGEN */ |
415 | #define OMAP3430ES2_ST_120M_CLK_SHIFT 1 | 415 | #define OMAP3430ES2_ST_120M_CLK_SHIFT 1 |
@@ -423,6 +423,10 @@ | |||
423 | #define OMAP3430_AUTO_CORE_DPLL_SHIFT 0 | 423 | #define OMAP3430_AUTO_CORE_DPLL_SHIFT 0 |
424 | #define OMAP3430_AUTO_CORE_DPLL_MASK (0x7 << 0) | 424 | #define OMAP3430_AUTO_CORE_DPLL_MASK (0x7 << 0) |
425 | 425 | ||
426 | /* CM_AUTOIDLE2_PLL */ | ||
427 | #define OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT 0 | ||
428 | #define OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK (0x7 << 0) | ||
429 | |||
426 | /* CM_CLKSEL1_PLL */ | 430 | /* CM_CLKSEL1_PLL */ |
427 | /* Note that OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK was (0x3 << 27) on 3430ES1 */ | 431 | /* Note that OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK was (0x3 << 27) on 3430ES1 */ |
428 | #define OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT 27 | 432 | #define OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT 27 |
diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h index 1dd873fcc2bd..87a44c715aa4 100644 --- a/arch/arm/mach-omap2/cm.h +++ b/arch/arm/mach-omap2/cm.h | |||
@@ -81,6 +81,7 @@ | |||
81 | #define OMAP3430ES2_CM_FCLKEN3 0x0008 | 81 | #define OMAP3430ES2_CM_FCLKEN3 0x0008 |
82 | #define OMAP3430_CM_IDLEST_PLL CM_IDLEST2 | 82 | #define OMAP3430_CM_IDLEST_PLL CM_IDLEST2 |
83 | #define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2 | 83 | #define OMAP3430_CM_AUTOIDLE_PLL CM_AUTOIDLE2 |
84 | #define OMAP3430ES2_CM_AUTOIDLE2_PLL CM_AUTOIDLE2 | ||
84 | #define OMAP3430_CM_CLKSEL1 CM_CLKSEL | 85 | #define OMAP3430_CM_CLKSEL1 CM_CLKSEL |
85 | #define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL | 86 | #define OMAP3430_CM_CLKSEL1_PLL CM_CLKSEL |
86 | #define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2 | 87 | #define OMAP3430_CM_CLKSEL2_PLL CM_CLKSEL2 |
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index 8490fbba39d1..22daa5d64d35 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
@@ -34,11 +34,16 @@ struct dpll_data { | |||
34 | u32 mult_mask; | 34 | u32 mult_mask; |
35 | u32 div1_mask; | 35 | u32 div1_mask; |
36 | # if defined(CONFIG_ARCH_OMAP3) | 36 | # if defined(CONFIG_ARCH_OMAP3) |
37 | u8 modes; | ||
37 | void __iomem *control_reg; | 38 | void __iomem *control_reg; |
38 | u32 enable_mask; | 39 | u32 enable_mask; |
39 | u8 auto_recal_bit; | 40 | u8 auto_recal_bit; |
40 | u8 recal_en_bit; | 41 | u8 recal_en_bit; |
41 | u8 recal_st_bit; | 42 | u8 recal_st_bit; |
43 | void __iomem *autoidle_reg; | ||
44 | u32 autoidle_mask; | ||
45 | void __iomem *idlest_reg; | ||
46 | u8 idlest_bit; | ||
42 | # endif | 47 | # endif |
43 | }; | 48 | }; |
44 | 49 | ||