ARM: OMAP3: PM: remove access to PRM_VOLTCTRL register
[pandora-kernel.git] / arch / arm / mach-omap2 / clock2430_data.c
1 /*
2  * OMAP2430 clock data
3  *
4  * Copyright (C) 2005-2009 Texas Instruments, Inc.
5  * Copyright (C) 2004-2011 Nokia Corporation
6  *
7  * Contacts:
8  * Richard Woodruff <r-woodruff2@ti.com>
9  * Paul Walmsley
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2 as
13  * published by the Free Software Foundation.
14  */
15
16 #include <linux/kernel.h>
17 #include <linux/clk.h>
18 #include <linux/list.h>
19
20 #include <plat/clkdev_omap.h>
21
22 #include "clock.h"
23 #include "clock2xxx.h"
24 #include "opp2xxx.h"
25 #include "cm2xxx_3xxx.h"
26 #include "prm2xxx_3xxx.h"
27 #include "prm-regbits-24xx.h"
28 #include "cm-regbits-24xx.h"
29 #include "sdrc.h"
30 #include "control.h"
31
32 #define OMAP_CM_REGADDR                 OMAP2430_CM_REGADDR
33
34 /*
35  * 2430 clock tree.
36  *
37  * NOTE:In many cases here we are assigning a 'default' parent. In
38  *      many cases the parent is selectable. The set parent calls will
39  *      also switch sources.
40  *
41  *      Several sources are given initial rates which may be wrong, this will
42  *      be fixed up in the init func.
43  *
44  *      Things are broadly separated below by clock domains. It is
45  *      noteworthy that most peripherals have dependencies on multiple clock
46  *      domains. Many get their interface clocks from the L4 domain, but get
47  *      functional clocks from fixed sources or other core domain derived
48  *      clocks.
49  */
50
51 /* Base external input clocks */
52 static struct clk func_32k_ck = {
53         .name           = "func_32k_ck",
54         .ops            = &clkops_null,
55         .rate           = 32768,
56         .clkdm_name     = "wkup_clkdm",
57 };
58
59 static struct clk secure_32k_ck = {
60         .name           = "secure_32k_ck",
61         .ops            = &clkops_null,
62         .rate           = 32768,
63         .clkdm_name     = "wkup_clkdm",
64 };
65
66 /* Typical 12/13MHz in standalone mode, will be 26Mhz in chassis mode */
67 static struct clk osc_ck = {            /* (*12, *13, 19.2, *26, 38.4)MHz */
68         .name           = "osc_ck",
69         .ops            = &clkops_oscck,
70         .clkdm_name     = "wkup_clkdm",
71         .recalc         = &omap2_osc_clk_recalc,
72 };
73
74 /* Without modem likely 12MHz, with modem likely 13MHz */
75 static struct clk sys_ck = {            /* (*12, *13, 19.2, 26, 38.4)MHz */
76         .name           = "sys_ck",             /* ~ ref_clk also */
77         .ops            = &clkops_null,
78         .parent         = &osc_ck,
79         .clkdm_name     = "wkup_clkdm",
80         .recalc         = &omap2xxx_sys_clk_recalc,
81 };
82
83 static struct clk alt_ck = {            /* Typical 54M or 48M, may not exist */
84         .name           = "alt_ck",
85         .ops            = &clkops_null,
86         .rate           = 54000000,
87         .clkdm_name     = "wkup_clkdm",
88 };
89
90 /* Optional external clock input for McBSP CLKS */
91 static struct clk mcbsp_clks = {
92         .name           = "mcbsp_clks",
93         .ops            = &clkops_null,
94 };
95
96 /*
97  * Analog domain root source clocks
98  */
99
100 /* dpll_ck, is broken out in to special cases through clksel */
101 /* REVISIT: Rate changes on dpll_ck trigger a full set change.  ...
102  * deal with this
103  */
104
105 static struct dpll_data dpll_dd = {
106         .mult_div1_reg          = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
107         .mult_mask              = OMAP24XX_DPLL_MULT_MASK,
108         .div1_mask              = OMAP24XX_DPLL_DIV_MASK,
109         .clk_bypass             = &sys_ck,
110         .clk_ref                = &sys_ck,
111         .control_reg            = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
112         .enable_mask            = OMAP24XX_EN_DPLL_MASK,
113         .max_multiplier         = 1023,
114         .min_divider            = 1,
115         .max_divider            = 16,
116 };
117
118 /*
119  * XXX Cannot add round_rate here yet, as this is still a composite clock,
120  * not just a DPLL
121  */
122 static struct clk dpll_ck = {
123         .name           = "dpll_ck",
124         .ops            = &clkops_omap2xxx_dpll_ops,
125         .parent         = &sys_ck,              /* Can be func_32k also */
126         .dpll_data      = &dpll_dd,
127         .clkdm_name     = "wkup_clkdm",
128         .recalc         = &omap2_dpllcore_recalc,
129         .set_rate       = &omap2_reprogram_dpllcore,
130 };
131
132 static struct clk apll96_ck = {
133         .name           = "apll96_ck",
134         .ops            = &clkops_apll96,
135         .parent         = &sys_ck,
136         .rate           = 96000000,
137         .flags          = ENABLE_ON_INIT,
138         .clkdm_name     = "wkup_clkdm",
139         .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
140         .enable_bit     = OMAP24XX_EN_96M_PLL_SHIFT,
141 };
142
143 static struct clk apll54_ck = {
144         .name           = "apll54_ck",
145         .ops            = &clkops_apll54,
146         .parent         = &sys_ck,
147         .rate           = 54000000,
148         .flags          = ENABLE_ON_INIT,
149         .clkdm_name     = "wkup_clkdm",
150         .enable_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
151         .enable_bit     = OMAP24XX_EN_54M_PLL_SHIFT,
152 };
153
154 /*
155  * PRCM digital base sources
156  */
157
158 /* func_54m_ck */
159
160 static const struct clksel_rate func_54m_apll54_rates[] = {
161         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
162         { .div = 0 },
163 };
164
165 static const struct clksel_rate func_54m_alt_rates[] = {
166         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
167         { .div = 0 },
168 };
169
170 static const struct clksel func_54m_clksel[] = {
171         { .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
172         { .parent = &alt_ck,    .rates = func_54m_alt_rates, },
173         { .parent = NULL },
174 };
175
176 static struct clk func_54m_ck = {
177         .name           = "func_54m_ck",
178         .ops            = &clkops_null,
179         .parent         = &apll54_ck,   /* can also be alt_clk */
180         .clkdm_name     = "wkup_clkdm",
181         .init           = &omap2_init_clksel_parent,
182         .clksel_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
183         .clksel_mask    = OMAP24XX_54M_SOURCE_MASK,
184         .clksel         = func_54m_clksel,
185         .recalc         = &omap2_clksel_recalc,
186 };
187
188 static struct clk core_ck = {
189         .name           = "core_ck",
190         .ops            = &clkops_null,
191         .parent         = &dpll_ck,             /* can also be 32k */
192         .clkdm_name     = "wkup_clkdm",
193         .recalc         = &followparent_recalc,
194 };
195
196 /* func_96m_ck */
197 static const struct clksel_rate func_96m_apll96_rates[] = {
198         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
199         { .div = 0 },
200 };
201
202 static const struct clksel_rate func_96m_alt_rates[] = {
203         { .div = 1, .val = 1, .flags = RATE_IN_243X },
204         { .div = 0 },
205 };
206
207 static const struct clksel func_96m_clksel[] = {
208         { .parent = &apll96_ck, .rates = func_96m_apll96_rates },
209         { .parent = &alt_ck,    .rates = func_96m_alt_rates },
210         { .parent = NULL }
211 };
212
213 static struct clk func_96m_ck = {
214         .name           = "func_96m_ck",
215         .ops            = &clkops_null,
216         .parent         = &apll96_ck,
217         .clkdm_name     = "wkup_clkdm",
218         .init           = &omap2_init_clksel_parent,
219         .clksel_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
220         .clksel_mask    = OMAP2430_96M_SOURCE_MASK,
221         .clksel         = func_96m_clksel,
222         .recalc         = &omap2_clksel_recalc,
223 };
224
225 /* func_48m_ck */
226
227 static const struct clksel_rate func_48m_apll96_rates[] = {
228         { .div = 2, .val = 0, .flags = RATE_IN_24XX },
229         { .div = 0 },
230 };
231
232 static const struct clksel_rate func_48m_alt_rates[] = {
233         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
234         { .div = 0 },
235 };
236
237 static const struct clksel func_48m_clksel[] = {
238         { .parent = &apll96_ck, .rates = func_48m_apll96_rates },
239         { .parent = &alt_ck, .rates = func_48m_alt_rates },
240         { .parent = NULL }
241 };
242
243 static struct clk func_48m_ck = {
244         .name           = "func_48m_ck",
245         .ops            = &clkops_null,
246         .parent         = &apll96_ck,    /* 96M or Alt */
247         .clkdm_name     = "wkup_clkdm",
248         .init           = &omap2_init_clksel_parent,
249         .clksel_reg     = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
250         .clksel_mask    = OMAP24XX_48M_SOURCE_MASK,
251         .clksel         = func_48m_clksel,
252         .recalc         = &omap2_clksel_recalc,
253         .round_rate     = &omap2_clksel_round_rate,
254         .set_rate       = &omap2_clksel_set_rate
255 };
256
257 static struct clk func_12m_ck = {
258         .name           = "func_12m_ck",
259         .ops            = &clkops_null,
260         .parent         = &func_48m_ck,
261         .fixed_div      = 4,
262         .clkdm_name     = "wkup_clkdm",
263         .recalc         = &omap_fixed_divisor_recalc,
264 };
265
266 /* Secure timer, only available in secure mode */
267 static struct clk wdt1_osc_ck = {
268         .name           = "ck_wdt1_osc",
269         .ops            = &clkops_null, /* RMK: missing? */
270         .parent         = &osc_ck,
271         .recalc         = &followparent_recalc,
272 };
273
274 /*
275  * The common_clkout* clksel_rate structs are common to
276  * sys_clkout, sys_clkout_src, sys_clkout2, and sys_clkout2_src.
277  * sys_clkout2_* are 2420-only, so the
278  * clksel_rate flags fields are inaccurate for those clocks. This is
279  * harmless since access to those clocks are gated by the struct clk
280  * flags fields, which mark them as 2420-only.
281  */
282 static const struct clksel_rate common_clkout_src_core_rates[] = {
283         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
284         { .div = 0 }
285 };
286
287 static const struct clksel_rate common_clkout_src_sys_rates[] = {
288         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
289         { .div = 0 }
290 };
291
292 static const struct clksel_rate common_clkout_src_96m_rates[] = {
293         { .div = 1, .val = 2, .flags = RATE_IN_24XX },
294         { .div = 0 }
295 };
296
297 static const struct clksel_rate common_clkout_src_54m_rates[] = {
298         { .div = 1, .val = 3, .flags = RATE_IN_24XX },
299         { .div = 0 }
300 };
301
302 static const struct clksel common_clkout_src_clksel[] = {
303         { .parent = &core_ck,     .rates = common_clkout_src_core_rates },
304         { .parent = &sys_ck,      .rates = common_clkout_src_sys_rates },
305         { .parent = &func_96m_ck, .rates = common_clkout_src_96m_rates },
306         { .parent = &func_54m_ck, .rates = common_clkout_src_54m_rates },
307         { .parent = NULL }
308 };
309
310 static struct clk sys_clkout_src = {
311         .name           = "sys_clkout_src",
312         .ops            = &clkops_omap2_dflt,
313         .parent         = &func_54m_ck,
314         .clkdm_name     = "wkup_clkdm",
315         .enable_reg     = OMAP2430_PRCM_CLKOUT_CTRL,
316         .enable_bit     = OMAP24XX_CLKOUT_EN_SHIFT,
317         .init           = &omap2_init_clksel_parent,
318         .clksel_reg     = OMAP2430_PRCM_CLKOUT_CTRL,
319         .clksel_mask    = OMAP24XX_CLKOUT_SOURCE_MASK,
320         .clksel         = common_clkout_src_clksel,
321         .recalc         = &omap2_clksel_recalc,
322         .round_rate     = &omap2_clksel_round_rate,
323         .set_rate       = &omap2_clksel_set_rate
324 };
325
326 static const struct clksel_rate common_clkout_rates[] = {
327         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
328         { .div = 2, .val = 1, .flags = RATE_IN_24XX },
329         { .div = 4, .val = 2, .flags = RATE_IN_24XX },
330         { .div = 8, .val = 3, .flags = RATE_IN_24XX },
331         { .div = 16, .val = 4, .flags = RATE_IN_24XX },
332         { .div = 0 },
333 };
334
335 static const struct clksel sys_clkout_clksel[] = {
336         { .parent = &sys_clkout_src, .rates = common_clkout_rates },
337         { .parent = NULL }
338 };
339
340 static struct clk sys_clkout = {
341         .name           = "sys_clkout",
342         .ops            = &clkops_null,
343         .parent         = &sys_clkout_src,
344         .clkdm_name     = "wkup_clkdm",
345         .clksel_reg     = OMAP2430_PRCM_CLKOUT_CTRL,
346         .clksel_mask    = OMAP24XX_CLKOUT_DIV_MASK,
347         .clksel         = sys_clkout_clksel,
348         .recalc         = &omap2_clksel_recalc,
349         .round_rate     = &omap2_clksel_round_rate,
350         .set_rate       = &omap2_clksel_set_rate
351 };
352
353 static struct clk emul_ck = {
354         .name           = "emul_ck",
355         .ops            = &clkops_omap2_dflt,
356         .parent         = &func_54m_ck,
357         .clkdm_name     = "wkup_clkdm",
358         .enable_reg     = OMAP2430_PRCM_CLKEMUL_CTRL,
359         .enable_bit     = OMAP24XX_EMULATION_EN_SHIFT,
360         .recalc         = &followparent_recalc,
361
362 };
363
364 /*
365  * MPU clock domain
366  *      Clocks:
367  *              MPU_FCLK, MPU_ICLK
368  *              INT_M_FCLK, INT_M_I_CLK
369  *
370  * - Individual clocks are hardware managed.
371  * - Base divider comes from: CM_CLKSEL_MPU
372  *
373  */
374 static const struct clksel_rate mpu_core_rates[] = {
375         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
376         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
377         { .div = 0 },
378 };
379
380 static const struct clksel mpu_clksel[] = {
381         { .parent = &core_ck, .rates = mpu_core_rates },
382         { .parent = NULL }
383 };
384
385 static struct clk mpu_ck = {    /* Control cpu */
386         .name           = "mpu_ck",
387         .ops            = &clkops_null,
388         .parent         = &core_ck,
389         .clkdm_name     = "mpu_clkdm",
390         .init           = &omap2_init_clksel_parent,
391         .clksel_reg     = OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL),
392         .clksel_mask    = OMAP24XX_CLKSEL_MPU_MASK,
393         .clksel         = mpu_clksel,
394         .recalc         = &omap2_clksel_recalc,
395 };
396
397 /*
398  * DSP (2430-IVA2.1) clock domain
399  * Clocks:
400  *      2430: IVA2.1_FCLK (really just DSP_FCLK), IVA2.1_ICLK
401  *
402  * Won't be too specific here. The core clock comes into this block
403  * it is divided then tee'ed. One branch goes directly to xyz enable
404  * controls. The other branch gets further divided by 2 then possibly
405  * routed into a synchronizer and out of clocks abc.
406  */
407 static const struct clksel_rate dsp_fck_core_rates[] = {
408         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
409         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
410         { .div = 3, .val = 3, .flags = RATE_IN_24XX },
411         { .div = 4, .val = 4, .flags = RATE_IN_24XX },
412         { .div = 0 },
413 };
414
415 static const struct clksel dsp_fck_clksel[] = {
416         { .parent = &core_ck, .rates = dsp_fck_core_rates },
417         { .parent = NULL }
418 };
419
420 static struct clk dsp_fck = {
421         .name           = "dsp_fck",
422         .ops            = &clkops_omap2_dflt_wait,
423         .parent         = &core_ck,
424         .clkdm_name     = "dsp_clkdm",
425         .enable_reg     = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
426         .enable_bit     = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
427         .clksel_reg     = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
428         .clksel_mask    = OMAP24XX_CLKSEL_DSP_MASK,
429         .clksel         = dsp_fck_clksel,
430         .recalc         = &omap2_clksel_recalc,
431 };
432
433 static const struct clksel dsp_ick_clksel[] = {
434         { .parent = &dsp_fck, .rates = dsp_ick_rates },
435         { .parent = NULL }
436 };
437
438 /* 2430 only - EN_DSP controls both dsp fclk and iclk on 2430 */
439 static struct clk iva2_1_ick = {
440         .name           = "iva2_1_ick",
441         .ops            = &clkops_omap2_dflt_wait,
442         .parent         = &dsp_fck,
443         .clkdm_name     = "dsp_clkdm",
444         .enable_reg     = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
445         .enable_bit     = OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
446         .clksel_reg     = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
447         .clksel_mask    = OMAP24XX_CLKSEL_DSP_IF_MASK,
448         .clksel         = dsp_ick_clksel,
449         .recalc         = &omap2_clksel_recalc,
450 };
451
452 /*
453  * L3 clock domain
454  * L3 clocks are used for both interface and functional clocks to
455  * multiple entities. Some of these clocks are completely managed
456  * by hardware, and some others allow software control. Hardware
457  * managed ones general are based on directly CLK_REQ signals and
458  * various auto idle settings. The functional spec sets many of these
459  * as 'tie-high' for their enables.
460  *
461  * I-CLOCKS:
462  *      L3-Interconnect, SMS, GPMC, SDRC, OCM_RAM, OCM_ROM, SDMA
463  *      CAM, HS-USB.
464  * F-CLOCK
465  *      SSI.
466  *
467  * GPMC memories and SDRC have timing and clock sensitive registers which
468  * may very well need notification when the clock changes. Currently for low
469  * operating points, these are taken care of in sleep.S.
470  */
471 static const struct clksel_rate core_l3_core_rates[] = {
472         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
473         { .div = 4, .val = 4, .flags = RATE_IN_24XX },
474         { .div = 6, .val = 6, .flags = RATE_IN_24XX },
475         { .div = 0 }
476 };
477
478 static const struct clksel core_l3_clksel[] = {
479         { .parent = &core_ck, .rates = core_l3_core_rates },
480         { .parent = NULL }
481 };
482
483 static struct clk core_l3_ck = {        /* Used for ick and fck, interconnect */
484         .name           = "core_l3_ck",
485         .ops            = &clkops_null,
486         .parent         = &core_ck,
487         .clkdm_name     = "core_l3_clkdm",
488         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
489         .clksel_mask    = OMAP24XX_CLKSEL_L3_MASK,
490         .clksel         = core_l3_clksel,
491         .recalc         = &omap2_clksel_recalc,
492 };
493
494 /* usb_l4_ick */
495 static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
496         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
497         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
498         { .div = 4, .val = 4, .flags = RATE_IN_24XX },
499         { .div = 0 }
500 };
501
502 static const struct clksel usb_l4_ick_clksel[] = {
503         { .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
504         { .parent = NULL },
505 };
506
507 /* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */
508 static struct clk usb_l4_ick = {        /* FS-USB interface clock */
509         .name           = "usb_l4_ick",
510         .ops            = &clkops_omap2_iclk_dflt_wait,
511         .parent         = &core_l3_ck,
512         .clkdm_name     = "core_l4_clkdm",
513         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
514         .enable_bit     = OMAP24XX_EN_USB_SHIFT,
515         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
516         .clksel_mask    = OMAP24XX_CLKSEL_USB_MASK,
517         .clksel         = usb_l4_ick_clksel,
518         .recalc         = &omap2_clksel_recalc,
519 };
520
521 /*
522  * L4 clock management domain
523  *
524  * This domain contains lots of interface clocks from the L4 interface, some
525  * functional clocks.   Fixed APLL functional source clocks are managed in
526  * this domain.
527  */
528 static const struct clksel_rate l4_core_l3_rates[] = {
529         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
530         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
531         { .div = 0 }
532 };
533
534 static const struct clksel l4_clksel[] = {
535         { .parent = &core_l3_ck, .rates = l4_core_l3_rates },
536         { .parent = NULL }
537 };
538
539 static struct clk l4_ck = {             /* used both as an ick and fck */
540         .name           = "l4_ck",
541         .ops            = &clkops_null,
542         .parent         = &core_l3_ck,
543         .clkdm_name     = "core_l4_clkdm",
544         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
545         .clksel_mask    = OMAP24XX_CLKSEL_L4_MASK,
546         .clksel         = l4_clksel,
547         .recalc         = &omap2_clksel_recalc,
548 };
549
550 /*
551  * SSI is in L3 management domain, its direct parent is core not l3,
552  * many core power domain entities are grouped into the L3 clock
553  * domain.
554  * SSI_SSR_FCLK, SSI_SST_FCLK, SSI_L4_ICLK
555  *
556  * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
557  */
558 static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
559         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
560         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
561         { .div = 3, .val = 3, .flags = RATE_IN_24XX },
562         { .div = 4, .val = 4, .flags = RATE_IN_24XX },
563         { .div = 5, .val = 5, .flags = RATE_IN_243X },
564         { .div = 0 }
565 };
566
567 static const struct clksel ssi_ssr_sst_fck_clksel[] = {
568         { .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
569         { .parent = NULL }
570 };
571
572 static struct clk ssi_ssr_sst_fck = {
573         .name           = "ssi_fck",
574         .ops            = &clkops_omap2_dflt_wait,
575         .parent         = &core_ck,
576         .clkdm_name     = "core_l3_clkdm",
577         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
578         .enable_bit     = OMAP24XX_EN_SSI_SHIFT,
579         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
580         .clksel_mask    = OMAP24XX_CLKSEL_SSI_MASK,
581         .clksel         = ssi_ssr_sst_fck_clksel,
582         .recalc         = &omap2_clksel_recalc,
583 };
584
585 /*
586  * Presumably this is the same as SSI_ICLK.
587  * TRM contradicts itself on what clockdomain SSI_ICLK is in
588  */
589 static struct clk ssi_l4_ick = {
590         .name           = "ssi_l4_ick",
591         .ops            = &clkops_omap2_iclk_dflt_wait,
592         .parent         = &l4_ck,
593         .clkdm_name     = "core_l4_clkdm",
594         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
595         .enable_bit     = OMAP24XX_EN_SSI_SHIFT,
596         .recalc         = &followparent_recalc,
597 };
598
599
600 /*
601  * GFX clock domain
602  *      Clocks:
603  * GFX_FCLK, GFX_ICLK
604  * GFX_CG1(2d), GFX_CG2(3d)
605  *
606  * GFX_FCLK runs from L3, and is divided by (1,2,3,4)
607  * The 2d and 3d clocks run at a hardware determined
608  * divided value of fclk.
609  *
610  */
611
612 /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
613 static const struct clksel gfx_fck_clksel[] = {
614         { .parent = &core_l3_ck, .rates = gfx_l3_rates },
615         { .parent = NULL },
616 };
617
618 static struct clk gfx_3d_fck = {
619         .name           = "gfx_3d_fck",
620         .ops            = &clkops_omap2_dflt_wait,
621         .parent         = &core_l3_ck,
622         .clkdm_name     = "gfx_clkdm",
623         .enable_reg     = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
624         .enable_bit     = OMAP24XX_EN_3D_SHIFT,
625         .clksel_reg     = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
626         .clksel_mask    = OMAP_CLKSEL_GFX_MASK,
627         .clksel         = gfx_fck_clksel,
628         .recalc         = &omap2_clksel_recalc,
629         .round_rate     = &omap2_clksel_round_rate,
630         .set_rate       = &omap2_clksel_set_rate
631 };
632
633 static struct clk gfx_2d_fck = {
634         .name           = "gfx_2d_fck",
635         .ops            = &clkops_omap2_dflt_wait,
636         .parent         = &core_l3_ck,
637         .clkdm_name     = "gfx_clkdm",
638         .enable_reg     = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
639         .enable_bit     = OMAP24XX_EN_2D_SHIFT,
640         .clksel_reg     = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
641         .clksel_mask    = OMAP_CLKSEL_GFX_MASK,
642         .clksel         = gfx_fck_clksel,
643         .recalc         = &omap2_clksel_recalc,
644 };
645
646 /* This interface clock does not have a CM_AUTOIDLE bit */
647 static struct clk gfx_ick = {
648         .name           = "gfx_ick",            /* From l3 */
649         .ops            = &clkops_omap2_dflt_wait,
650         .parent         = &core_l3_ck,
651         .clkdm_name     = "gfx_clkdm",
652         .enable_reg     = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
653         .enable_bit     = OMAP_EN_GFX_SHIFT,
654         .recalc         = &followparent_recalc,
655 };
656
657 /*
658  * Modem clock domain (2430)
659  *      CLOCKS:
660  *              MDM_OSC_CLK
661  *              MDM_ICLK
662  * These clocks are usable in chassis mode only.
663  */
664 static const struct clksel_rate mdm_ick_core_rates[] = {
665         { .div = 1, .val = 1, .flags = RATE_IN_243X },
666         { .div = 4, .val = 4, .flags = RATE_IN_243X },
667         { .div = 6, .val = 6, .flags = RATE_IN_243X },
668         { .div = 9, .val = 9, .flags = RATE_IN_243X },
669         { .div = 0 }
670 };
671
672 static const struct clksel mdm_ick_clksel[] = {
673         { .parent = &core_ck, .rates = mdm_ick_core_rates },
674         { .parent = NULL }
675 };
676
677 static struct clk mdm_ick = {           /* used both as a ick and fck */
678         .name           = "mdm_ick",
679         .ops            = &clkops_omap2_iclk_dflt_wait,
680         .parent         = &core_ck,
681         .clkdm_name     = "mdm_clkdm",
682         .enable_reg     = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN),
683         .enable_bit     = OMAP2430_CM_ICLKEN_MDM_EN_MDM_SHIFT,
684         .clksel_reg     = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_CLKSEL),
685         .clksel_mask    = OMAP2430_CLKSEL_MDM_MASK,
686         .clksel         = mdm_ick_clksel,
687         .recalc         = &omap2_clksel_recalc,
688 };
689
690 static struct clk mdm_osc_ck = {
691         .name           = "mdm_osc_ck",
692         .ops            = &clkops_omap2_mdmclk_dflt_wait,
693         .parent         = &osc_ck,
694         .clkdm_name     = "mdm_clkdm",
695         .enable_reg     = OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN),
696         .enable_bit     = OMAP2430_EN_OSC_SHIFT,
697         .recalc         = &followparent_recalc,
698 };
699
700 /*
701  * DSS clock domain
702  * CLOCKs:
703  * DSS_L4_ICLK, DSS_L3_ICLK,
704  * DSS_CLK1, DSS_CLK2, DSS_54MHz_CLK
705  *
706  * DSS is both initiator and target.
707  */
708 /* XXX Add RATE_NOT_VALIDATED */
709
710 static const struct clksel_rate dss1_fck_sys_rates[] = {
711         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
712         { .div = 0 }
713 };
714
715 static const struct clksel_rate dss1_fck_core_rates[] = {
716         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
717         { .div = 2, .val = 2, .flags = RATE_IN_24XX },
718         { .div = 3, .val = 3, .flags = RATE_IN_24XX },
719         { .div = 4, .val = 4, .flags = RATE_IN_24XX },
720         { .div = 5, .val = 5, .flags = RATE_IN_24XX },
721         { .div = 6, .val = 6, .flags = RATE_IN_24XX },
722         { .div = 8, .val = 8, .flags = RATE_IN_24XX },
723         { .div = 9, .val = 9, .flags = RATE_IN_24XX },
724         { .div = 12, .val = 12, .flags = RATE_IN_24XX },
725         { .div = 16, .val = 16, .flags = RATE_IN_24XX },
726         { .div = 0 }
727 };
728
729 static const struct clksel dss1_fck_clksel[] = {
730         { .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
731         { .parent = &core_ck, .rates = dss1_fck_core_rates },
732         { .parent = NULL },
733 };
734
735 static struct clk dss_ick = {           /* Enables both L3,L4 ICLK's */
736         .name           = "dss_ick",
737         .ops            = &clkops_omap2_iclk_dflt,
738         .parent         = &l4_ck,       /* really both l3 and l4 */
739         .clkdm_name     = "dss_clkdm",
740         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
741         .enable_bit     = OMAP24XX_EN_DSS1_SHIFT,
742         .recalc         = &followparent_recalc,
743 };
744
745 static struct clk dss1_fck = {
746         .name           = "dss1_fck",
747         .ops            = &clkops_omap2_dflt,
748         .parent         = &core_ck,             /* Core or sys */
749         .clkdm_name     = "dss_clkdm",
750         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
751         .enable_bit     = OMAP24XX_EN_DSS1_SHIFT,
752         .init           = &omap2_init_clksel_parent,
753         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
754         .clksel_mask    = OMAP24XX_CLKSEL_DSS1_MASK,
755         .clksel         = dss1_fck_clksel,
756         .recalc         = &omap2_clksel_recalc,
757 };
758
759 static const struct clksel_rate dss2_fck_sys_rates[] = {
760         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
761         { .div = 0 }
762 };
763
764 static const struct clksel_rate dss2_fck_48m_rates[] = {
765         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
766         { .div = 0 }
767 };
768
769 static const struct clksel dss2_fck_clksel[] = {
770         { .parent = &sys_ck,      .rates = dss2_fck_sys_rates },
771         { .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
772         { .parent = NULL }
773 };
774
775 static struct clk dss2_fck = {          /* Alt clk used in power management */
776         .name           = "dss2_fck",
777         .ops            = &clkops_omap2_dflt,
778         .parent         = &sys_ck,              /* fixed at sys_ck or 48MHz */
779         .clkdm_name     = "dss_clkdm",
780         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
781         .enable_bit     = OMAP24XX_EN_DSS2_SHIFT,
782         .init           = &omap2_init_clksel_parent,
783         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
784         .clksel_mask    = OMAP24XX_CLKSEL_DSS2_MASK,
785         .clksel         = dss2_fck_clksel,
786         .recalc         = &omap2_clksel_recalc,
787 };
788
789 static struct clk dss_54m_fck = {       /* Alt clk used in power management */
790         .name           = "dss_54m_fck",        /* 54m tv clk */
791         .ops            = &clkops_omap2_dflt_wait,
792         .parent         = &func_54m_ck,
793         .clkdm_name     = "dss_clkdm",
794         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
795         .enable_bit     = OMAP24XX_EN_TV_SHIFT,
796         .recalc         = &followparent_recalc,
797 };
798
799 static struct clk wu_l4_ick = {
800         .name           = "wu_l4_ick",
801         .ops            = &clkops_null,
802         .parent         = &sys_ck,
803         .clkdm_name     = "wkup_clkdm",
804         .recalc         = &followparent_recalc,
805 };
806
807 /*
808  * CORE power domain ICLK & FCLK defines.
809  * Many of the these can have more than one possible parent. Entries
810  * here will likely have an L4 interface parent, and may have multiple
811  * functional clock parents.
812  */
813 static const struct clksel_rate gpt_alt_rates[] = {
814         { .div = 1, .val = 2, .flags = RATE_IN_24XX },
815         { .div = 0 }
816 };
817
818 static const struct clksel omap24xx_gpt_clksel[] = {
819         { .parent = &func_32k_ck, .rates = gpt_32k_rates },
820         { .parent = &sys_ck,      .rates = gpt_sys_rates },
821         { .parent = &alt_ck,      .rates = gpt_alt_rates },
822         { .parent = NULL },
823 };
824
825 static struct clk gpt1_ick = {
826         .name           = "gpt1_ick",
827         .ops            = &clkops_omap2_iclk_dflt_wait,
828         .parent         = &wu_l4_ick,
829         .clkdm_name     = "wkup_clkdm",
830         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
831         .enable_bit     = OMAP24XX_EN_GPT1_SHIFT,
832         .recalc         = &followparent_recalc,
833 };
834
835 static struct clk gpt1_fck = {
836         .name           = "gpt1_fck",
837         .ops            = &clkops_omap2_dflt_wait,
838         .parent         = &func_32k_ck,
839         .clkdm_name     = "core_l4_clkdm",
840         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
841         .enable_bit     = OMAP24XX_EN_GPT1_SHIFT,
842         .init           = &omap2_init_clksel_parent,
843         .clksel_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL1),
844         .clksel_mask    = OMAP24XX_CLKSEL_GPT1_MASK,
845         .clksel         = omap24xx_gpt_clksel,
846         .recalc         = &omap2_clksel_recalc,
847         .round_rate     = &omap2_clksel_round_rate,
848         .set_rate       = &omap2_clksel_set_rate
849 };
850
851 static struct clk gpt2_ick = {
852         .name           = "gpt2_ick",
853         .ops            = &clkops_omap2_iclk_dflt_wait,
854         .parent         = &l4_ck,
855         .clkdm_name     = "core_l4_clkdm",
856         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
857         .enable_bit     = OMAP24XX_EN_GPT2_SHIFT,
858         .recalc         = &followparent_recalc,
859 };
860
861 static struct clk gpt2_fck = {
862         .name           = "gpt2_fck",
863         .ops            = &clkops_omap2_dflt_wait,
864         .parent         = &func_32k_ck,
865         .clkdm_name     = "core_l4_clkdm",
866         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
867         .enable_bit     = OMAP24XX_EN_GPT2_SHIFT,
868         .init           = &omap2_init_clksel_parent,
869         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
870         .clksel_mask    = OMAP24XX_CLKSEL_GPT2_MASK,
871         .clksel         = omap24xx_gpt_clksel,
872         .recalc         = &omap2_clksel_recalc,
873 };
874
875 static struct clk gpt3_ick = {
876         .name           = "gpt3_ick",
877         .ops            = &clkops_omap2_iclk_dflt_wait,
878         .parent         = &l4_ck,
879         .clkdm_name     = "core_l4_clkdm",
880         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
881         .enable_bit     = OMAP24XX_EN_GPT3_SHIFT,
882         .recalc         = &followparent_recalc,
883 };
884
885 static struct clk gpt3_fck = {
886         .name           = "gpt3_fck",
887         .ops            = &clkops_omap2_dflt_wait,
888         .parent         = &func_32k_ck,
889         .clkdm_name     = "core_l4_clkdm",
890         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
891         .enable_bit     = OMAP24XX_EN_GPT3_SHIFT,
892         .init           = &omap2_init_clksel_parent,
893         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
894         .clksel_mask    = OMAP24XX_CLKSEL_GPT3_MASK,
895         .clksel         = omap24xx_gpt_clksel,
896         .recalc         = &omap2_clksel_recalc,
897 };
898
899 static struct clk gpt4_ick = {
900         .name           = "gpt4_ick",
901         .ops            = &clkops_omap2_iclk_dflt_wait,
902         .parent         = &l4_ck,
903         .clkdm_name     = "core_l4_clkdm",
904         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
905         .enable_bit     = OMAP24XX_EN_GPT4_SHIFT,
906         .recalc         = &followparent_recalc,
907 };
908
909 static struct clk gpt4_fck = {
910         .name           = "gpt4_fck",
911         .ops            = &clkops_omap2_dflt_wait,
912         .parent         = &func_32k_ck,
913         .clkdm_name     = "core_l4_clkdm",
914         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
915         .enable_bit     = OMAP24XX_EN_GPT4_SHIFT,
916         .init           = &omap2_init_clksel_parent,
917         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
918         .clksel_mask    = OMAP24XX_CLKSEL_GPT4_MASK,
919         .clksel         = omap24xx_gpt_clksel,
920         .recalc         = &omap2_clksel_recalc,
921 };
922
923 static struct clk gpt5_ick = {
924         .name           = "gpt5_ick",
925         .ops            = &clkops_omap2_iclk_dflt_wait,
926         .parent         = &l4_ck,
927         .clkdm_name     = "core_l4_clkdm",
928         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
929         .enable_bit     = OMAP24XX_EN_GPT5_SHIFT,
930         .recalc         = &followparent_recalc,
931 };
932
933 static struct clk gpt5_fck = {
934         .name           = "gpt5_fck",
935         .ops            = &clkops_omap2_dflt_wait,
936         .parent         = &func_32k_ck,
937         .clkdm_name     = "core_l4_clkdm",
938         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
939         .enable_bit     = OMAP24XX_EN_GPT5_SHIFT,
940         .init           = &omap2_init_clksel_parent,
941         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
942         .clksel_mask    = OMAP24XX_CLKSEL_GPT5_MASK,
943         .clksel         = omap24xx_gpt_clksel,
944         .recalc         = &omap2_clksel_recalc,
945 };
946
947 static struct clk gpt6_ick = {
948         .name           = "gpt6_ick",
949         .ops            = &clkops_omap2_iclk_dflt_wait,
950         .parent         = &l4_ck,
951         .clkdm_name     = "core_l4_clkdm",
952         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
953         .enable_bit     = OMAP24XX_EN_GPT6_SHIFT,
954         .recalc         = &followparent_recalc,
955 };
956
957 static struct clk gpt6_fck = {
958         .name           = "gpt6_fck",
959         .ops            = &clkops_omap2_dflt_wait,
960         .parent         = &func_32k_ck,
961         .clkdm_name     = "core_l4_clkdm",
962         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
963         .enable_bit     = OMAP24XX_EN_GPT6_SHIFT,
964         .init           = &omap2_init_clksel_parent,
965         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
966         .clksel_mask    = OMAP24XX_CLKSEL_GPT6_MASK,
967         .clksel         = omap24xx_gpt_clksel,
968         .recalc         = &omap2_clksel_recalc,
969 };
970
971 static struct clk gpt7_ick = {
972         .name           = "gpt7_ick",
973         .ops            = &clkops_omap2_iclk_dflt_wait,
974         .parent         = &l4_ck,
975         .clkdm_name     = "core_l4_clkdm",
976         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
977         .enable_bit     = OMAP24XX_EN_GPT7_SHIFT,
978         .recalc         = &followparent_recalc,
979 };
980
981 static struct clk gpt7_fck = {
982         .name           = "gpt7_fck",
983         .ops            = &clkops_omap2_dflt_wait,
984         .parent         = &func_32k_ck,
985         .clkdm_name     = "core_l4_clkdm",
986         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
987         .enable_bit     = OMAP24XX_EN_GPT7_SHIFT,
988         .init           = &omap2_init_clksel_parent,
989         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
990         .clksel_mask    = OMAP24XX_CLKSEL_GPT7_MASK,
991         .clksel         = omap24xx_gpt_clksel,
992         .recalc         = &omap2_clksel_recalc,
993 };
994
995 static struct clk gpt8_ick = {
996         .name           = "gpt8_ick",
997         .ops            = &clkops_omap2_iclk_dflt_wait,
998         .parent         = &l4_ck,
999         .clkdm_name     = "core_l4_clkdm",
1000         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1001         .enable_bit     = OMAP24XX_EN_GPT8_SHIFT,
1002         .recalc         = &followparent_recalc,
1003 };
1004
1005 static struct clk gpt8_fck = {
1006         .name           = "gpt8_fck",
1007         .ops            = &clkops_omap2_dflt_wait,
1008         .parent         = &func_32k_ck,
1009         .clkdm_name     = "core_l4_clkdm",
1010         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1011         .enable_bit     = OMAP24XX_EN_GPT8_SHIFT,
1012         .init           = &omap2_init_clksel_parent,
1013         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
1014         .clksel_mask    = OMAP24XX_CLKSEL_GPT8_MASK,
1015         .clksel         = omap24xx_gpt_clksel,
1016         .recalc         = &omap2_clksel_recalc,
1017 };
1018
1019 static struct clk gpt9_ick = {
1020         .name           = "gpt9_ick",
1021         .ops            = &clkops_omap2_iclk_dflt_wait,
1022         .parent         = &l4_ck,
1023         .clkdm_name     = "core_l4_clkdm",
1024         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1025         .enable_bit     = OMAP24XX_EN_GPT9_SHIFT,
1026         .recalc         = &followparent_recalc,
1027 };
1028
1029 static struct clk gpt9_fck = {
1030         .name           = "gpt9_fck",
1031         .ops            = &clkops_omap2_dflt_wait,
1032         .parent         = &func_32k_ck,
1033         .clkdm_name     = "core_l4_clkdm",
1034         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1035         .enable_bit     = OMAP24XX_EN_GPT9_SHIFT,
1036         .init           = &omap2_init_clksel_parent,
1037         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
1038         .clksel_mask    = OMAP24XX_CLKSEL_GPT9_MASK,
1039         .clksel         = omap24xx_gpt_clksel,
1040         .recalc         = &omap2_clksel_recalc,
1041 };
1042
1043 static struct clk gpt10_ick = {
1044         .name           = "gpt10_ick",
1045         .ops            = &clkops_omap2_iclk_dflt_wait,
1046         .parent         = &l4_ck,
1047         .clkdm_name     = "core_l4_clkdm",
1048         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1049         .enable_bit     = OMAP24XX_EN_GPT10_SHIFT,
1050         .recalc         = &followparent_recalc,
1051 };
1052
1053 static struct clk gpt10_fck = {
1054         .name           = "gpt10_fck",
1055         .ops            = &clkops_omap2_dflt_wait,
1056         .parent         = &func_32k_ck,
1057         .clkdm_name     = "core_l4_clkdm",
1058         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1059         .enable_bit     = OMAP24XX_EN_GPT10_SHIFT,
1060         .init           = &omap2_init_clksel_parent,
1061         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
1062         .clksel_mask    = OMAP24XX_CLKSEL_GPT10_MASK,
1063         .clksel         = omap24xx_gpt_clksel,
1064         .recalc         = &omap2_clksel_recalc,
1065 };
1066
1067 static struct clk gpt11_ick = {
1068         .name           = "gpt11_ick",
1069         .ops            = &clkops_omap2_iclk_dflt_wait,
1070         .parent         = &l4_ck,
1071         .clkdm_name     = "core_l4_clkdm",
1072         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1073         .enable_bit     = OMAP24XX_EN_GPT11_SHIFT,
1074         .recalc         = &followparent_recalc,
1075 };
1076
1077 static struct clk gpt11_fck = {
1078         .name           = "gpt11_fck",
1079         .ops            = &clkops_omap2_dflt_wait,
1080         .parent         = &func_32k_ck,
1081         .clkdm_name     = "core_l4_clkdm",
1082         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1083         .enable_bit     = OMAP24XX_EN_GPT11_SHIFT,
1084         .init           = &omap2_init_clksel_parent,
1085         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
1086         .clksel_mask    = OMAP24XX_CLKSEL_GPT11_MASK,
1087         .clksel         = omap24xx_gpt_clksel,
1088         .recalc         = &omap2_clksel_recalc,
1089 };
1090
1091 static struct clk gpt12_ick = {
1092         .name           = "gpt12_ick",
1093         .ops            = &clkops_omap2_iclk_dflt_wait,
1094         .parent         = &l4_ck,
1095         .clkdm_name     = "core_l4_clkdm",
1096         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1097         .enable_bit     = OMAP24XX_EN_GPT12_SHIFT,
1098         .recalc         = &followparent_recalc,
1099 };
1100
1101 static struct clk gpt12_fck = {
1102         .name           = "gpt12_fck",
1103         .ops            = &clkops_omap2_dflt_wait,
1104         .parent         = &secure_32k_ck,
1105         .clkdm_name     = "core_l4_clkdm",
1106         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1107         .enable_bit     = OMAP24XX_EN_GPT12_SHIFT,
1108         .init           = &omap2_init_clksel_parent,
1109         .clksel_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
1110         .clksel_mask    = OMAP24XX_CLKSEL_GPT12_MASK,
1111         .clksel         = omap24xx_gpt_clksel,
1112         .recalc         = &omap2_clksel_recalc,
1113 };
1114
1115 static struct clk mcbsp1_ick = {
1116         .name           = "mcbsp1_ick",
1117         .ops            = &clkops_omap2_iclk_dflt_wait,
1118         .parent         = &l4_ck,
1119         .clkdm_name     = "core_l4_clkdm",
1120         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1121         .enable_bit     = OMAP24XX_EN_MCBSP1_SHIFT,
1122         .recalc         = &followparent_recalc,
1123 };
1124
1125 static const struct clksel_rate common_mcbsp_96m_rates[] = {
1126         { .div = 1, .val = 0, .flags = RATE_IN_24XX },
1127         { .div = 0 }
1128 };
1129
1130 static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1131         { .div = 1, .val = 1, .flags = RATE_IN_24XX },
1132         { .div = 0 }
1133 };
1134
1135 static const struct clksel mcbsp_fck_clksel[] = {
1136         { .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
1137         { .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
1138         { .parent = NULL }
1139 };
1140
1141 static struct clk mcbsp1_fck = {
1142         .name           = "mcbsp1_fck",
1143         .ops            = &clkops_omap2_dflt_wait,
1144         .parent         = &func_96m_ck,
1145         .init           = &omap2_init_clksel_parent,
1146         .clkdm_name     = "core_l4_clkdm",
1147         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1148         .enable_bit     = OMAP24XX_EN_MCBSP1_SHIFT,
1149         .clksel_reg     = OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1150         .clksel_mask    = OMAP2_MCBSP1_CLKS_MASK,
1151         .clksel         = mcbsp_fck_clksel,
1152         .recalc         = &omap2_clksel_recalc,
1153 };
1154
1155 static struct clk mcbsp2_ick = {
1156         .name           = "mcbsp2_ick",
1157         .ops            = &clkops_omap2_iclk_dflt_wait,
1158         .parent         = &l4_ck,
1159         .clkdm_name     = "core_l4_clkdm",
1160         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1161         .enable_bit     = OMAP24XX_EN_MCBSP2_SHIFT,
1162         .recalc         = &followparent_recalc,
1163 };
1164
1165 static struct clk mcbsp2_fck = {
1166         .name           = "mcbsp2_fck",
1167         .ops            = &clkops_omap2_dflt_wait,
1168         .parent         = &func_96m_ck,
1169         .init           = &omap2_init_clksel_parent,
1170         .clkdm_name     = "core_l4_clkdm",
1171         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1172         .enable_bit     = OMAP24XX_EN_MCBSP2_SHIFT,
1173         .clksel_reg     = OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1174         .clksel_mask    = OMAP2_MCBSP2_CLKS_MASK,
1175         .clksel         = mcbsp_fck_clksel,
1176         .recalc         = &omap2_clksel_recalc,
1177 };
1178
1179 static struct clk mcbsp3_ick = {
1180         .name           = "mcbsp3_ick",
1181         .ops            = &clkops_omap2_iclk_dflt_wait,
1182         .parent         = &l4_ck,
1183         .clkdm_name     = "core_l4_clkdm",
1184         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1185         .enable_bit     = OMAP2430_EN_MCBSP3_SHIFT,
1186         .recalc         = &followparent_recalc,
1187 };
1188
1189 static struct clk mcbsp3_fck = {
1190         .name           = "mcbsp3_fck",
1191         .ops            = &clkops_omap2_dflt_wait,
1192         .parent         = &func_96m_ck,
1193         .init           = &omap2_init_clksel_parent,
1194         .clkdm_name     = "core_l4_clkdm",
1195         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1196         .enable_bit     = OMAP2430_EN_MCBSP3_SHIFT,
1197         .clksel_reg     = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1198         .clksel_mask    = OMAP2_MCBSP3_CLKS_MASK,
1199         .clksel         = mcbsp_fck_clksel,
1200         .recalc         = &omap2_clksel_recalc,
1201 };
1202
1203 static struct clk mcbsp4_ick = {
1204         .name           = "mcbsp4_ick",
1205         .ops            = &clkops_omap2_iclk_dflt_wait,
1206         .parent         = &l4_ck,
1207         .clkdm_name     = "core_l4_clkdm",
1208         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1209         .enable_bit     = OMAP2430_EN_MCBSP4_SHIFT,
1210         .recalc         = &followparent_recalc,
1211 };
1212
1213 static struct clk mcbsp4_fck = {
1214         .name           = "mcbsp4_fck",
1215         .ops            = &clkops_omap2_dflt_wait,
1216         .parent         = &func_96m_ck,
1217         .init           = &omap2_init_clksel_parent,
1218         .clkdm_name     = "core_l4_clkdm",
1219         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1220         .enable_bit     = OMAP2430_EN_MCBSP4_SHIFT,
1221         .clksel_reg     = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1222         .clksel_mask    = OMAP2_MCBSP4_CLKS_MASK,
1223         .clksel         = mcbsp_fck_clksel,
1224         .recalc         = &omap2_clksel_recalc,
1225 };
1226
1227 static struct clk mcbsp5_ick = {
1228         .name           = "mcbsp5_ick",
1229         .ops            = &clkops_omap2_iclk_dflt_wait,
1230         .parent         = &l4_ck,
1231         .clkdm_name     = "core_l4_clkdm",
1232         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1233         .enable_bit     = OMAP2430_EN_MCBSP5_SHIFT,
1234         .recalc         = &followparent_recalc,
1235 };
1236
1237 static struct clk mcbsp5_fck = {
1238         .name           = "mcbsp5_fck",
1239         .ops            = &clkops_omap2_dflt_wait,
1240         .parent         = &func_96m_ck,
1241         .init           = &omap2_init_clksel_parent,
1242         .clkdm_name     = "core_l4_clkdm",
1243         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1244         .enable_bit     = OMAP2430_EN_MCBSP5_SHIFT,
1245         .clksel_reg     = OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1246         .clksel_mask    = OMAP2_MCBSP5_CLKS_MASK,
1247         .clksel         = mcbsp_fck_clksel,
1248         .recalc         = &omap2_clksel_recalc,
1249 };
1250
1251 static struct clk mcspi1_ick = {
1252         .name           = "mcspi1_ick",
1253         .ops            = &clkops_omap2_iclk_dflt_wait,
1254         .parent         = &l4_ck,
1255         .clkdm_name     = "core_l4_clkdm",
1256         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1257         .enable_bit     = OMAP24XX_EN_MCSPI1_SHIFT,
1258         .recalc         = &followparent_recalc,
1259 };
1260
1261 static struct clk mcspi1_fck = {
1262         .name           = "mcspi1_fck",
1263         .ops            = &clkops_omap2_dflt_wait,
1264         .parent         = &func_48m_ck,
1265         .clkdm_name     = "core_l4_clkdm",
1266         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1267         .enable_bit     = OMAP24XX_EN_MCSPI1_SHIFT,
1268         .recalc         = &followparent_recalc,
1269 };
1270
1271 static struct clk mcspi2_ick = {
1272         .name           = "mcspi2_ick",
1273         .ops            = &clkops_omap2_iclk_dflt_wait,
1274         .parent         = &l4_ck,
1275         .clkdm_name     = "core_l4_clkdm",
1276         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1277         .enable_bit     = OMAP24XX_EN_MCSPI2_SHIFT,
1278         .recalc         = &followparent_recalc,
1279 };
1280
1281 static struct clk mcspi2_fck = {
1282         .name           = "mcspi2_fck",
1283         .ops            = &clkops_omap2_dflt_wait,
1284         .parent         = &func_48m_ck,
1285         .clkdm_name     = "core_l4_clkdm",
1286         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1287         .enable_bit     = OMAP24XX_EN_MCSPI2_SHIFT,
1288         .recalc         = &followparent_recalc,
1289 };
1290
1291 static struct clk mcspi3_ick = {
1292         .name           = "mcspi3_ick",
1293         .ops            = &clkops_omap2_iclk_dflt_wait,
1294         .parent         = &l4_ck,
1295         .clkdm_name     = "core_l4_clkdm",
1296         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1297         .enable_bit     = OMAP2430_EN_MCSPI3_SHIFT,
1298         .recalc         = &followparent_recalc,
1299 };
1300
1301 static struct clk mcspi3_fck = {
1302         .name           = "mcspi3_fck",
1303         .ops            = &clkops_omap2_dflt_wait,
1304         .parent         = &func_48m_ck,
1305         .clkdm_name     = "core_l4_clkdm",
1306         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1307         .enable_bit     = OMAP2430_EN_MCSPI3_SHIFT,
1308         .recalc         = &followparent_recalc,
1309 };
1310
1311 static struct clk uart1_ick = {
1312         .name           = "uart1_ick",
1313         .ops            = &clkops_omap2_iclk_dflt_wait,
1314         .parent         = &l4_ck,
1315         .clkdm_name     = "core_l4_clkdm",
1316         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1317         .enable_bit     = OMAP24XX_EN_UART1_SHIFT,
1318         .recalc         = &followparent_recalc,
1319 };
1320
1321 static struct clk uart1_fck = {
1322         .name           = "uart1_fck",
1323         .ops            = &clkops_omap2_dflt_wait,
1324         .parent         = &func_48m_ck,
1325         .clkdm_name     = "core_l4_clkdm",
1326         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1327         .enable_bit     = OMAP24XX_EN_UART1_SHIFT,
1328         .recalc         = &followparent_recalc,
1329 };
1330
1331 static struct clk uart2_ick = {
1332         .name           = "uart2_ick",
1333         .ops            = &clkops_omap2_iclk_dflt_wait,
1334         .parent         = &l4_ck,
1335         .clkdm_name     = "core_l4_clkdm",
1336         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1337         .enable_bit     = OMAP24XX_EN_UART2_SHIFT,
1338         .recalc         = &followparent_recalc,
1339 };
1340
1341 static struct clk uart2_fck = {
1342         .name           = "uart2_fck",
1343         .ops            = &clkops_omap2_dflt_wait,
1344         .parent         = &func_48m_ck,
1345         .clkdm_name     = "core_l4_clkdm",
1346         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1347         .enable_bit     = OMAP24XX_EN_UART2_SHIFT,
1348         .recalc         = &followparent_recalc,
1349 };
1350
1351 static struct clk uart3_ick = {
1352         .name           = "uart3_ick",
1353         .ops            = &clkops_omap2_iclk_dflt_wait,
1354         .parent         = &l4_ck,
1355         .clkdm_name     = "core_l4_clkdm",
1356         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1357         .enable_bit     = OMAP24XX_EN_UART3_SHIFT,
1358         .recalc         = &followparent_recalc,
1359 };
1360
1361 static struct clk uart3_fck = {
1362         .name           = "uart3_fck",
1363         .ops            = &clkops_omap2_dflt_wait,
1364         .parent         = &func_48m_ck,
1365         .clkdm_name     = "core_l4_clkdm",
1366         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1367         .enable_bit     = OMAP24XX_EN_UART3_SHIFT,
1368         .recalc         = &followparent_recalc,
1369 };
1370
1371 static struct clk gpios_ick = {
1372         .name           = "gpios_ick",
1373         .ops            = &clkops_omap2_iclk_dflt_wait,
1374         .parent         = &wu_l4_ick,
1375         .clkdm_name     = "wkup_clkdm",
1376         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1377         .enable_bit     = OMAP24XX_EN_GPIOS_SHIFT,
1378         .recalc         = &followparent_recalc,
1379 };
1380
1381 static struct clk gpios_fck = {
1382         .name           = "gpios_fck",
1383         .ops            = &clkops_omap2_dflt_wait,
1384         .parent         = &func_32k_ck,
1385         .clkdm_name     = "wkup_clkdm",
1386         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1387         .enable_bit     = OMAP24XX_EN_GPIOS_SHIFT,
1388         .recalc         = &followparent_recalc,
1389 };
1390
1391 static struct clk mpu_wdt_ick = {
1392         .name           = "mpu_wdt_ick",
1393         .ops            = &clkops_omap2_iclk_dflt_wait,
1394         .parent         = &wu_l4_ick,
1395         .clkdm_name     = "wkup_clkdm",
1396         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1397         .enable_bit     = OMAP24XX_EN_MPU_WDT_SHIFT,
1398         .recalc         = &followparent_recalc,
1399 };
1400
1401 static struct clk mpu_wdt_fck = {
1402         .name           = "mpu_wdt_fck",
1403         .ops            = &clkops_omap2_dflt_wait,
1404         .parent         = &func_32k_ck,
1405         .clkdm_name     = "wkup_clkdm",
1406         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1407         .enable_bit     = OMAP24XX_EN_MPU_WDT_SHIFT,
1408         .recalc         = &followparent_recalc,
1409 };
1410
1411 static struct clk sync_32k_ick = {
1412         .name           = "sync_32k_ick",
1413         .ops            = &clkops_omap2_iclk_dflt_wait,
1414         .flags          = ENABLE_ON_INIT,
1415         .parent         = &wu_l4_ick,
1416         .clkdm_name     = "wkup_clkdm",
1417         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1418         .enable_bit     = OMAP24XX_EN_32KSYNC_SHIFT,
1419         .recalc         = &followparent_recalc,
1420 };
1421
1422 static struct clk wdt1_ick = {
1423         .name           = "wdt1_ick",
1424         .ops            = &clkops_omap2_iclk_dflt_wait,
1425         .parent         = &wu_l4_ick,
1426         .clkdm_name     = "wkup_clkdm",
1427         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1428         .enable_bit     = OMAP24XX_EN_WDT1_SHIFT,
1429         .recalc         = &followparent_recalc,
1430 };
1431
1432 static struct clk omapctrl_ick = {
1433         .name           = "omapctrl_ick",
1434         .ops            = &clkops_omap2_iclk_dflt_wait,
1435         .flags          = ENABLE_ON_INIT,
1436         .parent         = &wu_l4_ick,
1437         .clkdm_name     = "wkup_clkdm",
1438         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1439         .enable_bit     = OMAP24XX_EN_OMAPCTRL_SHIFT,
1440         .recalc         = &followparent_recalc,
1441 };
1442
1443 static struct clk icr_ick = {
1444         .name           = "icr_ick",
1445         .ops            = &clkops_omap2_iclk_dflt_wait,
1446         .parent         = &wu_l4_ick,
1447         .clkdm_name     = "wkup_clkdm",
1448         .enable_reg     = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1449         .enable_bit     = OMAP2430_EN_ICR_SHIFT,
1450         .recalc         = &followparent_recalc,
1451 };
1452
1453 static struct clk cam_ick = {
1454         .name           = "cam_ick",
1455         .ops            = &clkops_omap2_iclk_dflt,
1456         .parent         = &l4_ck,
1457         .clkdm_name     = "core_l4_clkdm",
1458         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1459         .enable_bit     = OMAP24XX_EN_CAM_SHIFT,
1460         .recalc         = &followparent_recalc,
1461 };
1462
1463 /*
1464  * cam_fck controls both CAM_MCLK and CAM_FCLK.  It should probably be
1465  * split into two separate clocks, since the parent clocks are different
1466  * and the clockdomains are also different.
1467  */
1468 static struct clk cam_fck = {
1469         .name           = "cam_fck",
1470         .ops            = &clkops_omap2_dflt,
1471         .parent         = &func_96m_ck,
1472         .clkdm_name     = "core_l3_clkdm",
1473         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1474         .enable_bit     = OMAP24XX_EN_CAM_SHIFT,
1475         .recalc         = &followparent_recalc,
1476 };
1477
1478 static struct clk mailboxes_ick = {
1479         .name           = "mailboxes_ick",
1480         .ops            = &clkops_omap2_iclk_dflt_wait,
1481         .parent         = &l4_ck,
1482         .clkdm_name     = "core_l4_clkdm",
1483         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1484         .enable_bit     = OMAP24XX_EN_MAILBOXES_SHIFT,
1485         .recalc         = &followparent_recalc,
1486 };
1487
1488 static struct clk wdt4_ick = {
1489         .name           = "wdt4_ick",
1490         .ops            = &clkops_omap2_iclk_dflt_wait,
1491         .parent         = &l4_ck,
1492         .clkdm_name     = "core_l4_clkdm",
1493         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1494         .enable_bit     = OMAP24XX_EN_WDT4_SHIFT,
1495         .recalc         = &followparent_recalc,
1496 };
1497
1498 static struct clk wdt4_fck = {
1499         .name           = "wdt4_fck",
1500         .ops            = &clkops_omap2_dflt_wait,
1501         .parent         = &func_32k_ck,
1502         .clkdm_name     = "core_l4_clkdm",
1503         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1504         .enable_bit     = OMAP24XX_EN_WDT4_SHIFT,
1505         .recalc         = &followparent_recalc,
1506 };
1507
1508 static struct clk mspro_ick = {
1509         .name           = "mspro_ick",
1510         .ops            = &clkops_omap2_iclk_dflt_wait,
1511         .parent         = &l4_ck,
1512         .clkdm_name     = "core_l4_clkdm",
1513         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1514         .enable_bit     = OMAP24XX_EN_MSPRO_SHIFT,
1515         .recalc         = &followparent_recalc,
1516 };
1517
1518 static struct clk mspro_fck = {
1519         .name           = "mspro_fck",
1520         .ops            = &clkops_omap2_dflt_wait,
1521         .parent         = &func_96m_ck,
1522         .clkdm_name     = "core_l4_clkdm",
1523         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1524         .enable_bit     = OMAP24XX_EN_MSPRO_SHIFT,
1525         .recalc         = &followparent_recalc,
1526 };
1527
1528 static struct clk fac_ick = {
1529         .name           = "fac_ick",
1530         .ops            = &clkops_omap2_iclk_dflt_wait,
1531         .parent         = &l4_ck,
1532         .clkdm_name     = "core_l4_clkdm",
1533         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1534         .enable_bit     = OMAP24XX_EN_FAC_SHIFT,
1535         .recalc         = &followparent_recalc,
1536 };
1537
1538 static struct clk fac_fck = {
1539         .name           = "fac_fck",
1540         .ops            = &clkops_omap2_dflt_wait,
1541         .parent         = &func_12m_ck,
1542         .clkdm_name     = "core_l4_clkdm",
1543         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1544         .enable_bit     = OMAP24XX_EN_FAC_SHIFT,
1545         .recalc         = &followparent_recalc,
1546 };
1547
1548 static struct clk hdq_ick = {
1549         .name           = "hdq_ick",
1550         .ops            = &clkops_omap2_iclk_dflt_wait,
1551         .parent         = &l4_ck,
1552         .clkdm_name     = "core_l4_clkdm",
1553         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1554         .enable_bit     = OMAP24XX_EN_HDQ_SHIFT,
1555         .recalc         = &followparent_recalc,
1556 };
1557
1558 static struct clk hdq_fck = {
1559         .name           = "hdq_fck",
1560         .ops            = &clkops_omap2_dflt_wait,
1561         .parent         = &func_12m_ck,
1562         .clkdm_name     = "core_l4_clkdm",
1563         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1564         .enable_bit     = OMAP24XX_EN_HDQ_SHIFT,
1565         .recalc         = &followparent_recalc,
1566 };
1567
1568 /*
1569  * XXX This is marked as a 2420-only define, but it claims to be present
1570  * on 2430 also.  Double-check.
1571  */
1572 static struct clk i2c2_ick = {
1573         .name           = "i2c2_ick",
1574         .ops            = &clkops_omap2_iclk_dflt_wait,
1575         .parent         = &l4_ck,
1576         .clkdm_name     = "core_l4_clkdm",
1577         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1578         .enable_bit     = OMAP2420_EN_I2C2_SHIFT,
1579         .recalc         = &followparent_recalc,
1580 };
1581
1582 static struct clk i2chs2_fck = {
1583         .name           = "i2chs2_fck",
1584         .ops            = &clkops_omap2430_i2chs_wait,
1585         .parent         = &func_96m_ck,
1586         .clkdm_name     = "core_l4_clkdm",
1587         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1588         .enable_bit     = OMAP2430_EN_I2CHS2_SHIFT,
1589         .recalc         = &followparent_recalc,
1590 };
1591
1592 /*
1593  * XXX This is marked as a 2420-only define, but it claims to be present
1594  * on 2430 also.  Double-check.
1595  */
1596 static struct clk i2c1_ick = {
1597         .name           = "i2c1_ick",
1598         .ops            = &clkops_omap2_iclk_dflt_wait,
1599         .parent         = &l4_ck,
1600         .clkdm_name     = "core_l4_clkdm",
1601         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1602         .enable_bit     = OMAP2420_EN_I2C1_SHIFT,
1603         .recalc         = &followparent_recalc,
1604 };
1605
1606 static struct clk i2chs1_fck = {
1607         .name           = "i2chs1_fck",
1608         .ops            = &clkops_omap2430_i2chs_wait,
1609         .parent         = &func_96m_ck,
1610         .clkdm_name     = "core_l4_clkdm",
1611         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1612         .enable_bit     = OMAP2430_EN_I2CHS1_SHIFT,
1613         .recalc         = &followparent_recalc,
1614 };
1615
1616 /*
1617  * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1618  * accesses derived from this data.
1619  */
1620 static struct clk gpmc_fck = {
1621         .name           = "gpmc_fck",
1622         .ops            = &clkops_omap2_iclk_idle_only,
1623         .parent         = &core_l3_ck,
1624         .flags          = ENABLE_ON_INIT,
1625         .clkdm_name     = "core_l3_clkdm",
1626         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1627         .enable_bit     = OMAP24XX_AUTO_GPMC_SHIFT,
1628         .recalc         = &followparent_recalc,
1629 };
1630
1631 static struct clk sdma_fck = {
1632         .name           = "sdma_fck",
1633         .ops            = &clkops_null, /* RMK: missing? */
1634         .parent         = &core_l3_ck,
1635         .clkdm_name     = "core_l3_clkdm",
1636         .recalc         = &followparent_recalc,
1637 };
1638
1639 /*
1640  * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1641  * accesses derived from this data.
1642  */
1643 static struct clk sdma_ick = {
1644         .name           = "sdma_ick",
1645         .ops            = &clkops_omap2_iclk_idle_only,
1646         .parent         = &core_l3_ck,
1647         .clkdm_name     = "core_l3_clkdm",
1648         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1649         .enable_bit     = OMAP24XX_AUTO_SDMA_SHIFT,
1650         .recalc         = &followparent_recalc,
1651 };
1652
1653 static struct clk sdrc_ick = {
1654         .name           = "sdrc_ick",
1655         .ops            = &clkops_omap2_iclk_idle_only,
1656         .parent         = &core_l3_ck,
1657         .flags          = ENABLE_ON_INIT,
1658         .clkdm_name     = "core_l3_clkdm",
1659         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1660         .enable_bit     = OMAP2430_EN_SDRC_SHIFT,
1661         .recalc         = &followparent_recalc,
1662 };
1663
1664 static struct clk des_ick = {
1665         .name           = "des_ick",
1666         .ops            = &clkops_omap2_iclk_dflt_wait,
1667         .parent         = &l4_ck,
1668         .clkdm_name     = "core_l4_clkdm",
1669         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1670         .enable_bit     = OMAP24XX_EN_DES_SHIFT,
1671         .recalc         = &followparent_recalc,
1672 };
1673
1674 static struct clk sha_ick = {
1675         .name           = "sha_ick",
1676         .ops            = &clkops_omap2_iclk_dflt_wait,
1677         .parent         = &l4_ck,
1678         .clkdm_name     = "core_l4_clkdm",
1679         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1680         .enable_bit     = OMAP24XX_EN_SHA_SHIFT,
1681         .recalc         = &followparent_recalc,
1682 };
1683
1684 static struct clk rng_ick = {
1685         .name           = "rng_ick",
1686         .ops            = &clkops_omap2_iclk_dflt_wait,
1687         .parent         = &l4_ck,
1688         .clkdm_name     = "core_l4_clkdm",
1689         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1690         .enable_bit     = OMAP24XX_EN_RNG_SHIFT,
1691         .recalc         = &followparent_recalc,
1692 };
1693
1694 static struct clk aes_ick = {
1695         .name           = "aes_ick",
1696         .ops            = &clkops_omap2_iclk_dflt_wait,
1697         .parent         = &l4_ck,
1698         .clkdm_name     = "core_l4_clkdm",
1699         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1700         .enable_bit     = OMAP24XX_EN_AES_SHIFT,
1701         .recalc         = &followparent_recalc,
1702 };
1703
1704 static struct clk pka_ick = {
1705         .name           = "pka_ick",
1706         .ops            = &clkops_omap2_iclk_dflt_wait,
1707         .parent         = &l4_ck,
1708         .clkdm_name     = "core_l4_clkdm",
1709         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1710         .enable_bit     = OMAP24XX_EN_PKA_SHIFT,
1711         .recalc         = &followparent_recalc,
1712 };
1713
1714 static struct clk usb_fck = {
1715         .name           = "usb_fck",
1716         .ops            = &clkops_omap2_dflt_wait,
1717         .parent         = &func_48m_ck,
1718         .clkdm_name     = "core_l3_clkdm",
1719         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1720         .enable_bit     = OMAP24XX_EN_USB_SHIFT,
1721         .recalc         = &followparent_recalc,
1722 };
1723
1724 static struct clk usbhs_ick = {
1725         .name           = "usbhs_ick",
1726         .ops            = &clkops_omap2_iclk_dflt_wait,
1727         .parent         = &core_l3_ck,
1728         .clkdm_name     = "core_l3_clkdm",
1729         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1730         .enable_bit     = OMAP2430_EN_USBHS_SHIFT,
1731         .recalc         = &followparent_recalc,
1732 };
1733
1734 static struct clk mmchs1_ick = {
1735         .name           = "mmchs1_ick",
1736         .ops            = &clkops_omap2_iclk_dflt_wait,
1737         .parent         = &l4_ck,
1738         .clkdm_name     = "core_l4_clkdm",
1739         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1740         .enable_bit     = OMAP2430_EN_MMCHS1_SHIFT,
1741         .recalc         = &followparent_recalc,
1742 };
1743
1744 static struct clk mmchs1_fck = {
1745         .name           = "mmchs1_fck",
1746         .ops            = &clkops_omap2_dflt_wait,
1747         .parent         = &func_96m_ck,
1748         .clkdm_name     = "core_l4_clkdm",
1749         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1750         .enable_bit     = OMAP2430_EN_MMCHS1_SHIFT,
1751         .recalc         = &followparent_recalc,
1752 };
1753
1754 static struct clk mmchs2_ick = {
1755         .name           = "mmchs2_ick",
1756         .ops            = &clkops_omap2_iclk_dflt_wait,
1757         .parent         = &l4_ck,
1758         .clkdm_name     = "core_l4_clkdm",
1759         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1760         .enable_bit     = OMAP2430_EN_MMCHS2_SHIFT,
1761         .recalc         = &followparent_recalc,
1762 };
1763
1764 static struct clk mmchs2_fck = {
1765         .name           = "mmchs2_fck",
1766         .ops            = &clkops_omap2_dflt_wait,
1767         .parent         = &func_96m_ck,
1768         .clkdm_name     = "core_l4_clkdm",
1769         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1770         .enable_bit     = OMAP2430_EN_MMCHS2_SHIFT,
1771         .recalc         = &followparent_recalc,
1772 };
1773
1774 static struct clk gpio5_ick = {
1775         .name           = "gpio5_ick",
1776         .ops            = &clkops_omap2_iclk_dflt_wait,
1777         .parent         = &l4_ck,
1778         .clkdm_name     = "core_l4_clkdm",
1779         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1780         .enable_bit     = OMAP2430_EN_GPIO5_SHIFT,
1781         .recalc         = &followparent_recalc,
1782 };
1783
1784 static struct clk gpio5_fck = {
1785         .name           = "gpio5_fck",
1786         .ops            = &clkops_omap2_dflt_wait,
1787         .parent         = &func_32k_ck,
1788         .clkdm_name     = "core_l4_clkdm",
1789         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1790         .enable_bit     = OMAP2430_EN_GPIO5_SHIFT,
1791         .recalc         = &followparent_recalc,
1792 };
1793
1794 static struct clk mdm_intc_ick = {
1795         .name           = "mdm_intc_ick",
1796         .ops            = &clkops_omap2_iclk_dflt_wait,
1797         .parent         = &l4_ck,
1798         .clkdm_name     = "core_l4_clkdm",
1799         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1800         .enable_bit     = OMAP2430_EN_MDM_INTC_SHIFT,
1801         .recalc         = &followparent_recalc,
1802 };
1803
1804 static struct clk mmchsdb1_fck = {
1805         .name           = "mmchsdb1_fck",
1806         .ops            = &clkops_omap2_dflt_wait,
1807         .parent         = &func_32k_ck,
1808         .clkdm_name     = "core_l4_clkdm",
1809         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1810         .enable_bit     = OMAP2430_EN_MMCHSDB1_SHIFT,
1811         .recalc         = &followparent_recalc,
1812 };
1813
1814 static struct clk mmchsdb2_fck = {
1815         .name           = "mmchsdb2_fck",
1816         .ops            = &clkops_omap2_dflt_wait,
1817         .parent         = &func_32k_ck,
1818         .clkdm_name     = "core_l4_clkdm",
1819         .enable_reg     = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1820         .enable_bit     = OMAP2430_EN_MMCHSDB2_SHIFT,
1821         .recalc         = &followparent_recalc,
1822 };
1823
1824 /*
1825  * This clock is a composite clock which does entire set changes then
1826  * forces a rebalance. It keys on the MPU speed, but it really could
1827  * be any key speed part of a set in the rate table.
1828  *
1829  * to really change a set, you need memory table sets which get changed
1830  * in sram, pre-notifiers & post notifiers, changing the top set, without
1831  * having low level display recalc's won't work... this is why dpm notifiers
1832  * work, isr's off, walk a list of clocks already _off_ and not messing with
1833  * the bus.
1834  *
1835  * This clock should have no parent. It embodies the entire upper level
1836  * active set. A parent will mess up some of the init also.
1837  */
1838 static struct clk virt_prcm_set = {
1839         .name           = "virt_prcm_set",
1840         .ops            = &clkops_null,
1841         .parent         = &mpu_ck,      /* Indexed by mpu speed, no parent */
1842         .recalc         = &omap2_table_mpu_recalc,      /* sets are keyed on mpu rate */
1843         .set_rate       = &omap2_select_table_rate,
1844         .round_rate     = &omap2_round_to_table_rate,
1845 };
1846
1847
1848 /*
1849  * clkdev integration
1850  */
1851
1852 static struct omap_clk omap2430_clks[] = {
1853         /* external root sources */
1854         CLK(NULL,       "func_32k_ck",  &func_32k_ck,   CK_243X),
1855         CLK(NULL,       "secure_32k_ck", &secure_32k_ck, CK_243X),
1856         CLK(NULL,       "osc_ck",       &osc_ck,        CK_243X),
1857         CLK(NULL,       "sys_ck",       &sys_ck,        CK_243X),
1858         CLK(NULL,       "alt_ck",       &alt_ck,        CK_243X),
1859         CLK("omap-mcbsp.1",     "pad_fck",      &mcbsp_clks,    CK_243X),
1860         CLK("omap-mcbsp.2",     "pad_fck",      &mcbsp_clks,    CK_243X),
1861         CLK("omap-mcbsp.3",     "pad_fck",      &mcbsp_clks,    CK_243X),
1862         CLK("omap-mcbsp.4",     "pad_fck",      &mcbsp_clks,    CK_243X),
1863         CLK("omap-mcbsp.5",     "pad_fck",      &mcbsp_clks,    CK_243X),
1864         CLK(NULL,       "mcbsp_clks",   &mcbsp_clks,    CK_243X),
1865         /* internal analog sources */
1866         CLK(NULL,       "dpll_ck",      &dpll_ck,       CK_243X),
1867         CLK(NULL,       "apll96_ck",    &apll96_ck,     CK_243X),
1868         CLK(NULL,       "apll54_ck",    &apll54_ck,     CK_243X),
1869         /* internal prcm root sources */
1870         CLK(NULL,       "func_54m_ck",  &func_54m_ck,   CK_243X),
1871         CLK(NULL,       "core_ck",      &core_ck,       CK_243X),
1872         CLK("omap-mcbsp.1",     "prcm_fck",     &func_96m_ck,   CK_243X),
1873         CLK("omap-mcbsp.2",     "prcm_fck",     &func_96m_ck,   CK_243X),
1874         CLK("omap-mcbsp.3",     "prcm_fck",     &func_96m_ck,   CK_243X),
1875         CLK("omap-mcbsp.4",     "prcm_fck",     &func_96m_ck,   CK_243X),
1876         CLK("omap-mcbsp.5",     "prcm_fck",     &func_96m_ck,   CK_243X),
1877         CLK(NULL,       "func_96m_ck",  &func_96m_ck,   CK_243X),
1878         CLK(NULL,       "func_48m_ck",  &func_48m_ck,   CK_243X),
1879         CLK(NULL,       "func_12m_ck",  &func_12m_ck,   CK_243X),
1880         CLK(NULL,       "ck_wdt1_osc",  &wdt1_osc_ck,   CK_243X),
1881         CLK(NULL,       "sys_clkout_src", &sys_clkout_src, CK_243X),
1882         CLK(NULL,       "sys_clkout",   &sys_clkout,    CK_243X),
1883         CLK(NULL,       "emul_ck",      &emul_ck,       CK_243X),
1884         /* mpu domain clocks */
1885         CLK(NULL,       "mpu_ck",       &mpu_ck,        CK_243X),
1886         /* dsp domain clocks */
1887         CLK(NULL,       "dsp_fck",      &dsp_fck,       CK_243X),
1888         CLK(NULL,       "iva2_1_ick",   &iva2_1_ick,    CK_243X),
1889         /* GFX domain clocks */
1890         CLK(NULL,       "gfx_3d_fck",   &gfx_3d_fck,    CK_243X),
1891         CLK(NULL,       "gfx_2d_fck",   &gfx_2d_fck,    CK_243X),
1892         CLK(NULL,       "gfx_ick",      &gfx_ick,       CK_243X),
1893         /* Modem domain clocks */
1894         CLK(NULL,       "mdm_ick",      &mdm_ick,       CK_243X),
1895         CLK(NULL,       "mdm_osc_ck",   &mdm_osc_ck,    CK_243X),
1896         /* DSS domain clocks */
1897         CLK("omapdss_dss",      "ick",          &dss_ick,       CK_243X),
1898         CLK(NULL,       "dss1_fck",             &dss1_fck,      CK_243X),
1899         CLK(NULL,       "dss2_fck",     &dss2_fck,      CK_243X),
1900         CLK(NULL,       "dss_54m_fck",  &dss_54m_fck,   CK_243X),
1901         /* L3 domain clocks */
1902         CLK(NULL,       "core_l3_ck",   &core_l3_ck,    CK_243X),
1903         CLK(NULL,       "ssi_fck",      &ssi_ssr_sst_fck, CK_243X),
1904         CLK(NULL,       "usb_l4_ick",   &usb_l4_ick,    CK_243X),
1905         /* L4 domain clocks */
1906         CLK(NULL,       "l4_ck",        &l4_ck,         CK_243X),
1907         CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick,    CK_243X),
1908         CLK(NULL,       "wu_l4_ick",    &wu_l4_ick,     CK_243X),
1909         /* virtual meta-group clock */
1910         CLK(NULL,       "virt_prcm_set", &virt_prcm_set, CK_243X),
1911         /* general l4 interface ck, multi-parent functional clk */
1912         CLK(NULL,       "gpt1_ick",     &gpt1_ick,      CK_243X),
1913         CLK(NULL,       "gpt1_fck",     &gpt1_fck,      CK_243X),
1914         CLK(NULL,       "gpt2_ick",     &gpt2_ick,      CK_243X),
1915         CLK(NULL,       "gpt2_fck",     &gpt2_fck,      CK_243X),
1916         CLK(NULL,       "gpt3_ick",     &gpt3_ick,      CK_243X),
1917         CLK(NULL,       "gpt3_fck",     &gpt3_fck,      CK_243X),
1918         CLK(NULL,       "gpt4_ick",     &gpt4_ick,      CK_243X),
1919         CLK(NULL,       "gpt4_fck",     &gpt4_fck,      CK_243X),
1920         CLK(NULL,       "gpt5_ick",     &gpt5_ick,      CK_243X),
1921         CLK(NULL,       "gpt5_fck",     &gpt5_fck,      CK_243X),
1922         CLK(NULL,       "gpt6_ick",     &gpt6_ick,      CK_243X),
1923         CLK(NULL,       "gpt6_fck",     &gpt6_fck,      CK_243X),
1924         CLK(NULL,       "gpt7_ick",     &gpt7_ick,      CK_243X),
1925         CLK(NULL,       "gpt7_fck",     &gpt7_fck,      CK_243X),
1926         CLK(NULL,       "gpt8_ick",     &gpt8_ick,      CK_243X),
1927         CLK(NULL,       "gpt8_fck",     &gpt8_fck,      CK_243X),
1928         CLK(NULL,       "gpt9_ick",     &gpt9_ick,      CK_243X),
1929         CLK(NULL,       "gpt9_fck",     &gpt9_fck,      CK_243X),
1930         CLK(NULL,       "gpt10_ick",    &gpt10_ick,     CK_243X),
1931         CLK(NULL,       "gpt10_fck",    &gpt10_fck,     CK_243X),
1932         CLK(NULL,       "gpt11_ick",    &gpt11_ick,     CK_243X),
1933         CLK(NULL,       "gpt11_fck",    &gpt11_fck,     CK_243X),
1934         CLK(NULL,       "gpt12_ick",    &gpt12_ick,     CK_243X),
1935         CLK(NULL,       "gpt12_fck",    &gpt12_fck,     CK_243X),
1936         CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick,    CK_243X),
1937         CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck,    CK_243X),
1938         CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick,    CK_243X),
1939         CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck,    CK_243X),
1940         CLK("omap-mcbsp.3", "ick",      &mcbsp3_ick,    CK_243X),
1941         CLK(NULL,       "mcbsp3_fck",   &mcbsp3_fck,    CK_243X),
1942         CLK("omap-mcbsp.4", "ick",      &mcbsp4_ick,    CK_243X),
1943         CLK(NULL,       "mcbsp4_fck",   &mcbsp4_fck,    CK_243X),
1944         CLK("omap-mcbsp.5", "ick",      &mcbsp5_ick,    CK_243X),
1945         CLK(NULL,       "mcbsp5_fck",   &mcbsp5_fck,    CK_243X),
1946         CLK("omap2_mcspi.1", "ick",     &mcspi1_ick,    CK_243X),
1947         CLK(NULL,       "mcspi1_fck",   &mcspi1_fck,    CK_243X),
1948         CLK("omap2_mcspi.2", "ick",     &mcspi2_ick,    CK_243X),
1949         CLK(NULL,       "mcspi2_fck",   &mcspi2_fck,    CK_243X),
1950         CLK("omap2_mcspi.3", "ick",     &mcspi3_ick,    CK_243X),
1951         CLK(NULL,       "mcspi3_fck",   &mcspi3_fck,    CK_243X),
1952         CLK(NULL,       "uart1_ick",    &uart1_ick,     CK_243X),
1953         CLK(NULL,       "uart1_fck",    &uart1_fck,     CK_243X),
1954         CLK(NULL,       "uart2_ick",    &uart2_ick,     CK_243X),
1955         CLK(NULL,       "uart2_fck",    &uart2_fck,     CK_243X),
1956         CLK(NULL,       "uart3_ick",    &uart3_ick,     CK_243X),
1957         CLK(NULL,       "uart3_fck",    &uart3_fck,     CK_243X),
1958         CLK(NULL,       "gpios_ick",    &gpios_ick,     CK_243X),
1959         CLK(NULL,       "gpios_fck",    &gpios_fck,     CK_243X),
1960         CLK("omap_wdt", "ick",          &mpu_wdt_ick,   CK_243X),
1961         CLK(NULL,       "mpu_wdt_fck",  &mpu_wdt_fck,   CK_243X),
1962         CLK(NULL,       "sync_32k_ick", &sync_32k_ick,  CK_243X),
1963         CLK(NULL,       "wdt1_ick",     &wdt1_ick,      CK_243X),
1964         CLK(NULL,       "omapctrl_ick", &omapctrl_ick,  CK_243X),
1965         CLK(NULL,       "icr_ick",      &icr_ick,       CK_243X),
1966         CLK("omap24xxcam", "fck",       &cam_fck,       CK_243X),
1967         CLK("omap24xxcam", "ick",       &cam_ick,       CK_243X),
1968         CLK(NULL,       "mailboxes_ick", &mailboxes_ick,        CK_243X),
1969         CLK(NULL,       "wdt4_ick",     &wdt4_ick,      CK_243X),
1970         CLK(NULL,       "wdt4_fck",     &wdt4_fck,      CK_243X),
1971         CLK(NULL,       "mspro_ick",    &mspro_ick,     CK_243X),
1972         CLK(NULL,       "mspro_fck",    &mspro_fck,     CK_243X),
1973         CLK(NULL,       "fac_ick",      &fac_ick,       CK_243X),
1974         CLK(NULL,       "fac_fck",      &fac_fck,       CK_243X),
1975         CLK("omap_hdq.0", "ick",        &hdq_ick,       CK_243X),
1976         CLK("omap_hdq.1", "fck",        &hdq_fck,       CK_243X),
1977         CLK("omap_i2c.1", "ick",        &i2c1_ick,      CK_243X),
1978         CLK(NULL,       "i2chs1_fck",   &i2chs1_fck,    CK_243X),
1979         CLK("omap_i2c.2", "ick",        &i2c2_ick,      CK_243X),
1980         CLK(NULL,       "i2chs2_fck",   &i2chs2_fck,    CK_243X),
1981         CLK(NULL,       "gpmc_fck",     &gpmc_fck,      CK_243X),
1982         CLK(NULL,       "sdma_fck",     &sdma_fck,      CK_243X),
1983         CLK(NULL,       "sdma_ick",     &sdma_ick,      CK_243X),
1984         CLK(NULL,       "sdrc_ick",     &sdrc_ick,      CK_243X),
1985         CLK(NULL,       "des_ick",      &des_ick,       CK_243X),
1986         CLK("omap-sham",        "ick",  &sha_ick,       CK_243X),
1987         CLK("omap_rng", "ick",          &rng_ick,       CK_243X),
1988         CLK("omap-aes", "ick",  &aes_ick,       CK_243X),
1989         CLK(NULL,       "pka_ick",      &pka_ick,       CK_243X),
1990         CLK(NULL,       "usb_fck",      &usb_fck,       CK_243X),
1991         CLK("musb-omap2430",    "ick",  &usbhs_ick,     CK_243X),
1992         CLK("omap_hsmmc.0", "ick",      &mmchs1_ick,    CK_243X),
1993         CLK(NULL,       "mmchs1_fck",   &mmchs1_fck,    CK_243X),
1994         CLK("omap_hsmmc.1", "ick",      &mmchs2_ick,    CK_243X),
1995         CLK(NULL,       "mmchs2_fck",   &mmchs2_fck,    CK_243X),
1996         CLK(NULL,       "gpio5_ick",    &gpio5_ick,     CK_243X),
1997         CLK(NULL,       "gpio5_fck",    &gpio5_fck,     CK_243X),
1998         CLK(NULL,       "mdm_intc_ick", &mdm_intc_ick,  CK_243X),
1999         CLK("omap_hsmmc.0", "mmchsdb_fck",      &mmchsdb1_fck,  CK_243X),
2000         CLK("omap_hsmmc.1", "mmchsdb_fck",      &mmchsdb2_fck,  CK_243X),
2001         CLK("omap_timer.1",     "32k_ck",  &func_32k_ck,   CK_243X),
2002         CLK("omap_timer.2",     "32k_ck",  &func_32k_ck,   CK_243X),
2003         CLK("omap_timer.3",     "32k_ck",  &func_32k_ck,   CK_243X),
2004         CLK("omap_timer.4",     "32k_ck",  &func_32k_ck,   CK_243X),
2005         CLK("omap_timer.5",     "32k_ck",  &func_32k_ck,   CK_243X),
2006         CLK("omap_timer.6",     "32k_ck",  &func_32k_ck,   CK_243X),
2007         CLK("omap_timer.7",     "32k_ck",  &func_32k_ck,   CK_243X),
2008         CLK("omap_timer.8",     "32k_ck",  &func_32k_ck,   CK_243X),
2009         CLK("omap_timer.9",     "32k_ck",  &func_32k_ck,   CK_243X),
2010         CLK("omap_timer.10",    "32k_ck",  &func_32k_ck,   CK_243X),
2011         CLK("omap_timer.11",    "32k_ck",  &func_32k_ck,   CK_243X),
2012         CLK("omap_timer.12",    "32k_ck",  &func_32k_ck,   CK_243X),
2013         CLK("omap_timer.1",     "sys_ck",       &sys_ck,        CK_243X),
2014         CLK("omap_timer.2",     "sys_ck",       &sys_ck,        CK_243X),
2015         CLK("omap_timer.3",     "sys_ck",       &sys_ck,        CK_243X),
2016         CLK("omap_timer.4",     "sys_ck",       &sys_ck,        CK_243X),
2017         CLK("omap_timer.5",     "sys_ck",       &sys_ck,        CK_243X),
2018         CLK("omap_timer.6",     "sys_ck",       &sys_ck,        CK_243X),
2019         CLK("omap_timer.7",     "sys_ck",       &sys_ck,        CK_243X),
2020         CLK("omap_timer.8",     "sys_ck",       &sys_ck,        CK_243X),
2021         CLK("omap_timer.9",     "sys_ck",       &sys_ck,        CK_243X),
2022         CLK("omap_timer.10",    "sys_ck",       &sys_ck,        CK_243X),
2023         CLK("omap_timer.11",    "sys_ck",       &sys_ck,        CK_243X),
2024         CLK("omap_timer.12",    "sys_ck",       &sys_ck,        CK_243X),
2025         CLK("omap_timer.1",     "alt_ck",       &alt_ck,        CK_243X),
2026         CLK("omap_timer.2",     "alt_ck",       &alt_ck,        CK_243X),
2027         CLK("omap_timer.3",     "alt_ck",       &alt_ck,        CK_243X),
2028         CLK("omap_timer.4",     "alt_ck",       &alt_ck,        CK_243X),
2029         CLK("omap_timer.5",     "alt_ck",       &alt_ck,        CK_243X),
2030         CLK("omap_timer.6",     "alt_ck",       &alt_ck,        CK_243X),
2031         CLK("omap_timer.7",     "alt_ck",       &alt_ck,        CK_243X),
2032         CLK("omap_timer.8",     "alt_ck",       &alt_ck,        CK_243X),
2033         CLK("omap_timer.9",     "alt_ck",       &alt_ck,        CK_243X),
2034         CLK("omap_timer.10",    "alt_ck",       &alt_ck,        CK_243X),
2035         CLK("omap_timer.11",    "alt_ck",       &alt_ck,        CK_243X),
2036         CLK("omap_timer.12",    "alt_ck",       &alt_ck,        CK_243X),
2037 };
2038
2039 /*
2040  * init code
2041  */
2042
2043 int __init omap2430_clk_init(void)
2044 {
2045         const struct prcm_config *prcm;
2046         struct omap_clk *c;
2047         u32 clkrate;
2048
2049         prcm_clksrc_ctrl = OMAP2430_PRCM_CLKSRC_CTRL;
2050         cm_idlest_pll = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST);
2051         cpu_mask = RATE_IN_243X;
2052         rate_table = omap2430_rate_table;
2053
2054         clk_init(&omap2_clk_functions);
2055
2056         for (c = omap2430_clks; c < omap2430_clks + ARRAY_SIZE(omap2430_clks);
2057              c++)
2058                 clk_preinit(c->lk.clk);
2059
2060         osc_ck.rate = omap2_osc_clk_recalc(&osc_ck);
2061         propagate_rate(&osc_ck);
2062         sys_ck.rate = omap2xxx_sys_clk_recalc(&sys_ck);
2063         propagate_rate(&sys_ck);
2064
2065         for (c = omap2430_clks; c < omap2430_clks + ARRAY_SIZE(omap2430_clks);
2066              c++) {
2067                 clkdev_add(&c->lk);
2068                 clk_register(c->lk.clk);
2069                 omap2_init_clk_clkdm(c->lk.clk);
2070         }
2071
2072         /* Disable autoidle on all clocks; let the PM code enable it later */
2073         omap_clk_disable_autoidle_all();
2074
2075         /* Check the MPU rate set by bootloader */
2076         clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
2077         for (prcm = rate_table; prcm->mpu_speed; prcm++) {
2078                 if (!(prcm->flags & cpu_mask))
2079                         continue;
2080                 if (prcm->xtal_speed != sys_ck.rate)
2081                         continue;
2082                 if (prcm->dpll_speed <= clkrate)
2083                         break;
2084         }
2085         curr_prcm_set = prcm;
2086
2087         recalculate_root_clocks();
2088
2089         pr_info("Clocking rate (Crystal/DPLL/MPU): %ld.%01ld/%ld/%ld MHz\n",
2090                 (sys_ck.rate / 1000000), (sys_ck.rate / 100000) % 10,
2091                 (dpll_ck.rate / 1000000), (mpu_ck.rate / 1000000)) ;
2092
2093         /*
2094          * Only enable those clocks we will need, let the drivers
2095          * enable other clocks as necessary
2096          */
2097         clk_enable_init_clocks();
2098
2099         /* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */
2100         vclk = clk_get(NULL, "virt_prcm_set");
2101         sclk = clk_get(NULL, "sys_ck");
2102         dclk = clk_get(NULL, "dpll_ck");
2103
2104         return 0;
2105 }
2106