2 * OMAP3 clock framework
4 * Copyright (C) 2007 Texas Instruments, Inc.
5 * Copyright (C) 2007 Nokia Corporation
7 * Written by Paul Walmsley
10 #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
11 #define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
15 #include "cm_regbits_34xx.h"
17 #include "prm_regbits_34xx.h"
20 static void omap3_dpll_recalc(struct clk *clk);
21 static void omap3_clkoutx2_recalc(struct clk *clk);
24 * DPLL1 supplies clock to the MPU.
25 * DPLL2 supplies clock to the IVA2.
26 * DPLL3 supplies CORE domain clocks.
27 * DPLL4 supplies peripheral clocks.
32 /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */
33 static struct clk omap_32k_fck = {
34 .name = "omap_32k_fck",
36 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
38 .recalc = &propagate_rate,
41 static struct clk secure_32k_fck = {
42 .name = "secure_32k_fck",
44 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
46 .recalc = &propagate_rate,
49 /* Virtual source clocks for osc_sys_ck */
50 static struct clk virt_12m_ck = {
51 .name = "virt_12m_ck",
53 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
55 .recalc = &propagate_rate,
58 static struct clk virt_13m_ck = {
59 .name = "virt_13m_ck",
61 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
63 .recalc = &propagate_rate,
67 static struct clk virt_16_8m_ck = {
68 .name = "virt_16_8m_ck",
70 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
72 .recalc = &propagate_rate,
75 static struct clk virt_19_2m_ck = {
76 .name = "virt_19_2m_ck",
78 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
80 .recalc = &propagate_rate,
83 static struct clk virt_26m_ck = {
84 .name = "virt_26m_ck",
86 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
88 .recalc = &propagate_rate,
91 static struct clk virt_38_4m_ck = {
92 .name = "virt_38_4m_ck",
94 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
96 .recalc = &propagate_rate,
99 static const struct clksel_rate osc_sys_12m_rates[] = {
100 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
104 static const struct clksel_rate osc_sys_13m_rates[] = {
105 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
110 static const struct clksel_rate osc_sys_16_8m_rates[] = {
111 { .div = 1, .val = 5, .flags = RATE_IN_343X | DEFAULT_RATE },
115 static const struct clksel_rate osc_sys_19_2m_rates[] = {
116 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
120 static const struct clksel_rate osc_sys_26m_rates[] = {
121 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
125 static const struct clksel_rate osc_sys_38_4m_rates[] = {
126 { .div = 1, .val = 4, .flags = RATE_IN_343X | DEFAULT_RATE },
130 static const struct clksel osc_sys_clksel[] = {
131 { .parent = &virt_12m_ck, .rates = osc_sys_12m_rates },
132 { .parent = &virt_13m_ck, .rates = osc_sys_13m_rates },
133 { .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
134 { .parent = &virt_19_2m_ck, .rates = osc_sys_19_2m_rates },
135 { .parent = &virt_26m_ck, .rates = osc_sys_26m_rates },
136 { .parent = &virt_38_4m_ck, .rates = osc_sys_38_4m_rates },
140 /* Oscillator clock */
141 /* 12, 13, 16.8, 19.2, 26, or 38.4 MHz */
142 static struct clk osc_sys_ck = {
143 .name = "osc_sys_ck",
144 .init = &omap2_init_clksel_parent,
145 .clksel_reg = OMAP3430_PRM_CLKSEL,
146 .clksel_mask = OMAP3430_SYS_CLKIN_SEL_MASK,
147 .clksel = osc_sys_clksel,
148 /* REVISIT: deal with autoextclkmode? */
149 .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
151 .recalc = &omap2_clksel_recalc,
154 static const struct clksel_rate sys_osc_rates[] = {
155 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
156 { .div = 2, .val = 2, .flags = RATE_IN_343X },
160 static const struct clksel sys_clksel[] = {
161 { .parent = &osc_sys_ck, .rates = sys_osc_rates },
165 /* Latency: this clock is only enabled after PRM_CLKSETUP.SETUP_TIME */
166 /* Feeds DPLLs - divided first by PRM_CLKSRC_CTRL.SYSCLKDIV? */
167 static struct clk sys_ck = {
169 .parent = &osc_sys_ck,
170 .init = &omap2_init_clksel_parent,
171 .clksel_reg = OMAP3430_PRM_CLKSRC_CTRL,
172 .clksel_mask = OMAP_SYSCLKDIV_MASK,
173 .clksel = sys_clksel,
174 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
175 .recalc = &omap2_clksel_recalc,
178 static struct clk sys_altclk = {
179 .name = "sys_altclk",
180 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
181 .recalc = &propagate_rate,
184 /* Optional external clock input for some McBSPs */
185 static struct clk mcbsp_clks = {
186 .name = "mcbsp_clks",
187 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
188 .recalc = &propagate_rate,
191 /* PRM EXTERNAL CLOCK OUTPUT */
193 static struct clk sys_clkout1 = {
194 .name = "sys_clkout1",
195 .parent = &osc_sys_ck,
196 .enable_reg = OMAP3430_PRM_CLKOUT_CTRL,
197 .enable_bit = OMAP3430_CLKOUT_EN_SHIFT,
198 .flags = CLOCK_IN_OMAP343X,
199 .recalc = &followparent_recalc,
207 /* MPU clock source */
209 static const struct dpll_data dpll1_dd = {
210 .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
211 .mult_mask = OMAP3430_MPU_DPLL_MULT_MASK,
212 .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK,
213 .div2_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL),
214 .div2_mask = OMAP3430_MPU_DPLL_CLKOUT_DIV_MASK,
215 .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
216 .enable_mask = OMAP3430_EN_MPU_DPLL_MASK,
217 .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT,
218 .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT,
219 .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT,
222 static struct clk dpll1_ck = {
225 .dpll_data = &dpll1_dd,
226 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
227 .recalc = &omap3_dpll_recalc,
231 * REVISIT: This clock is never specifically defined in the 3430 TRM,
232 * although it is referenced - so this is a guess
234 static struct clk emu_mpu_alwon_ck = {
235 .name = "emu_mpu_alwon_ck",
237 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
238 .recalc = &followparent_recalc,
242 /* IVA2 clock source */
245 static const struct dpll_data dpll2_dd = {
246 .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
247 .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK,
248 .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK,
249 .div2_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL2_PLL),
250 .div2_mask = OMAP3430_IVA2_DPLL_CLKOUT_DIV_MASK,
251 .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
252 .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK,
253 .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT,
254 .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT,
255 .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT,
258 static struct clk dpll2_ck = {
261 .dpll_data = &dpll2_dd,
262 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
263 .recalc = &omap3_dpll_recalc,
267 /* Source clock for all interfaces and for some device fclks */
269 static const struct dpll_data dpll3_dd = {
270 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
271 .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK,
272 .div1_mask = OMAP3430_CORE_DPLL_DIV_MASK,
273 .div2_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
274 .div2_mask = OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK,
275 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
276 .enable_mask = OMAP3430_EN_CORE_DPLL_MASK,
277 .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT,
278 .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT,
279 .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT,
282 static struct clk dpll3_ck = {
285 .dpll_data = &dpll3_dd,
286 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
287 .recalc = &omap3_dpll_recalc,
290 static const struct clksel_rate div16_dpll_rates[] = {
291 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
292 { .div = 2, .val = 2, .flags = RATE_IN_343X },
293 { .div = 3, .val = 3, .flags = RATE_IN_343X },
294 { .div = 4, .val = 4, .flags = RATE_IN_343X },
295 { .div = 5, .val = 5, .flags = RATE_IN_343X },
296 { .div = 6, .val = 6, .flags = RATE_IN_343X },
297 { .div = 7, .val = 7, .flags = RATE_IN_343X },
298 { .div = 8, .val = 8, .flags = RATE_IN_343X },
299 { .div = 9, .val = 9, .flags = RATE_IN_343X },
300 { .div = 10, .val = 10, .flags = RATE_IN_343X },
301 { .div = 11, .val = 11, .flags = RATE_IN_343X },
302 { .div = 12, .val = 12, .flags = RATE_IN_343X },
303 { .div = 13, .val = 13, .flags = RATE_IN_343X },
304 { .div = 14, .val = 14, .flags = RATE_IN_343X },
305 { .div = 15, .val = 15, .flags = RATE_IN_343X },
306 { .div = 16, .val = 16, .flags = RATE_IN_343X },
310 static const struct clksel_rate div2_rates[] = {
311 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
312 { .div = 2, .val = 2, .flags = RATE_IN_343X },
316 static const struct clksel div2_dpll3m2_clksel[] = {
317 { .parent = &dpll3_ck, .rates = div2_rates },
322 * REVISIT: Not sure what to do about clksel & these M2 divider clocks.
323 * Shouldn't they be changed in SRAM?
324 * This should probably remain a 'read-only' clksel clock.
326 static struct clk dpll3_m2_ck = {
327 .name = "dpll3_m2_ck",
329 .init = &omap2_init_clksel_parent,
330 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
331 .clksel_mask = OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK,
332 .clksel = div2_dpll3m2_clksel,
333 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
334 .recalc = &omap2_clksel_recalc,
337 static struct clk core_ck = {
339 .parent = &dpll3_m2_ck,
340 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
341 .recalc = &followparent_recalc,
345 * This virtual clock provides the CLKOUTX2 output from the DPLL if the
346 * DPLL isn't bypassed
348 static struct clk dpll3_x2_ck = {
349 .name = "dpll3_x2_ck",
351 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
352 .recalc = &omap3_clkoutx2_recalc,
355 static struct clk dpll3_m2x2_ck = {
356 .name = "dpll3_m2x2_ck",
357 .parent = &dpll3_x2_ck,
358 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
359 .recalc = &followparent_recalc,
362 /* The PWRDN bit is apparently only available on 3430ES2 and above */
363 static struct clk dpll3_m3x2_ck = {
364 .name = "dpll3_m3x2_ck",
365 .parent = &dpll3_x2_ck,
366 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
367 .enable_bit = OMAP3430_PWRDN_EMU_CORE_SHIFT,
368 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
369 .recalc = &followparent_recalc,
372 static const struct clksel div16_dpll3_clksel[] = {
373 { .parent = &dpll3_x2_ck, .rates = div16_dpll_rates },
377 static struct clk emu_core_alwon_ck = {
378 .name = "emu_core_alwon_ck",
379 .parent = &dpll3_x2_ck,
380 .init = &omap2_init_clksel_parent,
381 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
382 .clksel_mask = OMAP3430_DIV_DPLL3_MASK,
383 .clksel = div16_dpll3_clksel,
384 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
385 .recalc = &followparent_recalc,
389 /* Supplies 96MHz, 54Mhz TV DAC, DSS fclk, CAM sensor clock, emul trace clk */
391 static const struct dpll_data dpll4_dd = {
392 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL2),
393 .mult_mask = OMAP3430_PERIPH_DPLL_MULT_MASK,
394 .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK,
395 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
396 .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK,
397 .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT,
398 .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT,
399 .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT,
402 static struct clk dpll4_ck = {
405 .dpll_data = &dpll4_dd,
406 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
407 .recalc = &omap3_dpll_recalc,
411 * This virtual clock provides the CLKOUTX2 output from the DPLL if the
412 * DPLL isn't bypassed
414 static struct clk dpll4_x2_ck = {
415 .name = "dpll4_x2_ck",
417 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
418 .recalc = &omap3_clkoutx2_recalc,
421 static const struct clksel div16_dpll4_clksel[] = {
422 { .parent = &dpll4_x2_ck, .rates = div16_dpll_rates },
426 /* The PWRDN bit is apparently only available on 3430ES2 and above */
427 static struct clk dpll4_m2x2_ck = {
428 .name = "dpll4_m2x2_ck",
429 .parent = &dpll4_x2_ck,
430 .init = &omap2_init_clksel_parent,
431 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
432 .enable_bit = OMAP3430_PWRDN_96M_SHIFT,
433 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3),
434 .clksel_mask = OMAP3430_DIV_96M_MASK,
435 .clksel = div16_dpll4_clksel,
436 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
437 .recalc = &omap2_clksel_recalc,
440 static struct clk omap_96m_alwon_fck = {
441 .name = "omap_96m_alwon_fck",
442 .parent = &dpll4_m2x2_ck,
443 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
444 PARENT_CONTROLS_CLOCK,
445 .recalc = &followparent_recalc,
448 static struct clk omap_96m_fck = {
449 .name = "omap_96m_fck",
450 .parent = &omap_96m_alwon_fck,
451 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
452 PARENT_CONTROLS_CLOCK,
453 .recalc = &followparent_recalc,
456 static struct clk cm_96m_fck = {
457 .name = "cm_96m_fck",
458 .parent = &dpll4_m2x2_ck,
459 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
460 .recalc = &followparent_recalc,
463 /* The PWRDN bit is apparently only available on 3430ES2 and above */
464 static struct clk dpll4_m3x2_ck = {
465 .name = "dpll4_m3x2_ck",
466 .parent = &dpll4_x2_ck,
467 .init = &omap2_init_clksel_parent,
468 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
469 .enable_bit = OMAP3430_PWRDN_TV_SHIFT,
470 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
471 .clksel_mask = OMAP3430_CLKSEL_TV_MASK,
472 .clksel = div16_dpll4_clksel,
473 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
474 .recalc = &omap2_clksel_recalc,
477 static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
478 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
482 static const struct clksel_rate omap_54m_alt_rates[] = {
483 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
487 static const struct clksel omap_54m_clksel[] = {
488 { .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
489 { .parent = &sys_altclk, .rates = omap_54m_alt_rates },
493 static struct clk omap_54m_fck = {
494 .name = "omap_54m_fck",
495 .init = &omap2_init_clksel_parent,
496 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
497 .clksel_mask = OMAP3430_SOURCE_54M,
498 .clksel = omap_54m_clksel,
499 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
500 .recalc = &omap2_clksel_recalc,
503 static const struct clksel_rate omap_48m_96md2_rates[] = {
504 { .div = 2, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
508 static const struct clksel_rate omap_48m_alt_rates[] = {
509 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
513 static const struct clksel omap_48m_clksel[] = {
514 { .parent = &cm_96m_fck, .rates = omap_48m_96md2_rates },
515 { .parent = &sys_altclk, .rates = omap_48m_alt_rates },
519 static struct clk omap_48m_fck = {
520 .name = "omap_48m_fck",
521 .init = &omap2_init_clksel_parent,
522 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
523 .clksel_mask = OMAP3430_SOURCE_48M,
524 .clksel = omap_48m_clksel,
525 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
526 .recalc = &omap2_clksel_recalc,
529 static struct clk omap_12m_fck = {
530 .name = "omap_12m_fck",
531 .parent = &omap_48m_fck,
533 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
534 .recalc = &omap2_fixed_divisor_recalc,
537 /* The PWRDN bit is apparently only available on 3430ES2 and above */
538 static struct clk dpll4_m4x2_ck = {
539 .name = "dpll4_m4x2_ck",
540 .parent = &dpll4_x2_ck,
541 .init = &omap2_init_clksel_parent,
542 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
543 .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
544 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
545 .clksel_mask = OMAP3430_CLKSEL_DSS1_MASK,
546 .clksel = div16_dpll4_clksel,
547 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
548 .recalc = &omap2_clksel_recalc,
551 /* The PWRDN bit is apparently only available on 3430ES2 and above */
552 static struct clk dpll4_m5x2_ck = {
553 .name = "dpll4_m5x2_ck",
554 .parent = &dpll4_x2_ck,
555 .init = &omap2_init_clksel_parent,
556 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
557 .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
558 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL),
559 .clksel_mask = OMAP3430_CLKSEL_CAM_MASK,
560 .clksel = div16_dpll4_clksel,
561 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
562 .recalc = &omap2_clksel_recalc,
565 /* The PWRDN bit is apparently only available on 3430ES2 and above */
566 static struct clk dpll4_m6x2_ck = {
567 .name = "dpll4_m6x2_ck",
568 .parent = &dpll4_x2_ck,
569 .init = &omap2_init_clksel_parent,
570 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
571 .enable_bit = OMAP3430_PWRDN_EMU_PERIPH_SHIFT,
572 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
573 .clksel_mask = OMAP3430_DIV_DPLL4_MASK,
574 .clksel = div16_dpll4_clksel,
575 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
576 .recalc = &omap2_clksel_recalc,
579 static struct clk emu_per_alwon_ck = {
580 .name = "emu_per_alwon_ck",
581 .parent = &dpll4_m6x2_ck,
582 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
583 .recalc = &followparent_recalc,
587 /* CM EXTERNAL CLOCK OUTPUTS */
589 static const struct clksel_rate clkout2_src_core_rates[] = {
590 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
594 static const struct clksel_rate clkout2_src_sys_rates[] = {
595 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
599 static const struct clksel_rate clkout2_src_96m_rates[] = {
600 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
604 static const struct clksel_rate clkout2_src_54m_rates[] = {
605 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
609 static const struct clksel clkout2_src_clksel[] = {
610 { .parent = &core_ck, .rates = clkout2_src_core_rates },
611 { .parent = &sys_ck, .rates = clkout2_src_sys_rates },
612 { .parent = &omap_96m_alwon_fck, .rates = clkout2_src_96m_rates },
613 { .parent = &omap_54m_fck, .rates = clkout2_src_54m_rates },
617 static struct clk clkout2_src_ck = {
618 .name = "clkout2_src_ck",
619 .init = &omap2_init_clksel_parent,
620 .enable_reg = OMAP3430_CM_CLKOUT_CTRL,
621 .enable_bit = OMAP3430_CLKOUT2_EN_SHIFT,
622 .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
623 .clksel_mask = OMAP3430_CLKOUT2SOURCE_MASK,
624 .clksel = clkout2_src_clksel,
625 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
626 .recalc = &omap2_clksel_recalc,
629 static const struct clksel_rate sys_clkout2_rates[] = {
630 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
631 { .div = 2, .val = 1, .flags = RATE_IN_343X },
632 { .div = 4, .val = 2, .flags = RATE_IN_343X },
633 { .div = 8, .val = 3, .flags = RATE_IN_343X },
634 { .div = 16, .val = 4, .flags = RATE_IN_343X },
638 static const struct clksel sys_clkout2_clksel[] = {
639 { .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
643 static struct clk sys_clkout2 = {
644 .name = "sys_clkout2",
645 .init = &omap2_init_clksel_parent,
646 .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
647 .clksel_mask = OMAP3430_CLKOUT2_DIV_MASK,
648 .clksel = sys_clkout2_clksel,
649 .flags = CLOCK_IN_OMAP343X | PARENT_CONTROLS_CLOCK,
650 .recalc = &omap2_clksel_recalc,
653 /* CM OUTPUT CLOCKS */
655 static struct clk corex2_fck = {
656 .name = "corex2_fck",
657 .parent = &dpll3_m2x2_ck,
658 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
659 .recalc = &followparent_recalc,
662 /* DPLL power domain clock controls */
664 static const struct clksel div2_core_clksel[] = {
665 { .parent = &core_ck, .rates = div2_rates },
669 /* TRM s. 4.7.7.4 lists the input for these two clocks as CORE_CK,
670 but presuming that is an error, or at least an overgeneralization */
671 /* REVISIT: Are these in DPLL power domain or CM power domain? docs
672 may be inconsistent here? */
673 static struct clk dpll1_fck = {
676 .init = &omap2_init_clksel_parent,
677 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
678 .clksel_mask = OMAP3430_MPU_CLK_SRC_MASK,
679 .clksel = div2_core_clksel,
680 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
681 .recalc = &omap2_clksel_recalc,
684 static struct clk dpll2_fck = {
687 .init = &omap2_init_clksel_parent,
688 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
689 .clksel_mask = OMAP3430_IVA2_CLK_SRC_MASK,
690 .clksel = div2_core_clksel,
691 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
692 .recalc = &omap2_clksel_recalc,
695 /* Common interface clocks */
697 static struct clk l3_ick = {
700 .init = &omap2_init_clksel_parent,
701 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
702 .clksel_mask = OMAP3430_CLKSEL_L3_MASK,
703 .clksel = div2_core_clksel,
704 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
705 .recalc = &omap2_clksel_recalc,
708 static const struct clksel div2_l3_clksel[] = {
709 { .parent = &l3_ick, .rates = div2_rates },
713 static struct clk l4_ick = {
716 .init = &omap2_init_clksel_parent,
717 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
718 .clksel_mask = OMAP3430_CLKSEL_L4_MASK,
719 .clksel = div2_l3_clksel,
720 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
721 .recalc = &omap2_clksel_recalc,
725 static const struct clksel div2_l4_clksel[] = {
726 { .parent = &l4_ick, .rates = div2_rates },
730 static struct clk rm_ick = {
733 .init = &omap2_init_clksel_parent,
734 .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
735 .clksel_mask = OMAP3430_CLKSEL_RM_MASK,
736 .clksel = div2_l4_clksel,
737 .flags = CLOCK_IN_OMAP343X,
738 .recalc = &omap2_clksel_recalc,
741 /* GFX power domain */
743 /* REVISIT: These clocks have disappeared in the 3430 ES2 TRM ?? */
745 static const struct clksel gfx_l3_clksel[] = {
746 { .parent = &l3_ick, .rates = gfx_l3_rates },
750 static struct clk gfx_l3_fck = {
751 .name = "gfx_l3_fck",
753 .init = &omap2_init_clksel_parent,
754 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
755 .enable_bit = OMAP_EN_GFX_SHIFT,
756 .clksel_reg = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
757 .clksel_mask = OMAP_CLKSEL_GFX_MASK,
758 .clksel = gfx_l3_clksel,
759 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
760 .recalc = &omap2_clksel_recalc,
763 static struct clk gfx_l3_ick = {
764 .name = "gfx_l3_ick",
766 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
767 .enable_bit = OMAP_EN_GFX_SHIFT,
768 .flags = CLOCK_IN_OMAP343X,
769 .recalc = &followparent_recalc,
772 static struct clk gfx_cg1_ck = {
773 .name = "gfx_cg1_ck",
774 .parent = &gfx_l3_fck, /* REVISIT: correct? */
775 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
776 .enable_bit = OMAP3430_EN_2D_SHIFT,
777 .flags = CLOCK_IN_OMAP343X,
778 .recalc = &followparent_recalc,
781 static struct clk gfx_cg2_ck = {
782 .name = "gfx_cg2_ck",
783 .parent = &gfx_l3_fck, /* REVISIT: correct? */
784 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
785 .enable_bit = OMAP3430_EN_3D_SHIFT,
786 .flags = CLOCK_IN_OMAP343X,
787 .recalc = &followparent_recalc,
790 /* CORE power domain */
792 static struct clk d2d_26m_fck = {
793 .name = "d2d_26m_fck",
795 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
796 .enable_bit = OMAP3430_EN_D2D_SHIFT,
797 .flags = CLOCK_IN_OMAP343X,
798 .recalc = &followparent_recalc,
801 static const struct clksel omap343x_gpt_clksel[] = {
802 { .parent = &omap_32k_fck, .rates = gpt_32k_rates },
803 { .parent = &sys_ck, .rates = gpt_sys_rates },
807 static struct clk gpt10_fck = {
810 .init = &omap2_init_clksel_parent,
811 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
812 .enable_bit = OMAP3430_EN_GPT10_SHIFT,
813 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
814 .clksel_mask = OMAP3430_CLKSEL_GPT10_MASK,
815 .clksel = omap343x_gpt_clksel,
816 .flags = CLOCK_IN_OMAP343X,
817 .recalc = &omap2_clksel_recalc,
820 static struct clk gpt11_fck = {
823 .init = &omap2_init_clksel_parent,
824 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
825 .enable_bit = OMAP3430_EN_GPT11_SHIFT,
826 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
827 .clksel_mask = OMAP3430_CLKSEL_GPT11_MASK,
828 .clksel = omap343x_gpt_clksel,
829 .flags = CLOCK_IN_OMAP343X,
830 .recalc = &omap2_clksel_recalc,
833 /* CORE 96M FCLK-derived clocks */
835 static struct clk core_96m_fck = {
836 .name = "core_96m_fck",
837 .parent = &omap_96m_fck,
838 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
839 PARENT_CONTROLS_CLOCK,
840 .recalc = &followparent_recalc,
843 static struct clk mmc2_fck = {
845 .parent = &core_96m_fck,
846 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
847 .enable_bit = OMAP3430_EN_MMC2_SHIFT,
848 .flags = CLOCK_IN_OMAP343X,
849 .recalc = &followparent_recalc,
852 static struct clk mspro_fck = {
854 .parent = &core_96m_fck,
855 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
856 .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
857 .flags = CLOCK_IN_OMAP343X,
858 .recalc = &followparent_recalc,
861 static struct clk mmc1_fck = {
863 .parent = &core_96m_fck,
864 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
865 .enable_bit = OMAP3430_EN_MMC1_SHIFT,
866 .flags = CLOCK_IN_OMAP343X,
867 .recalc = &followparent_recalc,
870 static struct clk i2c3_fck = {
873 .parent = &core_96m_fck,
874 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
875 .enable_bit = OMAP3430_EN_I2C3_SHIFT,
876 .flags = CLOCK_IN_OMAP343X,
877 .recalc = &followparent_recalc,
880 static struct clk i2c2_fck = {
883 .parent = &core_96m_fck,
884 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
885 .enable_bit = OMAP3430_EN_I2C2_SHIFT,
886 .flags = CLOCK_IN_OMAP343X,
887 .recalc = &followparent_recalc,
890 static struct clk i2c1_fck = {
893 .parent = &core_96m_fck,
894 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
895 .enable_bit = OMAP3430_EN_I2C1_SHIFT,
896 .flags = CLOCK_IN_OMAP343X,
897 .recalc = &followparent_recalc,
901 * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
902 * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
904 static const struct clksel_rate common_mcbsp_96m_rates[] = {
905 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
909 static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
910 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
914 static const struct clksel mcbsp_15_clksel[] = {
915 { .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
916 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
920 static struct clk mcbsp5_fck = {
921 .name = "mcbsp5_fck",
922 .init = &omap2_init_clksel_parent,
923 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
924 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
925 .clksel_reg = OMAP343X_CTRL_REGADDR(CONTROL_DEVCONF1),
926 .clksel_mask = OMAP2_MCBSP5_CLKS_MASK,
927 .clksel = mcbsp_15_clksel,
928 .flags = CLOCK_IN_OMAP343X,
929 .recalc = &omap2_clksel_recalc,
932 static struct clk mcbsp1_fck = {
933 .name = "mcbsp1_fck",
934 .init = &omap2_init_clksel_parent,
935 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
936 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
937 .clksel_reg = OMAP343X_CTRL_REGADDR(CONTROL_DEVCONF0),
938 .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
939 .clksel = mcbsp_15_clksel,
940 .flags = CLOCK_IN_OMAP343X,
941 .recalc = &omap2_clksel_recalc,
944 /* CORE_48M_FCK-derived clocks */
946 static struct clk core_48m_fck = {
947 .name = "core_48m_fck",
948 .parent = &omap_48m_fck,
949 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
950 .recalc = &followparent_recalc,
953 static struct clk mcspi4_fck = {
954 .name = "mcspi4_fck",
955 .parent = &core_48m_fck,
956 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
957 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
958 .flags = CLOCK_IN_OMAP343X,
959 .recalc = &followparent_recalc,
962 static struct clk mcspi3_fck = {
963 .name = "mcspi3_fck",
964 .parent = &core_48m_fck,
965 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
966 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
967 .flags = CLOCK_IN_OMAP343X,
968 .recalc = &followparent_recalc,
971 static struct clk mcspi2_fck = {
972 .name = "mcspi2_fck",
973 .parent = &core_48m_fck,
974 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
975 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
976 .flags = CLOCK_IN_OMAP343X,
977 .recalc = &followparent_recalc,
980 static struct clk mcspi1_fck = {
981 .name = "mcspi1_fck",
982 .parent = &core_48m_fck,
983 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
984 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
985 .flags = CLOCK_IN_OMAP343X,
986 .recalc = &followparent_recalc,
989 static struct clk uart2_fck = {
991 .parent = &core_48m_fck,
992 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
993 .enable_bit = OMAP3430_EN_UART2_SHIFT,
994 .flags = CLOCK_IN_OMAP343X,
995 .recalc = &followparent_recalc,
998 static struct clk uart1_fck = {
1000 .parent = &core_48m_fck,
1001 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1002 .enable_bit = OMAP3430_EN_UART1_SHIFT,
1003 .flags = CLOCK_IN_OMAP343X,
1004 .recalc = &followparent_recalc,
1007 static struct clk fshostusb_fck = {
1008 .name = "fshostusb_fck",
1009 .parent = &core_48m_fck,
1010 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1011 .enable_bit = OMAP3430_EN_FSHOSTUSB_SHIFT,
1012 .flags = CLOCK_IN_OMAP343X,
1013 .recalc = &followparent_recalc,
1016 /* CORE_12M_FCK based clocks */
1018 static struct clk core_12m_fck = {
1019 .name = "core_12m_fck",
1020 .parent = &omap_12m_fck,
1021 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1022 .recalc = &followparent_recalc,
1025 static struct clk hdq_fck = {
1027 .parent = &core_12m_fck,
1028 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1029 .enable_bit = OMAP3430_EN_HDQ_SHIFT,
1030 .flags = CLOCK_IN_OMAP343X,
1031 .recalc = &followparent_recalc,
1034 /* DPLL3-derived clock */
1036 static const struct clksel_rate ssi_ssr_corex2_rates[] = {
1037 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
1038 { .div = 2, .val = 2, .flags = RATE_IN_343X },
1039 { .div = 3, .val = 3, .flags = RATE_IN_343X },
1040 { .div = 4, .val = 4, .flags = RATE_IN_343X },
1041 { .div = 6, .val = 6, .flags = RATE_IN_343X },
1042 { .div = 8, .val = 8, .flags = RATE_IN_343X },
1046 static const struct clksel ssi_ssr_clksel[] = {
1047 { .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
1051 static struct clk ssi_ssr_fck = {
1052 .name = "ssi_ssr_fck",
1053 .init = &omap2_init_clksel_parent,
1054 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1055 .enable_bit = OMAP3430_EN_SSI_SHIFT,
1056 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1057 .clksel_mask = OMAP3430_CLKSEL_SSI_MASK,
1058 .clksel = ssi_ssr_clksel,
1059 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1060 .recalc = &omap2_clksel_recalc,
1063 static struct clk ssi_sst_fck = {
1064 .name = "ssi_sst_fck",
1065 .parent = &ssi_ssr_fck,
1067 .flags = CLOCK_IN_OMAP343X,
1068 .recalc = &omap2_fixed_divisor_recalc,
1073 /* CORE_L3_ICK based clocks */
1075 static struct clk core_l3_ick = {
1076 .name = "core_l3_ick",
1078 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1079 .recalc = &followparent_recalc,
1082 static struct clk hsotgusb_ick = {
1083 .name = "hsotgusb_ick",
1084 .parent = &core_l3_ick,
1085 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1086 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
1087 .flags = CLOCK_IN_OMAP343X,
1088 .recalc = &followparent_recalc,
1091 static struct clk sdrc_ick = {
1093 .parent = &core_l3_ick,
1094 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1095 .enable_bit = OMAP3430_EN_SDRC_SHIFT,
1096 .flags = CLOCK_IN_OMAP343X | ENABLE_ON_INIT,
1097 .recalc = &followparent_recalc,
1100 static struct clk gpmc_fck = {
1102 .parent = &core_l3_ick,
1103 .flags = CLOCK_IN_OMAP343X,
1104 .recalc = &followparent_recalc,
1107 /* SECURITY_L3_ICK based clocks */
1109 static struct clk security_l3_ick = {
1110 .name = "security_l3_ick",
1112 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1113 .recalc = &followparent_recalc,
1116 static struct clk pka_ick = {
1118 .parent = &security_l3_ick,
1119 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1120 .enable_bit = OMAP3430_EN_PKA_SHIFT,
1121 .flags = CLOCK_IN_OMAP343X,
1122 .recalc = &followparent_recalc,
1125 /* CORE_L4_ICK based clocks */
1127 static struct clk core_l4_ick = {
1128 .name = "core_l4_ick",
1130 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1131 .recalc = &followparent_recalc,
1134 static struct clk aes2_ick = {
1136 .parent = &core_l4_ick,
1137 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1138 .enable_bit = OMAP3430_EN_AES2_SHIFT,
1139 .flags = CLOCK_IN_OMAP343X,
1140 .recalc = &followparent_recalc,
1143 static struct clk sha12_ick = {
1144 .name = "sha12_ick",
1145 .parent = &core_l4_ick,
1146 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1147 .enable_bit = OMAP3430_EN_SHA12_SHIFT,
1148 .flags = CLOCK_IN_OMAP343X,
1149 .recalc = &followparent_recalc,
1152 static struct clk des2_ick = {
1154 .parent = &core_l4_ick,
1155 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1156 .enable_bit = OMAP3430_EN_DES2_SHIFT,
1157 .flags = CLOCK_IN_OMAP343X,
1158 .recalc = &followparent_recalc,
1161 static struct clk mmc2_ick = {
1163 .parent = &core_l4_ick,
1164 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1165 .enable_bit = OMAP3430_EN_MMC2_SHIFT,
1166 .flags = CLOCK_IN_OMAP343X,
1167 .recalc = &followparent_recalc,
1170 static struct clk mmc1_ick = {
1172 .parent = &core_l4_ick,
1173 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1174 .enable_bit = OMAP3430_EN_MMC1_SHIFT,
1175 .flags = CLOCK_IN_OMAP343X,
1176 .recalc = &followparent_recalc,
1179 static struct clk mspro_ick = {
1180 .name = "mspro_ick",
1181 .parent = &core_l4_ick,
1182 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1183 .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
1184 .flags = CLOCK_IN_OMAP343X,
1185 .recalc = &followparent_recalc,
1188 static struct clk hdq_ick = {
1190 .parent = &core_l4_ick,
1191 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1192 .enable_bit = OMAP3430_EN_HDQ_SHIFT,
1193 .flags = CLOCK_IN_OMAP343X,
1194 .recalc = &followparent_recalc,
1197 static struct clk mcspi4_ick = {
1198 .name = "mcspi4_ick",
1199 .parent = &core_l4_ick,
1200 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1201 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
1202 .flags = CLOCK_IN_OMAP343X,
1203 .recalc = &followparent_recalc,
1206 static struct clk mcspi3_ick = {
1207 .name = "mcspi3_ick",
1208 .parent = &core_l4_ick,
1209 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1210 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
1211 .flags = CLOCK_IN_OMAP343X,
1212 .recalc = &followparent_recalc,
1215 static struct clk mcspi2_ick = {
1216 .name = "mcspi2_ick",
1217 .parent = &core_l4_ick,
1218 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1219 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
1220 .flags = CLOCK_IN_OMAP343X,
1221 .recalc = &followparent_recalc,
1224 static struct clk mcspi1_ick = {
1225 .name = "mcspi1_ick",
1226 .parent = &core_l4_ick,
1227 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1228 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
1229 .flags = CLOCK_IN_OMAP343X,
1230 .recalc = &followparent_recalc,
1233 static struct clk i2c3_ick = {
1236 .parent = &core_l4_ick,
1237 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1238 .enable_bit = OMAP3430_EN_I2C3_SHIFT,
1239 .flags = CLOCK_IN_OMAP343X,
1240 .recalc = &followparent_recalc,
1243 static struct clk i2c2_ick = {
1246 .parent = &core_l4_ick,
1247 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1248 .enable_bit = OMAP3430_EN_I2C2_SHIFT,
1249 .flags = CLOCK_IN_OMAP343X,
1250 .recalc = &followparent_recalc,
1253 static struct clk i2c1_ick = {
1256 .parent = &core_l4_ick,
1257 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1258 .enable_bit = OMAP3430_EN_I2C1_SHIFT,
1259 .flags = CLOCK_IN_OMAP343X,
1260 .recalc = &followparent_recalc,
1263 static struct clk uart2_ick = {
1264 .name = "uart2_ick",
1265 .parent = &core_l4_ick,
1266 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1267 .enable_bit = OMAP3430_EN_UART2_SHIFT,
1268 .flags = CLOCK_IN_OMAP343X,
1269 .recalc = &followparent_recalc,
1272 static struct clk uart1_ick = {
1273 .name = "uart1_ick",
1274 .parent = &core_l4_ick,
1275 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1276 .enable_bit = OMAP3430_EN_UART1_SHIFT,
1277 .flags = CLOCK_IN_OMAP343X,
1278 .recalc = &followparent_recalc,
1281 static struct clk gpt11_ick = {
1282 .name = "gpt11_ick",
1283 .parent = &core_l4_ick,
1284 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1285 .enable_bit = OMAP3430_EN_GPT11_SHIFT,
1286 .flags = CLOCK_IN_OMAP343X,
1287 .recalc = &followparent_recalc,
1290 static struct clk gpt10_ick = {
1291 .name = "gpt10_ick",
1292 .parent = &core_l4_ick,
1293 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1294 .enable_bit = OMAP3430_EN_GPT10_SHIFT,
1295 .flags = CLOCK_IN_OMAP343X,
1296 .recalc = &followparent_recalc,
1299 static struct clk mcbsp5_ick = {
1300 .name = "mcbsp5_ick",
1301 .parent = &core_l4_ick,
1302 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1303 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
1304 .flags = CLOCK_IN_OMAP343X,
1305 .recalc = &followparent_recalc,
1308 static struct clk mcbsp1_ick = {
1309 .name = "mcbsp1_ick",
1310 .parent = &core_l4_ick,
1311 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1312 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
1313 .flags = CLOCK_IN_OMAP343X,
1314 .recalc = &followparent_recalc,
1317 static struct clk fac_ick = {
1319 .parent = &core_l4_ick,
1320 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1321 .enable_bit = OMAP3430_EN_FAC_SHIFT,
1322 .flags = CLOCK_IN_OMAP343X,
1323 .recalc = &followparent_recalc,
1326 static struct clk mailboxes_ick = {
1327 .name = "mailboxes_ick",
1328 .parent = &core_l4_ick,
1329 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1330 .enable_bit = OMAP3430_EN_MAILBOXES_SHIFT,
1331 .flags = CLOCK_IN_OMAP343X,
1332 .recalc = &followparent_recalc,
1335 static struct clk omapctrl_ick = {
1336 .name = "omapctrl_ick",
1337 .parent = &core_l4_ick,
1338 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1339 .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
1340 .flags = CLOCK_IN_OMAP343X | ENABLE_ON_INIT,
1341 .recalc = &followparent_recalc,
1344 /* SSI_L4_ICK based clocks */
1346 static struct clk ssi_l4_ick = {
1347 .name = "ssi_l4_ick",
1349 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1350 .recalc = &followparent_recalc,
1353 static struct clk ssi_ick = {
1355 .parent = &ssi_l4_ick,
1356 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1357 .enable_bit = OMAP3430_EN_SSI_SHIFT,
1358 .flags = CLOCK_IN_OMAP343X,
1359 .recalc = &followparent_recalc,
1362 /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
1363 * but l4_ick makes more sense to me */
1365 static const struct clksel_rate usb_l4_l4_rates[] = {
1366 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
1367 { .div = 2, .val = 2, .flags = RATE_IN_343X },
1371 static const struct clksel usb_l4_clksel[] = {
1372 { .parent = &l4_ick, .rates = usb_l4_l4_rates },
1376 static struct clk usb_l4_ick = {
1377 .name = "usb_l4_ick",
1379 .init = &omap2_init_clksel_parent,
1380 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1381 .enable_bit = OMAP3430_EN_FSHOSTUSB_SHIFT,
1382 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1383 .clksel_mask = OMAP3430_CLKSEL_FSHOSTUSB_MASK,
1384 .clksel = usb_l4_clksel,
1385 .flags = CLOCK_IN_OMAP343X,
1386 .recalc = &omap2_clksel_recalc,
1389 /* XXX MDM_INTC_ICK, SAD2D_ICK ?? */
1391 /* SECURITY_L4_ICK2 based clocks */
1393 static struct clk security_l4_ick2 = {
1394 .name = "security_l4_ick2",
1396 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1397 .recalc = &followparent_recalc,
1400 static struct clk aes1_ick = {
1402 .parent = &security_l4_ick2,
1403 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1404 .enable_bit = OMAP3430_EN_AES1_SHIFT,
1405 .flags = CLOCK_IN_OMAP343X,
1406 .recalc = &followparent_recalc,
1409 static struct clk rng_ick = {
1411 .parent = &security_l4_ick2,
1412 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1413 .enable_bit = OMAP3430_EN_RNG_SHIFT,
1414 .flags = CLOCK_IN_OMAP343X,
1415 .recalc = &followparent_recalc,
1418 static struct clk sha11_ick = {
1419 .name = "sha11_ick",
1420 .parent = &security_l4_ick2,
1421 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1422 .enable_bit = OMAP3430_EN_SHA11_SHIFT,
1423 .flags = CLOCK_IN_OMAP343X,
1424 .recalc = &followparent_recalc,
1427 static struct clk des1_ick = {
1429 .parent = &security_l4_ick2,
1430 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1431 .enable_bit = OMAP3430_EN_DES1_SHIFT,
1432 .flags = CLOCK_IN_OMAP343X,
1433 .recalc = &followparent_recalc,
1438 static struct clk dss1_alwon_fck = {
1439 .name = "dss1_alwon_fck",
1440 .parent = &dpll4_m4x2_ck,
1441 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
1442 .enable_bit = OMAP3430_EN_DSS1_SHIFT,
1443 .flags = CLOCK_IN_OMAP343X,
1444 .recalc = &followparent_recalc,
1447 static struct clk dss_tv_fck = {
1448 .name = "dss_tv_fck",
1449 .parent = &omap_54m_fck,
1450 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
1451 .enable_bit = OMAP3430_EN_TV_SHIFT,
1452 .flags = CLOCK_IN_OMAP343X,
1453 .recalc = &followparent_recalc,
1456 static struct clk dss_96m_fck = {
1457 .name = "dss_96m_fck",
1458 .parent = &omap_96m_fck,
1459 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
1460 .enable_bit = OMAP3430_EN_TV_SHIFT,
1461 .flags = CLOCK_IN_OMAP343X,
1462 .recalc = &followparent_recalc,
1465 static struct clk dss2_alwon_fck = {
1466 .name = "dss2_alwon_fck",
1468 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
1469 .enable_bit = OMAP3430_EN_DSS2_SHIFT,
1470 .flags = CLOCK_IN_OMAP343X,
1471 .recalc = &followparent_recalc,
1474 static struct clk dss_l3_ick = {
1475 .name = "dss_l3_ick",
1477 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
1478 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
1479 .flags = CLOCK_IN_OMAP343X,
1480 .recalc = &followparent_recalc,
1483 static struct clk dss_l4_ick = {
1484 .name = "dss_l4_ick",
1486 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
1487 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
1488 .flags = CLOCK_IN_OMAP343X,
1489 .recalc = &followparent_recalc,
1494 static struct clk cam_mclk = {
1496 .parent = &dpll4_m5x2_ck,
1497 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
1498 .enable_bit = OMAP3430_EN_CAM_SHIFT,
1499 .flags = CLOCK_IN_OMAP343X,
1500 .recalc = &followparent_recalc,
1503 static struct clk cam_l3_ick = {
1504 .name = "cam_l3_ick",
1506 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
1507 .enable_bit = OMAP3430_EN_CAM_SHIFT,
1508 .flags = CLOCK_IN_OMAP343X,
1509 .recalc = &followparent_recalc,
1512 static struct clk cam_l4_ick = {
1513 .name = "cam_l4_ick",
1515 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
1516 .enable_bit = OMAP3430_EN_CAM_SHIFT,
1517 .flags = CLOCK_IN_OMAP343X,
1518 .recalc = &followparent_recalc,
1523 static struct clk gpt1_fck = {
1525 .init = &omap2_init_clksel_parent,
1526 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1527 .enable_bit = OMAP3430_EN_GPT1_SHIFT,
1528 .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
1529 .clksel_mask = OMAP3430_CLKSEL_GPT1_MASK,
1530 .clksel = omap343x_gpt_clksel,
1531 .flags = CLOCK_IN_OMAP343X,
1532 .recalc = &omap2_clksel_recalc,
1535 static struct clk wkup_32k_fck = {
1536 .name = "wkup_32k_fck",
1537 .parent = &omap_32k_fck,
1538 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1539 .recalc = &followparent_recalc,
1542 static struct clk gpio1_fck = {
1543 .name = "gpio1_fck",
1544 .parent = &wkup_32k_fck,
1545 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1546 .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
1547 .flags = CLOCK_IN_OMAP343X,
1548 .recalc = &followparent_recalc,
1551 static struct clk wdt2_fck = {
1553 .parent = &wkup_32k_fck,
1554 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1555 .enable_bit = OMAP3430_EN_WDT2_SHIFT,
1556 .flags = CLOCK_IN_OMAP343X,
1557 .recalc = &followparent_recalc,
1560 static struct clk wkup_l4_ick = {
1561 .name = "wkup_l4_ick",
1563 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1564 .recalc = &followparent_recalc,
1567 static struct clk wdt2_ick = {
1569 .parent = &wkup_l4_ick,
1570 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1571 .enable_bit = OMAP3430_EN_WDT2_SHIFT,
1572 .flags = CLOCK_IN_OMAP343X,
1573 .recalc = &followparent_recalc,
1576 static struct clk wdt1_ick = {
1578 .parent = &wkup_l4_ick,
1579 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1580 .enable_bit = OMAP3430_EN_WDT1_SHIFT,
1581 .flags = CLOCK_IN_OMAP343X,
1582 .recalc = &followparent_recalc,
1585 static struct clk gpio1_ick = {
1586 .name = "gpio1_ick",
1587 .parent = &wkup_l4_ick,
1588 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1589 .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
1590 .flags = CLOCK_IN_OMAP343X,
1591 .recalc = &followparent_recalc,
1594 static struct clk omap_32ksync_ick = {
1595 .name = "omap_32ksync_ick",
1596 .parent = &wkup_l4_ick,
1597 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1598 .enable_bit = OMAP3430_EN_32KSYNC_SHIFT,
1599 .flags = CLOCK_IN_OMAP343X,
1600 .recalc = &followparent_recalc,
1603 static struct clk gpt12_ick = {
1604 .name = "gpt12_ick",
1605 .parent = &wkup_l4_ick,
1606 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1607 .enable_bit = OMAP3430_EN_GPT12_SHIFT,
1608 .flags = CLOCK_IN_OMAP343X,
1609 .recalc = &followparent_recalc,
1612 static struct clk gpt1_ick = {
1614 .parent = &wkup_l4_ick,
1615 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1616 .enable_bit = OMAP3430_EN_GPT1_SHIFT,
1617 .flags = CLOCK_IN_OMAP343X,
1618 .recalc = &followparent_recalc,
1623 /* PER clock domain */
1625 static struct clk per_96m_fck = {
1626 .name = "per_96m_fck",
1627 .parent = &omap_96m_alwon_fck,
1628 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1629 .recalc = &followparent_recalc,
1632 static struct clk per_48m_fck = {
1633 .name = "per_48m_fck",
1634 .parent = &omap_48m_fck,
1635 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1636 .recalc = &followparent_recalc,
1639 static struct clk uart3_fck = {
1640 .name = "uart3_fck",
1641 .parent = &per_48m_fck,
1642 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1643 .enable_bit = OMAP3430_EN_UART3_SHIFT,
1644 .flags = CLOCK_IN_OMAP343X,
1645 .recalc = &followparent_recalc,
1648 static struct clk gpt2_fck = {
1650 .init = &omap2_init_clksel_parent,
1651 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1652 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
1653 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1654 .clksel_mask = OMAP3430_CLKSEL_GPT2_MASK,
1655 .clksel = omap343x_gpt_clksel,
1656 .flags = CLOCK_IN_OMAP343X,
1657 .recalc = &omap2_clksel_recalc,
1660 static struct clk gpt3_fck = {
1662 .init = &omap2_init_clksel_parent,
1663 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1664 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
1665 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1666 .clksel_mask = OMAP3430_CLKSEL_GPT3_MASK,
1667 .clksel = omap343x_gpt_clksel,
1668 .flags = CLOCK_IN_OMAP343X,
1669 .recalc = &omap2_clksel_recalc,
1672 static struct clk gpt4_fck = {
1674 .init = &omap2_init_clksel_parent,
1675 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1676 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
1677 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1678 .clksel_mask = OMAP3430_CLKSEL_GPT4_MASK,
1679 .clksel = omap343x_gpt_clksel,
1680 .flags = CLOCK_IN_OMAP343X,
1681 .recalc = &omap2_clksel_recalc,
1684 static struct clk gpt5_fck = {
1686 .init = &omap2_init_clksel_parent,
1687 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1688 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
1689 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1690 .clksel_mask = OMAP3430_CLKSEL_GPT5_MASK,
1691 .clksel = omap343x_gpt_clksel,
1692 .flags = CLOCK_IN_OMAP343X,
1693 .recalc = &omap2_clksel_recalc,
1696 static struct clk gpt6_fck = {
1698 .init = &omap2_init_clksel_parent,
1699 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1700 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
1701 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1702 .clksel_mask = OMAP3430_CLKSEL_GPT6_MASK,
1703 .clksel = omap343x_gpt_clksel,
1704 .flags = CLOCK_IN_OMAP343X,
1705 .recalc = &omap2_clksel_recalc,
1708 static struct clk gpt7_fck = {
1710 .init = &omap2_init_clksel_parent,
1711 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1712 .enable_bit = OMAP3430_EN_GPT7_SHIFT,
1713 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1714 .clksel_mask = OMAP3430_CLKSEL_GPT7_MASK,
1715 .clksel = omap343x_gpt_clksel,
1716 .flags = CLOCK_IN_OMAP343X,
1717 .recalc = &omap2_clksel_recalc,
1720 static struct clk gpt8_fck = {
1722 .init = &omap2_init_clksel_parent,
1723 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1724 .enable_bit = OMAP3430_EN_GPT8_SHIFT,
1725 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1726 .clksel_mask = OMAP3430_CLKSEL_GPT8_MASK,
1727 .clksel = omap343x_gpt_clksel,
1728 .flags = CLOCK_IN_OMAP343X,
1729 .recalc = &omap2_clksel_recalc,
1732 static struct clk gpt9_fck = {
1734 .init = &omap2_init_clksel_parent,
1735 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1736 .enable_bit = OMAP3430_EN_GPT9_SHIFT,
1737 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
1738 .clksel_mask = OMAP3430_CLKSEL_GPT9_MASK,
1739 .clksel = omap343x_gpt_clksel,
1740 .flags = CLOCK_IN_OMAP343X,
1741 .recalc = &omap2_clksel_recalc,
1744 static struct clk per_32k_alwon_fck = {
1745 .name = "per_32k_alwon_fck",
1746 .parent = &omap_32k_fck,
1747 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1748 .recalc = &followparent_recalc,
1751 static struct clk gpio6_fck = {
1752 .name = "gpio6_fck",
1753 .parent = &per_32k_alwon_fck,
1754 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1755 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
1756 .flags = CLOCK_IN_OMAP343X,
1757 .recalc = &followparent_recalc,
1760 static struct clk gpio5_fck = {
1761 .name = "gpio5_fck",
1762 .parent = &per_32k_alwon_fck,
1763 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1764 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
1765 .flags = CLOCK_IN_OMAP343X,
1766 .recalc = &followparent_recalc,
1769 static struct clk gpio4_fck = {
1770 .name = "gpio4_fck",
1771 .parent = &per_32k_alwon_fck,
1772 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1773 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
1774 .flags = CLOCK_IN_OMAP343X,
1775 .recalc = &followparent_recalc,
1778 static struct clk gpio3_fck = {
1779 .name = "gpio3_fck",
1780 .parent = &per_32k_alwon_fck,
1781 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1782 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
1783 .flags = CLOCK_IN_OMAP343X,
1784 .recalc = &followparent_recalc,
1787 static struct clk gpio2_fck = {
1788 .name = "gpio2_fck",
1789 .parent = &per_32k_alwon_fck,
1790 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1791 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
1792 .flags = CLOCK_IN_OMAP343X,
1793 .recalc = &followparent_recalc,
1796 static struct clk wdt3_fck = {
1798 .parent = &per_32k_alwon_fck,
1799 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
1800 .enable_bit = OMAP3430_EN_WDT3_SHIFT,
1801 .flags = CLOCK_IN_OMAP343X,
1802 .recalc = &followparent_recalc,
1805 static struct clk per_l4_ick = {
1806 .name = "per_l4_ick",
1808 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
1809 .recalc = &followparent_recalc,
1812 static struct clk gpio6_ick = {
1813 .name = "gpio6_ick",
1814 .parent = &per_l4_ick,
1815 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1816 .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
1817 .flags = CLOCK_IN_OMAP343X,
1818 .recalc = &followparent_recalc,
1821 static struct clk gpio5_ick = {
1822 .name = "gpio5_ick",
1823 .parent = &per_l4_ick,
1824 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1825 .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
1826 .flags = CLOCK_IN_OMAP343X,
1827 .recalc = &followparent_recalc,
1830 static struct clk gpio4_ick = {
1831 .name = "gpio4_ick",
1832 .parent = &per_l4_ick,
1833 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1834 .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
1835 .flags = CLOCK_IN_OMAP343X,
1836 .recalc = &followparent_recalc,
1839 static struct clk gpio3_ick = {
1840 .name = "gpio3_ick",
1841 .parent = &per_l4_ick,
1842 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1843 .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
1844 .flags = CLOCK_IN_OMAP343X,
1845 .recalc = &followparent_recalc,
1848 static struct clk gpio2_ick = {
1849 .name = "gpio2_ick",
1850 .parent = &per_l4_ick,
1851 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1852 .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
1853 .flags = CLOCK_IN_OMAP343X,
1854 .recalc = &followparent_recalc,
1857 static struct clk wdt3_ick = {
1859 .parent = &per_l4_ick,
1860 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1861 .enable_bit = OMAP3430_EN_WDT3_SHIFT,
1862 .flags = CLOCK_IN_OMAP343X,
1863 .recalc = &followparent_recalc,
1866 static struct clk uart3_ick = {
1867 .name = "uart3_ick",
1868 .parent = &per_l4_ick,
1869 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1870 .enable_bit = OMAP3430_EN_UART3_SHIFT,
1871 .flags = CLOCK_IN_OMAP343X,
1872 .recalc = &followparent_recalc,
1875 static struct clk gpt9_ick = {
1877 .parent = &per_l4_ick,
1878 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1879 .enable_bit = OMAP3430_EN_GPT9_SHIFT,
1880 .flags = CLOCK_IN_OMAP343X,
1881 .recalc = &followparent_recalc,
1884 static struct clk gpt8_ick = {
1886 .parent = &per_l4_ick,
1887 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1888 .enable_bit = OMAP3430_EN_GPT8_SHIFT,
1889 .flags = CLOCK_IN_OMAP343X,
1890 .recalc = &followparent_recalc,
1893 static struct clk gpt7_ick = {
1895 .parent = &per_l4_ick,
1896 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1897 .enable_bit = OMAP3430_EN_GPT7_SHIFT,
1898 .flags = CLOCK_IN_OMAP343X,
1899 .recalc = &followparent_recalc,
1902 static struct clk gpt6_ick = {
1904 .parent = &per_l4_ick,
1905 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1906 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
1907 .flags = CLOCK_IN_OMAP343X,
1908 .recalc = &followparent_recalc,
1911 static struct clk gpt5_ick = {
1913 .parent = &per_l4_ick,
1914 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1915 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
1916 .flags = CLOCK_IN_OMAP343X,
1917 .recalc = &followparent_recalc,
1920 static struct clk gpt4_ick = {
1922 .parent = &per_l4_ick,
1923 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1924 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
1925 .flags = CLOCK_IN_OMAP343X,
1926 .recalc = &followparent_recalc,
1929 static struct clk gpt3_ick = {
1931 .parent = &per_l4_ick,
1932 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1933 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
1934 .flags = CLOCK_IN_OMAP343X,
1935 .recalc = &followparent_recalc,
1938 static struct clk gpt2_ick = {
1940 .parent = &per_l4_ick,
1941 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1942 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
1943 .flags = CLOCK_IN_OMAP343X,
1944 .recalc = &followparent_recalc,
1947 static struct clk mcbsp2_ick = {
1948 .name = "mcbsp2_ick",
1949 .parent = &per_l4_ick,
1950 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1951 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
1952 .flags = CLOCK_IN_OMAP343X,
1953 .recalc = &followparent_recalc,
1956 static struct clk mcbsp3_ick = {
1957 .name = "mcbsp3_ick",
1958 .parent = &per_l4_ick,
1959 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1960 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
1961 .flags = CLOCK_IN_OMAP343X,
1962 .recalc = &followparent_recalc,
1965 static struct clk mcbsp4_ick = {
1966 .name = "mcbsp4_ick",
1967 .parent = &per_l4_ick,
1968 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
1969 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
1970 .flags = CLOCK_IN_OMAP343X,
1971 .recalc = &followparent_recalc,
1974 static const struct clksel mcbsp_234_clksel[] = {
1975 { .parent = &per_96m_fck, .rates = common_mcbsp_96m_rates },
1976 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1980 static struct clk mcbsp2_fck = {
1981 .name = "mcbsp2_fck",
1982 .init = &omap2_init_clksel_parent,
1983 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1984 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
1985 .clksel_reg = OMAP343X_CTRL_REGADDR(CONTROL_DEVCONF0),
1986 .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
1987 .clksel = mcbsp_234_clksel,
1988 .flags = CLOCK_IN_OMAP343X,
1989 .recalc = &omap2_clksel_recalc,
1992 static struct clk mcbsp3_fck = {
1993 .name = "mcbsp3_fck",
1994 .init = &omap2_init_clksel_parent,
1995 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1996 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
1997 .clksel_reg = OMAP343X_CTRL_REGADDR(CONTROL_DEVCONF1),
1998 .clksel_mask = OMAP2_MCBSP3_CLKS_MASK,
1999 .clksel = mcbsp_234_clksel,
2000 .flags = CLOCK_IN_OMAP343X,
2001 .recalc = &omap2_clksel_recalc,
2004 static struct clk mcbsp4_fck = {
2005 .name = "mcbsp4_fck",
2006 .init = &omap2_init_clksel_parent,
2007 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
2008 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
2009 .clksel_reg = OMAP343X_CTRL_REGADDR(CONTROL_DEVCONF1),
2010 .clksel_mask = OMAP2_MCBSP4_CLKS_MASK,
2011 .clksel = mcbsp_234_clksel,
2012 .flags = CLOCK_IN_OMAP343X,
2013 .recalc = &omap2_clksel_recalc,
2018 /* More information: ARM Cortex-A8 Technical Reference Manual, sect 10.1 */
2020 static const struct clksel_rate emu_src_sys_rates[] = {
2021 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
2025 static const struct clksel_rate emu_src_core_rates[] = {
2026 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
2030 static const struct clksel_rate emu_src_per_rates[] = {
2031 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
2035 static const struct clksel_rate emu_src_mpu_rates[] = {
2036 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
2040 static const struct clksel emu_src_clksel[] = {
2041 { .parent = &sys_ck, .rates = emu_src_sys_rates },
2042 { .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
2043 { .parent = &emu_per_alwon_ck, .rates = emu_src_per_rates },
2044 { .parent = &emu_mpu_alwon_ck, .rates = emu_src_mpu_rates },
2049 * Like the clkout_src clocks, emu_src_clk is a virtual clock, existing only
2050 * to switch the source of some of the EMU clocks.
2051 * XXX Are there CLKEN bits for these EMU clks?
2053 static struct clk emu_src_ck = {
2054 .name = "emu_src_ck",
2055 .init = &omap2_init_clksel_parent,
2056 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2057 .clksel_mask = OMAP3430_MUX_CTRL_MASK,
2058 .clksel = emu_src_clksel,
2059 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
2060 .recalc = &omap2_clksel_recalc,
2063 static const struct clksel_rate pclk_emu_rates[] = {
2064 { .div = 2, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
2065 { .div = 3, .val = 3, .flags = RATE_IN_343X },
2066 { .div = 4, .val = 4, .flags = RATE_IN_343X },
2067 { .div = 6, .val = 6, .flags = RATE_IN_343X },
2071 static const struct clksel pclk_emu_clksel[] = {
2072 { .parent = &emu_src_ck, .rates = pclk_emu_rates },
2076 static struct clk pclk_fck = {
2078 .init = &omap2_init_clksel_parent,
2079 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2080 .clksel_mask = OMAP3430_CLKSEL_PCLK_MASK,
2081 .clksel = pclk_emu_clksel,
2082 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
2083 .recalc = &omap2_clksel_recalc,
2086 static const struct clksel_rate pclkx2_emu_rates[] = {
2087 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
2088 { .div = 2, .val = 2, .flags = RATE_IN_343X },
2089 { .div = 3, .val = 3, .flags = RATE_IN_343X },
2093 static const struct clksel pclkx2_emu_clksel[] = {
2094 { .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
2098 static struct clk pclkx2_fck = {
2099 .name = "pclkx2_fck",
2100 .init = &omap2_init_clksel_parent,
2101 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2102 .clksel_mask = OMAP3430_CLKSEL_PCLKX2_MASK,
2103 .clksel = pclkx2_emu_clksel,
2104 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
2105 .recalc = &omap2_clksel_recalc,
2108 static const struct clksel atclk_emu_clksel[] = {
2109 { .parent = &emu_src_ck, .rates = div2_rates },
2113 static struct clk atclk_fck = {
2114 .name = "atclk_fck",
2115 .init = &omap2_init_clksel_parent,
2116 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2117 .clksel_mask = OMAP3430_CLKSEL_ATCLK_MASK,
2118 .clksel = atclk_emu_clksel,
2119 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
2120 .recalc = &omap2_clksel_recalc,
2123 static struct clk traceclk_src_fck = {
2124 .name = "traceclk_src_fck",
2125 .init = &omap2_init_clksel_parent,
2126 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2127 .clksel_mask = OMAP3430_TRACE_MUX_CTRL_MASK,
2128 .clksel = emu_src_clksel,
2129 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
2130 .recalc = &omap2_clksel_recalc,
2133 static const struct clksel_rate traceclk_rates[] = {
2134 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
2135 { .div = 2, .val = 2, .flags = RATE_IN_343X },
2136 { .div = 4, .val = 4, .flags = RATE_IN_343X },
2140 static const struct clksel traceclk_clksel[] = {
2141 { .parent = &traceclk_src_fck, .rates = traceclk_rates },
2145 static struct clk traceclk_fck = {
2146 .name = "traceclk_fck",
2147 .init = &omap2_init_clksel_parent,
2148 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2149 .clksel_mask = OMAP3430_CLKSEL_TRACECLK_MASK,
2150 .clksel = traceclk_clksel,
2151 .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
2152 .recalc = &omap2_clksel_recalc,
2157 /* SmartReflex fclk (VDD1) */
2158 static struct clk sr1_fck = {
2161 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2162 .enable_bit = OMAP3430_EN_SR1_SHIFT,
2163 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
2164 .recalc = &followparent_recalc,
2167 /* SmartReflex fclk (VDD2) */
2168 static struct clk sr2_fck = {
2171 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2172 .enable_bit = OMAP3430_EN_SR2_SHIFT,
2173 .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
2174 .recalc = &followparent_recalc,
2177 static struct clk sr_l4_ick = {
2178 .name = "sr_l4_ick",
2180 .flags = CLOCK_IN_OMAP343X,
2181 .recalc = &followparent_recalc,
2184 /* SECURE_32K_FCK clocks */
2186 static struct clk gpt12_fck = {
2187 .name = "gpt12_fck",
2188 .parent = &secure_32k_fck,
2189 .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
2190 .recalc = &followparent_recalc,
2193 static struct clk wdt1_fck = {
2195 .parent = &secure_32k_fck,
2196 .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
2197 .recalc = &followparent_recalc,
2201 static struct clk *onchip_34xx_clks[] __initdata = {
2225 &omap_96m_alwon_fck,