Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
clock44xx_data.c
Go to the documentation of this file.
1 /*
2  * OMAP4 Clock data
3  *
4  * Copyright (C) 2009-2010 Texas Instruments, Inc.
5  * Copyright (C) 2009-2010 Nokia Corporation
6  *
7  * Paul Walmsley ([email protected])
8  * Rajendra Nayak ([email protected])
9  * Benoit Cousson ([email protected])
10  *
11  * This file is automatically generated from the OMAP hardware databases.
12  * We respectfully ask that any modifications to this file be coordinated
13  * with the public [email protected] mailing list and the
14  * authors above to ensure that the autogeneration scripts are kept
15  * up-to-date with the file contents.
16  *
17  * This program is free software; you can redistribute it and/or modify
18  * it under the terms of the GNU General Public License version 2 as
19  * published by the Free Software Foundation.
20  *
21  * XXX Some of the ES1 clocks have been removed/changed; once support
22  * is added for discriminating clocks by ES level, these should be added back
23  * in.
24  */
25 
26 #include <linux/kernel.h>
27 #include <linux/list.h>
28 #include <linux/clk.h>
29 #include <linux/io.h>
30 
31 #include <plat/clkdev_omap.h>
32 
33 #include "soc.h"
34 #include "iomap.h"
35 #include "clock.h"
36 #include "clock44xx.h"
37 #include "cm1_44xx.h"
38 #include "cm2_44xx.h"
39 #include "cm-regbits-44xx.h"
40 #include "prm44xx.h"
41 #include "prm-regbits-44xx.h"
42 #include "control.h"
43 #include "scrm44xx.h"
44 
45 /* OMAP4 modulemode control */
46 #define OMAP4430_MODULEMODE_HWCTRL 0
47 #define OMAP4430_MODULEMODE_SWCTRL 1
48 
49 /* Root clocks */
50 
51 static struct clk extalt_clkin_ck = {
52  .name = "extalt_clkin_ck",
53  .rate = 59000000,
54  .ops = &clkops_null,
55 };
56 
57 static struct clk pad_clks_ck = {
58  .name = "pad_clks_ck",
59  .rate = 12000000,
60  .ops = &clkops_omap2_dflt,
61  .enable_reg = OMAP4430_CM_CLKSEL_ABE,
62  .enable_bit = OMAP4430_PAD_CLKS_GATE_SHIFT,
63 };
64 
65 static struct clk pad_slimbus_core_clks_ck = {
66  .name = "pad_slimbus_core_clks_ck",
67  .rate = 12000000,
68  .ops = &clkops_null,
69 };
70 
71 static struct clk secure_32k_clk_src_ck = {
72  .name = "secure_32k_clk_src_ck",
73  .rate = 32768,
74  .ops = &clkops_null,
75 };
76 
77 static struct clk slimbus_clk = {
78  .name = "slimbus_clk",
79  .rate = 12000000,
80  .ops = &clkops_omap2_dflt,
81  .enable_reg = OMAP4430_CM_CLKSEL_ABE,
82  .enable_bit = OMAP4430_SLIMBUS_CLK_GATE_SHIFT,
83 };
84 
85 static struct clk sys_32k_ck = {
86  .name = "sys_32k_ck",
87  .clkdm_name = "prm_clkdm",
88  .rate = 32768,
89  .ops = &clkops_null,
90 };
91 
92 static struct clk virt_12000000_ck = {
93  .name = "virt_12000000_ck",
94  .ops = &clkops_null,
95  .rate = 12000000,
96 };
97 
98 static struct clk virt_13000000_ck = {
99  .name = "virt_13000000_ck",
100  .ops = &clkops_null,
101  .rate = 13000000,
102 };
103 
104 static struct clk virt_16800000_ck = {
105  .name = "virt_16800000_ck",
106  .ops = &clkops_null,
107  .rate = 16800000,
108 };
109 
110 static struct clk virt_27000000_ck = {
111  .name = "virt_27000000_ck",
112  .ops = &clkops_null,
113  .rate = 27000000,
114 };
115 
116 static struct clk virt_38400000_ck = {
117  .name = "virt_38400000_ck",
118  .ops = &clkops_null,
119  .rate = 38400000,
120 };
121 
122 static const struct clksel_rate div_1_5_rates[] = {
123  { .div = 1, .val = 5, .flags = RATE_IN_4430 },
124  { .div = 0 },
125 };
126 
127 static const struct clksel_rate div_1_6_rates[] = {
128  { .div = 1, .val = 6, .flags = RATE_IN_4430 },
129  { .div = 0 },
130 };
131 
132 static const struct clksel_rate div_1_7_rates[] = {
133  { .div = 1, .val = 7, .flags = RATE_IN_4430 },
134  { .div = 0 },
135 };
136 
137 static const struct clksel sys_clkin_sel[] = {
138  { .parent = &virt_12000000_ck, .rates = div_1_1_rates },
139  { .parent = &virt_13000000_ck, .rates = div_1_2_rates },
140  { .parent = &virt_16800000_ck, .rates = div_1_3_rates },
141  { .parent = &virt_19200000_ck, .rates = div_1_4_rates },
142  { .parent = &virt_26000000_ck, .rates = div_1_5_rates },
143  { .parent = &virt_27000000_ck, .rates = div_1_6_rates },
144  { .parent = &virt_38400000_ck, .rates = div_1_7_rates },
145  { .parent = NULL },
146 };
147 
148 static struct clk sys_clkin_ck = {
149  .name = "sys_clkin_ck",
150  .rate = 38400000,
151  .clksel = sys_clkin_sel,
152  .init = &omap2_init_clksel_parent,
153  .clksel_reg = OMAP4430_CM_SYS_CLKSEL,
154  .clksel_mask = OMAP4430_SYS_CLKSEL_MASK,
155  .ops = &clkops_null,
156  .recalc = &omap2_clksel_recalc,
157 };
158 
159 static struct clk tie_low_clock_ck = {
160  .name = "tie_low_clock_ck",
161  .rate = 0,
162  .ops = &clkops_null,
163 };
164 
165 static struct clk utmi_phy_clkout_ck = {
166  .name = "utmi_phy_clkout_ck",
167  .rate = 60000000,
168  .ops = &clkops_null,
169 };
170 
171 static struct clk xclk60mhsp1_ck = {
172  .name = "xclk60mhsp1_ck",
173  .rate = 60000000,
174  .ops = &clkops_null,
175 };
176 
177 static struct clk xclk60mhsp2_ck = {
178  .name = "xclk60mhsp2_ck",
179  .rate = 60000000,
180  .ops = &clkops_null,
181 };
182 
183 static struct clk xclk60motg_ck = {
184  .name = "xclk60motg_ck",
185  .rate = 60000000,
186  .ops = &clkops_null,
187 };
188 
189 /* Module clocks and DPLL outputs */
190 
191 static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
192  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
193  { .parent = &sys_32k_ck, .rates = div_1_1_rates },
194  { .parent = NULL },
195 };
196 
197 static struct clk abe_dpll_bypass_clk_mux_ck = {
198  .name = "abe_dpll_bypass_clk_mux_ck",
199  .parent = &sys_clkin_ck,
200  .ops = &clkops_null,
201  .recalc = &followparent_recalc,
202 };
203 
204 static struct clk abe_dpll_refclk_mux_ck = {
205  .name = "abe_dpll_refclk_mux_ck",
206  .parent = &sys_clkin_ck,
207  .clksel = abe_dpll_bypass_clk_mux_sel,
208  .init = &omap2_init_clksel_parent,
209  .clksel_reg = OMAP4430_CM_ABE_PLL_REF_CLKSEL,
210  .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
211  .ops = &clkops_null,
212  .recalc = &omap2_clksel_recalc,
213 };
214 
215 /* DPLL_ABE */
216 static struct dpll_data dpll_abe_dd = {
217  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_ABE,
218  .clk_bypass = &abe_dpll_bypass_clk_mux_ck,
219  .clk_ref = &abe_dpll_refclk_mux_ck,
220  .control_reg = OMAP4430_CM_CLKMODE_DPLL_ABE,
221  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
222  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_ABE,
223  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_ABE,
224  .mult_mask = OMAP4430_DPLL_MULT_MASK,
225  .div1_mask = OMAP4430_DPLL_DIV_MASK,
226  .enable_mask = OMAP4430_DPLL_EN_MASK,
227  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
228  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
229  .max_multiplier = 2047,
230  .max_divider = 128,
231  .min_divider = 1,
232 };
233 
234 
235 static struct clk dpll_abe_ck = {
236  .name = "dpll_abe_ck",
237  .parent = &abe_dpll_refclk_mux_ck,
238  .dpll_data = &dpll_abe_dd,
239  .init = &omap2_init_dpll_parent,
241  .recalc = &omap4_dpll_regm4xen_recalc,
242  .round_rate = &omap4_dpll_regm4xen_round_rate,
243  .set_rate = &omap3_noncore_dpll_set_rate,
244 };
245 
246 static struct clk dpll_abe_x2_ck = {
247  .name = "dpll_abe_x2_ck",
248  .parent = &dpll_abe_ck,
249  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
250  .flags = CLOCK_CLKOUTX2,
251  .ops = &clkops_omap4_dpllmx_ops,
252  .recalc = &omap3_clkoutx2_recalc,
253 };
254 
255 static const struct clksel dpll_abe_m2x2_div[] = {
256  { .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
257  { .parent = NULL },
258 };
259 
260 static struct clk dpll_abe_m2x2_ck = {
261  .name = "dpll_abe_m2x2_ck",
262  .parent = &dpll_abe_x2_ck,
263  .clksel = dpll_abe_m2x2_div,
264  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
265  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
266  .ops = &clkops_omap4_dpllmx_ops,
267  .recalc = &omap2_clksel_recalc,
268  .round_rate = &omap2_clksel_round_rate,
269  .set_rate = &omap2_clksel_set_rate,
270 };
271 
272 static struct clk abe_24m_fclk = {
273  .name = "abe_24m_fclk",
274  .parent = &dpll_abe_m2x2_ck,
275  .ops = &clkops_null,
276  .fixed_div = 8,
277  .recalc = &omap_fixed_divisor_recalc,
278 };
279 
280 static const struct clksel_rate div3_1to4_rates[] = {
281  { .div = 1, .val = 0, .flags = RATE_IN_4430 },
282  { .div = 2, .val = 1, .flags = RATE_IN_4430 },
283  { .div = 4, .val = 2, .flags = RATE_IN_4430 },
284  { .div = 0 },
285 };
286 
287 static const struct clksel abe_clk_div[] = {
288  { .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
289  { .parent = NULL },
290 };
291 
292 static struct clk abe_clk = {
293  .name = "abe_clk",
294  .parent = &dpll_abe_m2x2_ck,
295  .clksel = abe_clk_div,
296  .clksel_reg = OMAP4430_CM_CLKSEL_ABE,
297  .clksel_mask = OMAP4430_CLKSEL_OPP_MASK,
298  .ops = &clkops_null,
299  .recalc = &omap2_clksel_recalc,
300  .round_rate = &omap2_clksel_round_rate,
301  .set_rate = &omap2_clksel_set_rate,
302 };
303 
304 static const struct clksel_rate div2_1to2_rates[] = {
305  { .div = 1, .val = 0, .flags = RATE_IN_4430 },
306  { .div = 2, .val = 1, .flags = RATE_IN_4430 },
307  { .div = 0 },
308 };
309 
310 static const struct clksel aess_fclk_div[] = {
311  { .parent = &abe_clk, .rates = div2_1to2_rates },
312  { .parent = NULL },
313 };
314 
315 static struct clk aess_fclk = {
316  .name = "aess_fclk",
317  .parent = &abe_clk,
318  .clksel = aess_fclk_div,
319  .clksel_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
320  .clksel_mask = OMAP4430_CLKSEL_AESS_FCLK_MASK,
321  .ops = &clkops_null,
322  .recalc = &omap2_clksel_recalc,
323  .round_rate = &omap2_clksel_round_rate,
324  .set_rate = &omap2_clksel_set_rate,
325 };
326 
327 static struct clk dpll_abe_m3x2_ck = {
328  .name = "dpll_abe_m3x2_ck",
329  .parent = &dpll_abe_x2_ck,
330  .clksel = dpll_abe_m2x2_div,
331  .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_ABE,
332  .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
333  .ops = &clkops_omap4_dpllmx_ops,
334  .recalc = &omap2_clksel_recalc,
335  .round_rate = &omap2_clksel_round_rate,
336  .set_rate = &omap2_clksel_set_rate,
337 };
338 
339 static const struct clksel core_hsd_byp_clk_mux_sel[] = {
340  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
341  { .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
342  { .parent = NULL },
343 };
344 
345 static struct clk core_hsd_byp_clk_mux_ck = {
346  .name = "core_hsd_byp_clk_mux_ck",
347  .parent = &sys_clkin_ck,
348  .clksel = core_hsd_byp_clk_mux_sel,
350  .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
351  .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
352  .ops = &clkops_null,
353  .recalc = &omap2_clksel_recalc,
354 };
355 
356 /* DPLL_CORE */
357 static struct dpll_data dpll_core_dd = {
358  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
359  .clk_bypass = &core_hsd_byp_clk_mux_ck,
360  .clk_ref = &sys_clkin_ck,
361  .control_reg = OMAP4430_CM_CLKMODE_DPLL_CORE,
362  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
363  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_CORE,
364  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_CORE,
365  .mult_mask = OMAP4430_DPLL_MULT_MASK,
366  .div1_mask = OMAP4430_DPLL_DIV_MASK,
367  .enable_mask = OMAP4430_DPLL_EN_MASK,
368  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
369  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
370  .max_multiplier = 2047,
371  .max_divider = 128,
372  .min_divider = 1,
373 };
374 
375 
376 static struct clk dpll_core_ck = {
377  .name = "dpll_core_ck",
378  .parent = &sys_clkin_ck,
379  .dpll_data = &dpll_core_dd,
382  .recalc = &omap3_dpll_recalc,
383 };
384 
385 static struct clk dpll_core_x2_ck = {
386  .name = "dpll_core_x2_ck",
387  .parent = &dpll_core_ck,
389  .ops = &clkops_null,
390  .recalc = &omap3_clkoutx2_recalc,
391 };
392 
393 static const struct clksel dpll_core_m6x2_div[] = {
394  { .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
395  { .parent = NULL },
396 };
397 
398 static struct clk dpll_core_m6x2_ck = {
399  .name = "dpll_core_m6x2_ck",
400  .parent = &dpll_core_x2_ck,
401  .clksel = dpll_core_m6x2_div,
402  .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_CORE,
404  .ops = &clkops_omap4_dpllmx_ops,
405  .recalc = &omap2_clksel_recalc,
406  .round_rate = &omap2_clksel_round_rate,
407  .set_rate = &omap2_clksel_set_rate,
408 };
409 
410 static const struct clksel dbgclk_mux_sel[] = {
411  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
412  { .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
413  { .parent = NULL },
414 };
415 
416 static struct clk dbgclk_mux_ck = {
417  .name = "dbgclk_mux_ck",
418  .parent = &sys_clkin_ck,
419  .ops = &clkops_null,
420  .recalc = &followparent_recalc,
421 };
422 
423 static const struct clksel dpll_core_m2_div[] = {
424  { .parent = &dpll_core_ck, .rates = div31_1to31_rates },
425  { .parent = NULL },
426 };
427 
428 static struct clk dpll_core_m2_ck = {
429  .name = "dpll_core_m2_ck",
430  .parent = &dpll_core_ck,
431  .clksel = dpll_core_m2_div,
432  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_CORE,
433  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
434  .ops = &clkops_omap4_dpllmx_ops,
435  .recalc = &omap2_clksel_recalc,
436  .round_rate = &omap2_clksel_round_rate,
437  .set_rate = &omap2_clksel_set_rate,
438 };
439 
440 static struct clk ddrphy_ck = {
441  .name = "ddrphy_ck",
442  .parent = &dpll_core_m2_ck,
443  .ops = &clkops_null,
444  .clkdm_name = "l3_emif_clkdm",
445  .fixed_div = 2,
446  .recalc = &omap_fixed_divisor_recalc,
447 };
448 
449 static struct clk dpll_core_m5x2_ck = {
450  .name = "dpll_core_m5x2_ck",
451  .parent = &dpll_core_x2_ck,
452  .clksel = dpll_core_m6x2_div,
453  .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_CORE,
455  .ops = &clkops_omap4_dpllmx_ops,
456  .recalc = &omap2_clksel_recalc,
457  .round_rate = &omap2_clksel_round_rate,
458  .set_rate = &omap2_clksel_set_rate,
459 };
460 
461 static const struct clksel div_core_div[] = {
462  { .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
463  { .parent = NULL },
464 };
465 
466 static struct clk div_core_ck = {
467  .name = "div_core_ck",
468  .parent = &dpll_core_m5x2_ck,
469  .clksel = div_core_div,
470  .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
471  .clksel_mask = OMAP4430_CLKSEL_CORE_MASK,
472  .ops = &clkops_null,
473  .recalc = &omap2_clksel_recalc,
474  .round_rate = &omap2_clksel_round_rate,
475  .set_rate = &omap2_clksel_set_rate,
476 };
477 
478 static const struct clksel_rate div4_1to8_rates[] = {
479  { .div = 1, .val = 0, .flags = RATE_IN_4430 },
480  { .div = 2, .val = 1, .flags = RATE_IN_4430 },
481  { .div = 4, .val = 2, .flags = RATE_IN_4430 },
482  { .div = 8, .val = 3, .flags = RATE_IN_4430 },
483  { .div = 0 },
484 };
485 
486 static const struct clksel div_iva_hs_clk_div[] = {
487  { .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
488  { .parent = NULL },
489 };
490 
491 static struct clk div_iva_hs_clk = {
492  .name = "div_iva_hs_clk",
493  .parent = &dpll_core_m5x2_ck,
494  .clksel = div_iva_hs_clk_div,
495  .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_IVA,
496  .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
497  .ops = &clkops_null,
498  .recalc = &omap2_clksel_recalc,
499  .round_rate = &omap2_clksel_round_rate,
500  .set_rate = &omap2_clksel_set_rate,
501 };
502 
503 static struct clk div_mpu_hs_clk = {
504  .name = "div_mpu_hs_clk",
505  .parent = &dpll_core_m5x2_ck,
506  .clksel = div_iva_hs_clk_div,
507  .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_MPU,
508  .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
509  .ops = &clkops_null,
510  .recalc = &omap2_clksel_recalc,
511  .round_rate = &omap2_clksel_round_rate,
512  .set_rate = &omap2_clksel_set_rate,
513 };
514 
515 static struct clk dpll_core_m4x2_ck = {
516  .name = "dpll_core_m4x2_ck",
517  .parent = &dpll_core_x2_ck,
518  .clksel = dpll_core_m6x2_div,
519  .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_CORE,
521  .ops = &clkops_omap4_dpllmx_ops,
522  .recalc = &omap2_clksel_recalc,
523  .round_rate = &omap2_clksel_round_rate,
524  .set_rate = &omap2_clksel_set_rate,
525 };
526 
527 static struct clk dll_clk_div_ck = {
528  .name = "dll_clk_div_ck",
529  .parent = &dpll_core_m4x2_ck,
530  .ops = &clkops_null,
531  .fixed_div = 2,
532  .recalc = &omap_fixed_divisor_recalc,
533 };
534 
535 static const struct clksel dpll_abe_m2_div[] = {
536  { .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
537  { .parent = NULL },
538 };
539 
540 static struct clk dpll_abe_m2_ck = {
541  .name = "dpll_abe_m2_ck",
542  .parent = &dpll_abe_ck,
543  .clksel = dpll_abe_m2_div,
544  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
545  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
546  .ops = &clkops_omap4_dpllmx_ops,
547  .recalc = &omap2_clksel_recalc,
548  .round_rate = &omap2_clksel_round_rate,
549  .set_rate = &omap2_clksel_set_rate,
550 };
551 
552 static struct clk dpll_core_m3x2_ck = {
553  .name = "dpll_core_m3x2_ck",
554  .parent = &dpll_core_x2_ck,
555  .clksel = dpll_core_m6x2_div,
556  .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_CORE,
557  .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
558  .ops = &clkops_omap2_dflt,
559  .recalc = &omap2_clksel_recalc,
560  .round_rate = &omap2_clksel_round_rate,
561  .set_rate = &omap2_clksel_set_rate,
562  .enable_reg = OMAP4430_CM_DIV_M3_DPLL_CORE,
564 };
565 
566 static struct clk dpll_core_m7x2_ck = {
567  .name = "dpll_core_m7x2_ck",
568  .parent = &dpll_core_x2_ck,
569  .clksel = dpll_core_m6x2_div,
570  .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_CORE,
572  .ops = &clkops_omap4_dpllmx_ops,
573  .recalc = &omap2_clksel_recalc,
574  .round_rate = &omap2_clksel_round_rate,
575  .set_rate = &omap2_clksel_set_rate,
576 };
577 
578 static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
579  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
580  { .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
581  { .parent = NULL },
582 };
583 
584 static struct clk iva_hsd_byp_clk_mux_ck = {
585  .name = "iva_hsd_byp_clk_mux_ck",
586  .parent = &sys_clkin_ck,
587  .clksel = iva_hsd_byp_clk_mux_sel,
589  .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_IVA,
590  .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
591  .ops = &clkops_null,
592  .recalc = &omap2_clksel_recalc,
593 };
594 
595 /* DPLL_IVA */
596 static struct dpll_data dpll_iva_dd = {
597  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_IVA,
598  .clk_bypass = &iva_hsd_byp_clk_mux_ck,
599  .clk_ref = &sys_clkin_ck,
600  .control_reg = OMAP4430_CM_CLKMODE_DPLL_IVA,
601  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
602  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_IVA,
603  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_IVA,
604  .mult_mask = OMAP4430_DPLL_MULT_MASK,
605  .div1_mask = OMAP4430_DPLL_DIV_MASK,
606  .enable_mask = OMAP4430_DPLL_EN_MASK,
607  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
608  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
609  .max_multiplier = 2047,
610  .max_divider = 128,
611  .min_divider = 1,
612 };
613 
614 
615 static struct clk dpll_iva_ck = {
616  .name = "dpll_iva_ck",
617  .parent = &sys_clkin_ck,
618  .dpll_data = &dpll_iva_dd,
621  .recalc = &omap3_dpll_recalc,
622  .round_rate = &omap2_dpll_round_rate,
623  .set_rate = &omap3_noncore_dpll_set_rate,
624 };
625 
626 static struct clk dpll_iva_x2_ck = {
627  .name = "dpll_iva_x2_ck",
628  .parent = &dpll_iva_ck,
630  .ops = &clkops_null,
631  .recalc = &omap3_clkoutx2_recalc,
632 };
633 
634 static const struct clksel dpll_iva_m4x2_div[] = {
635  { .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
636  { .parent = NULL },
637 };
638 
639 static struct clk dpll_iva_m4x2_ck = {
640  .name = "dpll_iva_m4x2_ck",
641  .parent = &dpll_iva_x2_ck,
642  .clksel = dpll_iva_m4x2_div,
643  .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_IVA,
645  .ops = &clkops_omap4_dpllmx_ops,
646  .recalc = &omap2_clksel_recalc,
647  .round_rate = &omap2_clksel_round_rate,
648  .set_rate = &omap2_clksel_set_rate,
649 };
650 
651 static struct clk dpll_iva_m5x2_ck = {
652  .name = "dpll_iva_m5x2_ck",
653  .parent = &dpll_iva_x2_ck,
654  .clksel = dpll_iva_m4x2_div,
655  .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_IVA,
657  .ops = &clkops_omap4_dpllmx_ops,
658  .recalc = &omap2_clksel_recalc,
659  .round_rate = &omap2_clksel_round_rate,
660  .set_rate = &omap2_clksel_set_rate,
661 };
662 
663 /* DPLL_MPU */
664 static struct dpll_data dpll_mpu_dd = {
665  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_MPU,
666  .clk_bypass = &div_mpu_hs_clk,
667  .clk_ref = &sys_clkin_ck,
668  .control_reg = OMAP4430_CM_CLKMODE_DPLL_MPU,
669  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
670  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_MPU,
671  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_MPU,
672  .mult_mask = OMAP4430_DPLL_MULT_MASK,
673  .div1_mask = OMAP4430_DPLL_DIV_MASK,
674  .enable_mask = OMAP4430_DPLL_EN_MASK,
675  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
676  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
677  .max_multiplier = 2047,
678  .max_divider = 128,
679  .min_divider = 1,
680 };
681 
682 
683 static struct clk dpll_mpu_ck = {
684  .name = "dpll_mpu_ck",
685  .parent = &sys_clkin_ck,
686  .dpll_data = &dpll_mpu_dd,
689  .recalc = &omap3_dpll_recalc,
690  .round_rate = &omap2_dpll_round_rate,
691  .set_rate = &omap3_noncore_dpll_set_rate,
692 };
693 
694 static const struct clksel dpll_mpu_m2_div[] = {
695  { .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
696  { .parent = NULL },
697 };
698 
699 static struct clk dpll_mpu_m2_ck = {
700  .name = "dpll_mpu_m2_ck",
701  .parent = &dpll_mpu_ck,
702  .clkdm_name = "cm_clkdm",
703  .clksel = dpll_mpu_m2_div,
704  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_MPU,
705  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
706  .ops = &clkops_omap4_dpllmx_ops,
707  .recalc = &omap2_clksel_recalc,
708  .round_rate = &omap2_clksel_round_rate,
709  .set_rate = &omap2_clksel_set_rate,
710 };
711 
712 static struct clk per_hs_clk_div_ck = {
713  .name = "per_hs_clk_div_ck",
714  .parent = &dpll_abe_m3x2_ck,
715  .ops = &clkops_null,
716  .fixed_div = 2,
717  .recalc = &omap_fixed_divisor_recalc,
718 };
719 
720 static const struct clksel per_hsd_byp_clk_mux_sel[] = {
721  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
722  { .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
723  { .parent = NULL },
724 };
725 
726 static struct clk per_hsd_byp_clk_mux_ck = {
727  .name = "per_hsd_byp_clk_mux_ck",
728  .parent = &sys_clkin_ck,
729  .clksel = per_hsd_byp_clk_mux_sel,
731  .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
732  .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
733  .ops = &clkops_null,
734  .recalc = &omap2_clksel_recalc,
735 };
736 
737 /* DPLL_PER */
738 static struct dpll_data dpll_per_dd = {
739  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
740  .clk_bypass = &per_hsd_byp_clk_mux_ck,
741  .clk_ref = &sys_clkin_ck,
742  .control_reg = OMAP4430_CM_CLKMODE_DPLL_PER,
743  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
744  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_PER,
745  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_PER,
746  .mult_mask = OMAP4430_DPLL_MULT_MASK,
747  .div1_mask = OMAP4430_DPLL_DIV_MASK,
748  .enable_mask = OMAP4430_DPLL_EN_MASK,
749  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
750  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
751  .max_multiplier = 2047,
752  .max_divider = 128,
753  .min_divider = 1,
754 };
755 
756 
757 static struct clk dpll_per_ck = {
758  .name = "dpll_per_ck",
759  .parent = &sys_clkin_ck,
760  .dpll_data = &dpll_per_dd,
763  .recalc = &omap3_dpll_recalc,
764  .round_rate = &omap2_dpll_round_rate,
765  .set_rate = &omap3_noncore_dpll_set_rate,
766 };
767 
768 static const struct clksel dpll_per_m2_div[] = {
769  { .parent = &dpll_per_ck, .rates = div31_1to31_rates },
770  { .parent = NULL },
771 };
772 
773 static struct clk dpll_per_m2_ck = {
774  .name = "dpll_per_m2_ck",
775  .parent = &dpll_per_ck,
776  .clksel = dpll_per_m2_div,
777  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
778  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
779  .ops = &clkops_omap4_dpllmx_ops,
780  .recalc = &omap2_clksel_recalc,
781  .round_rate = &omap2_clksel_round_rate,
782  .set_rate = &omap2_clksel_set_rate,
783 };
784 
785 static struct clk dpll_per_x2_ck = {
786  .name = "dpll_per_x2_ck",
787  .parent = &dpll_per_ck,
788  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
789  .flags = CLOCK_CLKOUTX2,
790  .ops = &clkops_omap4_dpllmx_ops,
791  .recalc = &omap3_clkoutx2_recalc,
792 };
793 
794 static const struct clksel dpll_per_m2x2_div[] = {
795  { .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
796  { .parent = NULL },
797 };
798 
799 static struct clk dpll_per_m2x2_ck = {
800  .name = "dpll_per_m2x2_ck",
801  .parent = &dpll_per_x2_ck,
802  .clksel = dpll_per_m2x2_div,
803  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
804  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
805  .ops = &clkops_omap4_dpllmx_ops,
806  .recalc = &omap2_clksel_recalc,
807  .round_rate = &omap2_clksel_round_rate,
808  .set_rate = &omap2_clksel_set_rate,
809 };
810 
811 static struct clk dpll_per_m3x2_ck = {
812  .name = "dpll_per_m3x2_ck",
813  .parent = &dpll_per_x2_ck,
814  .clksel = dpll_per_m2x2_div,
815  .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_PER,
816  .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
817  .ops = &clkops_omap2_dflt,
818  .recalc = &omap2_clksel_recalc,
819  .round_rate = &omap2_clksel_round_rate,
820  .set_rate = &omap2_clksel_set_rate,
821  .enable_reg = OMAP4430_CM_DIV_M3_DPLL_PER,
823 };
824 
825 static struct clk dpll_per_m4x2_ck = {
826  .name = "dpll_per_m4x2_ck",
827  .parent = &dpll_per_x2_ck,
828  .clksel = dpll_per_m2x2_div,
829  .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_PER,
831  .ops = &clkops_omap4_dpllmx_ops,
832  .recalc = &omap2_clksel_recalc,
833  .round_rate = &omap2_clksel_round_rate,
834  .set_rate = &omap2_clksel_set_rate,
835 };
836 
837 static struct clk dpll_per_m5x2_ck = {
838  .name = "dpll_per_m5x2_ck",
839  .parent = &dpll_per_x2_ck,
840  .clksel = dpll_per_m2x2_div,
841  .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_PER,
843  .ops = &clkops_omap4_dpllmx_ops,
844  .recalc = &omap2_clksel_recalc,
845  .round_rate = &omap2_clksel_round_rate,
846  .set_rate = &omap2_clksel_set_rate,
847 };
848 
849 static struct clk dpll_per_m6x2_ck = {
850  .name = "dpll_per_m6x2_ck",
851  .parent = &dpll_per_x2_ck,
852  .clksel = dpll_per_m2x2_div,
853  .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_PER,
855  .ops = &clkops_omap4_dpllmx_ops,
856  .recalc = &omap2_clksel_recalc,
857  .round_rate = &omap2_clksel_round_rate,
858  .set_rate = &omap2_clksel_set_rate,
859 };
860 
861 static struct clk dpll_per_m7x2_ck = {
862  .name = "dpll_per_m7x2_ck",
863  .parent = &dpll_per_x2_ck,
864  .clksel = dpll_per_m2x2_div,
865  .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_PER,
867  .ops = &clkops_omap4_dpllmx_ops,
868  .recalc = &omap2_clksel_recalc,
869  .round_rate = &omap2_clksel_round_rate,
870  .set_rate = &omap2_clksel_set_rate,
871 };
872 
873 static struct clk usb_hs_clk_div_ck = {
874  .name = "usb_hs_clk_div_ck",
875  .parent = &dpll_abe_m3x2_ck,
876  .ops = &clkops_null,
877  .fixed_div = 3,
878  .recalc = &omap_fixed_divisor_recalc,
879 };
880 
881 /* DPLL_USB */
882 static struct dpll_data dpll_usb_dd = {
883  .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_USB,
884  .clk_bypass = &usb_hs_clk_div_ck,
885  .flags = DPLL_J_TYPE,
886  .clk_ref = &sys_clkin_ck,
887  .control_reg = OMAP4430_CM_CLKMODE_DPLL_USB,
888  .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
889  .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB,
890  .idlest_reg = OMAP4430_CM_IDLEST_DPLL_USB,
891  .mult_mask = OMAP4430_DPLL_MULT_USB_MASK,
892  .div1_mask = OMAP4430_DPLL_DIV_0_7_MASK,
893  .enable_mask = OMAP4430_DPLL_EN_MASK,
894  .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
895  .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
896  .sddiv_mask = OMAP4430_DPLL_SD_DIV_MASK,
897  .max_multiplier = 4095,
898  .max_divider = 256,
899  .min_divider = 1,
900 };
901 
902 
903 static struct clk dpll_usb_ck = {
904  .name = "dpll_usb_ck",
905  .parent = &sys_clkin_ck,
906  .dpll_data = &dpll_usb_dd,
909  .recalc = &omap3_dpll_recalc,
910  .round_rate = &omap2_dpll_round_rate,
911  .set_rate = &omap3_noncore_dpll_set_rate,
912  .clkdm_name = "l3_init_clkdm",
913 };
914 
915 static struct clk dpll_usb_clkdcoldo_ck = {
916  .name = "dpll_usb_clkdcoldo_ck",
917  .parent = &dpll_usb_ck,
918  .clksel_reg = OMAP4430_CM_CLKDCOLDO_DPLL_USB,
919  .ops = &clkops_omap4_dpllmx_ops,
920  .recalc = &followparent_recalc,
921 };
922 
923 static const struct clksel dpll_usb_m2_div[] = {
924  { .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
925  { .parent = NULL },
926 };
927 
928 static struct clk dpll_usb_m2_ck = {
929  .name = "dpll_usb_m2_ck",
930  .parent = &dpll_usb_ck,
931  .clksel = dpll_usb_m2_div,
932  .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_USB,
933  .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK,
934  .ops = &clkops_omap4_dpllmx_ops,
935  .recalc = &omap2_clksel_recalc,
936  .round_rate = &omap2_clksel_round_rate,
937  .set_rate = &omap2_clksel_set_rate,
938 };
939 
940 static const struct clksel ducati_clk_mux_sel[] = {
941  { .parent = &div_core_ck, .rates = div_1_0_rates },
942  { .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
943  { .parent = NULL },
944 };
945 
946 static struct clk ducati_clk_mux_ck = {
947  .name = "ducati_clk_mux_ck",
948  .parent = &div_core_ck,
949  .clksel = ducati_clk_mux_sel,
952  .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
953  .ops = &clkops_null,
954  .recalc = &omap2_clksel_recalc,
955 };
956 
957 static struct clk func_12m_fclk = {
958  .name = "func_12m_fclk",
959  .parent = &dpll_per_m2x2_ck,
960  .ops = &clkops_null,
961  .fixed_div = 16,
962  .recalc = &omap_fixed_divisor_recalc,
963 };
964 
965 static struct clk func_24m_clk = {
966  .name = "func_24m_clk",
967  .parent = &dpll_per_m2_ck,
968  .ops = &clkops_null,
969  .fixed_div = 4,
970  .recalc = &omap_fixed_divisor_recalc,
971 };
972 
973 static struct clk func_24mc_fclk = {
974  .name = "func_24mc_fclk",
975  .parent = &dpll_per_m2x2_ck,
976  .ops = &clkops_null,
977  .fixed_div = 8,
978  .recalc = &omap_fixed_divisor_recalc,
979 };
980 
981 static const struct clksel_rate div2_4to8_rates[] = {
982  { .div = 4, .val = 0, .flags = RATE_IN_4430 },
983  { .div = 8, .val = 1, .flags = RATE_IN_4430 },
984  { .div = 0 },
985 };
986 
987 static const struct clksel func_48m_fclk_div[] = {
988  { .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
989  { .parent = NULL },
990 };
991 
992 static struct clk func_48m_fclk = {
993  .name = "func_48m_fclk",
994  .parent = &dpll_per_m2x2_ck,
995  .clksel = func_48m_fclk_div,
996  .clksel_reg = OMAP4430_CM_SCALE_FCLK,
997  .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
998  .ops = &clkops_null,
999  .recalc = &omap2_clksel_recalc,
1000  .round_rate = &omap2_clksel_round_rate,
1001  .set_rate = &omap2_clksel_set_rate,
1002 };
1003 
1004 static struct clk func_48mc_fclk = {
1005  .name = "func_48mc_fclk",
1006  .parent = &dpll_per_m2x2_ck,
1007  .ops = &clkops_null,
1008  .fixed_div = 4,
1009  .recalc = &omap_fixed_divisor_recalc,
1010 };
1011 
1012 static const struct clksel_rate div2_2to4_rates[] = {
1013  { .div = 2, .val = 0, .flags = RATE_IN_4430 },
1014  { .div = 4, .val = 1, .flags = RATE_IN_4430 },
1015  { .div = 0 },
1016 };
1017 
1018 static const struct clksel func_64m_fclk_div[] = {
1019  { .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
1020  { .parent = NULL },
1021 };
1022 
1023 static struct clk func_64m_fclk = {
1024  .name = "func_64m_fclk",
1025  .parent = &dpll_per_m4x2_ck,
1026  .clksel = func_64m_fclk_div,
1027  .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1028  .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1029  .ops = &clkops_null,
1030  .recalc = &omap2_clksel_recalc,
1031  .round_rate = &omap2_clksel_round_rate,
1032  .set_rate = &omap2_clksel_set_rate,
1033 };
1034 
1035 static const struct clksel func_96m_fclk_div[] = {
1036  { .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
1037  { .parent = NULL },
1038 };
1039 
1040 static struct clk func_96m_fclk = {
1041  .name = "func_96m_fclk",
1042  .parent = &dpll_per_m2x2_ck,
1043  .clksel = func_96m_fclk_div,
1044  .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1045  .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1046  .ops = &clkops_null,
1047  .recalc = &omap2_clksel_recalc,
1048  .round_rate = &omap2_clksel_round_rate,
1049  .set_rate = &omap2_clksel_set_rate,
1050 };
1051 
1052 static const struct clksel_rate div2_1to8_rates[] = {
1053  { .div = 1, .val = 0, .flags = RATE_IN_4430 },
1054  { .div = 8, .val = 1, .flags = RATE_IN_4430 },
1055  { .div = 0 },
1056 };
1057 
1058 static const struct clksel init_60m_fclk_div[] = {
1059  { .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
1060  { .parent = NULL },
1061 };
1062 
1063 static struct clk init_60m_fclk = {
1064  .name = "init_60m_fclk",
1065  .parent = &dpll_usb_m2_ck,
1066  .clksel = init_60m_fclk_div,
1067  .clksel_reg = OMAP4430_CM_CLKSEL_USB_60MHZ,
1068  .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1069  .ops = &clkops_null,
1070  .recalc = &omap2_clksel_recalc,
1071  .round_rate = &omap2_clksel_round_rate,
1072  .set_rate = &omap2_clksel_set_rate,
1073 };
1074 
1075 static const struct clksel l3_div_div[] = {
1076  { .parent = &div_core_ck, .rates = div2_1to2_rates },
1077  { .parent = NULL },
1078 };
1079 
1080 static struct clk l3_div_ck = {
1081  .name = "l3_div_ck",
1082  .parent = &div_core_ck,
1083  .clkdm_name = "cm_clkdm",
1084  .clksel = l3_div_div,
1085  .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
1086  .clksel_mask = OMAP4430_CLKSEL_L3_MASK,
1087  .ops = &clkops_null,
1088  .recalc = &omap2_clksel_recalc,
1089  .round_rate = &omap2_clksel_round_rate,
1090  .set_rate = &omap2_clksel_set_rate,
1091 };
1092 
1093 static const struct clksel l4_div_div[] = {
1094  { .parent = &l3_div_ck, .rates = div2_1to2_rates },
1095  { .parent = NULL },
1096 };
1097 
1098 static struct clk l4_div_ck = {
1099  .name = "l4_div_ck",
1100  .parent = &l3_div_ck,
1101  .clksel = l4_div_div,
1102  .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
1103  .clksel_mask = OMAP4430_CLKSEL_L4_MASK,
1104  .ops = &clkops_null,
1105  .recalc = &omap2_clksel_recalc,
1106  .round_rate = &omap2_clksel_round_rate,
1107  .set_rate = &omap2_clksel_set_rate,
1108 };
1109 
1110 static struct clk lp_clk_div_ck = {
1111  .name = "lp_clk_div_ck",
1112  .parent = &dpll_abe_m2x2_ck,
1113  .ops = &clkops_null,
1114  .fixed_div = 16,
1115  .recalc = &omap_fixed_divisor_recalc,
1116 };
1117 
1118 static const struct clksel l4_wkup_clk_mux_sel[] = {
1119  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
1120  { .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
1121  { .parent = NULL },
1122 };
1123 
1124 static struct clk l4_wkup_clk_mux_ck = {
1125  .name = "l4_wkup_clk_mux_ck",
1126  .parent = &sys_clkin_ck,
1127  .clksel = l4_wkup_clk_mux_sel,
1129  .clksel_reg = OMAP4430_CM_L4_WKUP_CLKSEL,
1130  .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1131  .ops = &clkops_null,
1132  .recalc = &omap2_clksel_recalc,
1133 };
1134 
1135 static const struct clksel_rate div2_2to1_rates[] = {
1136  { .div = 1, .val = 1, .flags = RATE_IN_4430 },
1137  { .div = 2, .val = 0, .flags = RATE_IN_4430 },
1138  { .div = 0 },
1139 };
1140 
1141 static const struct clksel ocp_abe_iclk_div[] = {
1142  { .parent = &aess_fclk, .rates = div2_2to1_rates },
1143  { .parent = NULL },
1144 };
1145 
1146 static struct clk mpu_periphclk = {
1147  .name = "mpu_periphclk",
1148  .parent = &dpll_mpu_ck,
1149  .ops = &clkops_null,
1150  .fixed_div = 2,
1151  .recalc = &omap_fixed_divisor_recalc,
1152 };
1153 
1154 static struct clk ocp_abe_iclk = {
1155  .name = "ocp_abe_iclk",
1156  .parent = &aess_fclk,
1157  .clksel = ocp_abe_iclk_div,
1158  .clksel_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
1159  .clksel_mask = OMAP4430_CLKSEL_AESS_FCLK_MASK,
1160  .ops = &clkops_null,
1161  .recalc = &omap2_clksel_recalc,
1162 };
1163 
1164 static struct clk per_abe_24m_fclk = {
1165  .name = "per_abe_24m_fclk",
1166  .parent = &dpll_abe_m2_ck,
1167  .ops = &clkops_null,
1168  .fixed_div = 4,
1169  .recalc = &omap_fixed_divisor_recalc,
1170 };
1171 
1172 static const struct clksel per_abe_nc_fclk_div[] = {
1173  { .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
1174  { .parent = NULL },
1175 };
1176 
1177 static struct clk per_abe_nc_fclk = {
1178  .name = "per_abe_nc_fclk",
1179  .parent = &dpll_abe_m2_ck,
1180  .clksel = per_abe_nc_fclk_div,
1181  .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1182  .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1183  .ops = &clkops_null,
1184  .recalc = &omap2_clksel_recalc,
1185  .round_rate = &omap2_clksel_round_rate,
1186  .set_rate = &omap2_clksel_set_rate,
1187 };
1188 
1189 static const struct clksel pmd_stm_clock_mux_sel[] = {
1190  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
1191  { .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
1192  { .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
1193  { .parent = NULL },
1194 };
1195 
1196 static struct clk pmd_stm_clock_mux_ck = {
1197  .name = "pmd_stm_clock_mux_ck",
1198  .parent = &sys_clkin_ck,
1199  .ops = &clkops_null,
1200  .recalc = &followparent_recalc,
1201 };
1202 
1203 static struct clk pmd_trace_clk_mux_ck = {
1204  .name = "pmd_trace_clk_mux_ck",
1205  .parent = &sys_clkin_ck,
1206  .ops = &clkops_null,
1207  .recalc = &followparent_recalc,
1208 };
1209 
1210 static const struct clksel syc_clk_div_div[] = {
1211  { .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
1212  { .parent = NULL },
1213 };
1214 
1215 static struct clk syc_clk_div_ck = {
1216  .name = "syc_clk_div_ck",
1217  .parent = &sys_clkin_ck,
1218  .clksel = syc_clk_div_div,
1219  .clksel_reg = OMAP4430_CM_ABE_DSS_SYS_CLKSEL,
1220  .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1221  .ops = &clkops_null,
1222  .recalc = &omap2_clksel_recalc,
1223  .round_rate = &omap2_clksel_round_rate,
1224  .set_rate = &omap2_clksel_set_rate,
1225 };
1226 
1227 /* Leaf clocks controlled by modules */
1228 
1229 static struct clk aes1_fck = {
1230  .name = "aes1_fck",
1231  .ops = &clkops_omap2_dflt,
1232  .enable_reg = OMAP4430_CM_L4SEC_AES1_CLKCTRL,
1233  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1234  .clkdm_name = "l4_secure_clkdm",
1235  .parent = &l3_div_ck,
1237 };
1238 
1239 static struct clk aes2_fck = {
1240  .name = "aes2_fck",
1241  .ops = &clkops_omap2_dflt,
1242  .enable_reg = OMAP4430_CM_L4SEC_AES2_CLKCTRL,
1243  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1244  .clkdm_name = "l4_secure_clkdm",
1245  .parent = &l3_div_ck,
1247 };
1248 
1249 static struct clk aess_fck = {
1250  .name = "aess_fck",
1251  .ops = &clkops_omap2_dflt,
1252  .enable_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
1253  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1254  .clkdm_name = "abe_clkdm",
1255  .parent = &aess_fclk,
1257 };
1258 
1259 static struct clk bandgap_fclk = {
1260  .name = "bandgap_fclk",
1261  .ops = &clkops_omap2_dflt,
1262  .enable_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
1263  .enable_bit = OMAP4430_OPTFCLKEN_BGAP_32K_SHIFT,
1264  .clkdm_name = "l4_wkup_clkdm",
1265  .parent = &sys_32k_ck,
1267 };
1268 
1269 static struct clk des3des_fck = {
1270  .name = "des3des_fck",
1271  .ops = &clkops_omap2_dflt,
1272  .enable_reg = OMAP4430_CM_L4SEC_DES3DES_CLKCTRL,
1273  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1274  .clkdm_name = "l4_secure_clkdm",
1275  .parent = &l4_div_ck,
1277 };
1278 
1279 static const struct clksel dmic_sync_mux_sel[] = {
1280  { .parent = &abe_24m_fclk, .rates = div_1_0_rates },
1281  { .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
1282  { .parent = &func_24m_clk, .rates = div_1_2_rates },
1283  { .parent = NULL },
1284 };
1285 
1286 static struct clk dmic_sync_mux_ck = {
1287  .name = "dmic_sync_mux_ck",
1288  .parent = &abe_24m_fclk,
1289  .clksel = dmic_sync_mux_sel,
1291  .clksel_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1292  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1293  .ops = &clkops_null,
1294  .recalc = &omap2_clksel_recalc,
1295 };
1296 
1297 static const struct clksel func_dmic_abe_gfclk_sel[] = {
1298  { .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
1299  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1300  { .parent = &slimbus_clk, .rates = div_1_2_rates },
1301  { .parent = NULL },
1302 };
1303 
1304 /* Merged func_dmic_abe_gfclk into dmic */
1305 static struct clk dmic_fck = {
1306  .name = "dmic_fck",
1307  .parent = &dmic_sync_mux_ck,
1308  .clksel = func_dmic_abe_gfclk_sel,
1310  .clksel_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1311  .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1312  .ops = &clkops_omap2_dflt,
1313  .recalc = &omap2_clksel_recalc,
1314  .enable_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1315  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1316  .clkdm_name = "abe_clkdm",
1317 };
1318 
1319 static struct clk dsp_fck = {
1320  .name = "dsp_fck",
1321  .ops = &clkops_omap2_dflt,
1322  .enable_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
1323  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1324  .clkdm_name = "tesla_clkdm",
1325  .parent = &dpll_iva_m4x2_ck,
1327 };
1328 
1329 static struct clk dss_sys_clk = {
1330  .name = "dss_sys_clk",
1331  .ops = &clkops_omap2_dflt,
1332  .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1333  .enable_bit = OMAP4430_OPTFCLKEN_SYS_CLK_SHIFT,
1334  .clkdm_name = "l3_dss_clkdm",
1335  .parent = &syc_clk_div_ck,
1337 };
1338 
1339 static struct clk dss_tv_clk = {
1340  .name = "dss_tv_clk",
1341  .ops = &clkops_omap2_dflt,
1342  .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1343  .enable_bit = OMAP4430_OPTFCLKEN_TV_CLK_SHIFT,
1344  .clkdm_name = "l3_dss_clkdm",
1345  .parent = &extalt_clkin_ck,
1347 };
1348 
1349 static struct clk dss_dss_clk = {
1350  .name = "dss_dss_clk",
1351  .ops = &clkops_omap2_dflt,
1352  .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1353  .enable_bit = OMAP4430_OPTFCLKEN_DSSCLK_SHIFT,
1354  .clkdm_name = "l3_dss_clkdm",
1355  .parent = &dpll_per_m5x2_ck,
1357 };
1358 
1359 static const struct clksel_rate div3_8to32_rates[] = {
1360  { .div = 8, .val = 0, .flags = RATE_IN_4460 },
1361  { .div = 16, .val = 1, .flags = RATE_IN_4460 },
1362  { .div = 32, .val = 2, .flags = RATE_IN_4460 },
1363  { .div = 0 },
1364 };
1365 
1366 static const struct clksel div_ts_div[] = {
1367  { .parent = &l4_wkup_clk_mux_ck, .rates = div3_8to32_rates },
1368  { .parent = NULL },
1369 };
1370 
1371 static struct clk div_ts_ck = {
1372  .name = "div_ts_ck",
1373  .parent = &l4_wkup_clk_mux_ck,
1374  .clksel = div_ts_div,
1375  .clksel_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
1376  .clksel_mask = OMAP4430_CLKSEL_24_25_MASK,
1377  .ops = &clkops_null,
1378  .recalc = &omap2_clksel_recalc,
1379  .round_rate = &omap2_clksel_round_rate,
1380  .set_rate = &omap2_clksel_set_rate,
1381 };
1382 
1383 static struct clk bandgap_ts_fclk = {
1384  .name = "bandgap_ts_fclk",
1385  .ops = &clkops_omap2_dflt,
1386  .enable_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
1387  .enable_bit = OMAP4460_OPTFCLKEN_TS_FCLK_SHIFT,
1388  .clkdm_name = "l4_wkup_clkdm",
1389  .parent = &div_ts_ck,
1391 };
1392 
1393 static struct clk dss_48mhz_clk = {
1394  .name = "dss_48mhz_clk",
1395  .ops = &clkops_omap2_dflt,
1396  .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1397  .enable_bit = OMAP4430_OPTFCLKEN_48MHZ_CLK_SHIFT,
1398  .clkdm_name = "l3_dss_clkdm",
1399  .parent = &func_48mc_fclk,
1401 };
1402 
1403 static struct clk dss_fck = {
1404  .name = "dss_fck",
1405  .ops = &clkops_omap2_dflt,
1406  .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1407  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1408  .clkdm_name = "l3_dss_clkdm",
1409  .parent = &l3_div_ck,
1411 };
1412 
1413 static struct clk efuse_ctrl_cust_fck = {
1414  .name = "efuse_ctrl_cust_fck",
1415  .ops = &clkops_omap2_dflt,
1416  .enable_reg = OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL,
1417  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1418  .clkdm_name = "l4_cefuse_clkdm",
1419  .parent = &sys_clkin_ck,
1421 };
1422 
1423 static struct clk emif1_fck = {
1424  .name = "emif1_fck",
1425  .ops = &clkops_omap2_dflt,
1426  .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL,
1427  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1428  .flags = ENABLE_ON_INIT,
1429  .clkdm_name = "l3_emif_clkdm",
1430  .parent = &ddrphy_ck,
1432 };
1433 
1434 static struct clk emif2_fck = {
1435  .name = "emif2_fck",
1436  .ops = &clkops_omap2_dflt,
1437  .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL,
1438  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1439  .flags = ENABLE_ON_INIT,
1440  .clkdm_name = "l3_emif_clkdm",
1441  .parent = &ddrphy_ck,
1443 };
1444 
1445 static const struct clksel fdif_fclk_div[] = {
1446  { .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
1447  { .parent = NULL },
1448 };
1449 
1450 /* Merged fdif_fclk into fdif */
1451 static struct clk fdif_fck = {
1452  .name = "fdif_fck",
1453  .parent = &dpll_per_m4x2_ck,
1454  .clksel = fdif_fclk_div,
1455  .clksel_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL,
1456  .clksel_mask = OMAP4430_CLKSEL_FCLK_MASK,
1457  .ops = &clkops_omap2_dflt,
1458  .recalc = &omap2_clksel_recalc,
1459  .round_rate = &omap2_clksel_round_rate,
1460  .set_rate = &omap2_clksel_set_rate,
1461  .enable_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL,
1462  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1463  .clkdm_name = "iss_clkdm",
1464 };
1465 
1466 static struct clk fpka_fck = {
1467  .name = "fpka_fck",
1468  .ops = &clkops_omap2_dflt,
1469  .enable_reg = OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL,
1470  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1471  .clkdm_name = "l4_secure_clkdm",
1472  .parent = &l4_div_ck,
1474 };
1475 
1476 static struct clk gpio1_dbclk = {
1477  .name = "gpio1_dbclk",
1478  .ops = &clkops_omap2_dflt,
1479  .enable_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1480  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1481  .clkdm_name = "l4_wkup_clkdm",
1482  .parent = &sys_32k_ck,
1484 };
1485 
1486 static struct clk gpio1_ick = {
1487  .name = "gpio1_ick",
1488  .ops = &clkops_omap2_dflt,
1489  .enable_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1490  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1491  .clkdm_name = "l4_wkup_clkdm",
1492  .parent = &l4_wkup_clk_mux_ck,
1494 };
1495 
1496 static struct clk gpio2_dbclk = {
1497  .name = "gpio2_dbclk",
1498  .ops = &clkops_omap2_dflt,
1499  .enable_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1500  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1501  .clkdm_name = "l4_per_clkdm",
1502  .parent = &sys_32k_ck,
1504 };
1505 
1506 static struct clk gpio2_ick = {
1507  .name = "gpio2_ick",
1508  .ops = &clkops_omap2_dflt,
1509  .enable_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1510  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1511  .clkdm_name = "l4_per_clkdm",
1512  .parent = &l4_div_ck,
1514 };
1515 
1516 static struct clk gpio3_dbclk = {
1517  .name = "gpio3_dbclk",
1518  .ops = &clkops_omap2_dflt,
1519  .enable_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1520  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1521  .clkdm_name = "l4_per_clkdm",
1522  .parent = &sys_32k_ck,
1524 };
1525 
1526 static struct clk gpio3_ick = {
1527  .name = "gpio3_ick",
1528  .ops = &clkops_omap2_dflt,
1529  .enable_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1530  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1531  .clkdm_name = "l4_per_clkdm",
1532  .parent = &l4_div_ck,
1534 };
1535 
1536 static struct clk gpio4_dbclk = {
1537  .name = "gpio4_dbclk",
1538  .ops = &clkops_omap2_dflt,
1539  .enable_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1540  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1541  .clkdm_name = "l4_per_clkdm",
1542  .parent = &sys_32k_ck,
1544 };
1545 
1546 static struct clk gpio4_ick = {
1547  .name = "gpio4_ick",
1548  .ops = &clkops_omap2_dflt,
1549  .enable_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1550  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1551  .clkdm_name = "l4_per_clkdm",
1552  .parent = &l4_div_ck,
1554 };
1555 
1556 static struct clk gpio5_dbclk = {
1557  .name = "gpio5_dbclk",
1558  .ops = &clkops_omap2_dflt,
1559  .enable_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1560  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1561  .clkdm_name = "l4_per_clkdm",
1562  .parent = &sys_32k_ck,
1564 };
1565 
1566 static struct clk gpio5_ick = {
1567  .name = "gpio5_ick",
1568  .ops = &clkops_omap2_dflt,
1569  .enable_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1570  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1571  .clkdm_name = "l4_per_clkdm",
1572  .parent = &l4_div_ck,
1574 };
1575 
1576 static struct clk gpio6_dbclk = {
1577  .name = "gpio6_dbclk",
1578  .ops = &clkops_omap2_dflt,
1579  .enable_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1580  .enable_bit = OMAP4430_OPTFCLKEN_DBCLK_SHIFT,
1581  .clkdm_name = "l4_per_clkdm",
1582  .parent = &sys_32k_ck,
1584 };
1585 
1586 static struct clk gpio6_ick = {
1587  .name = "gpio6_ick",
1588  .ops = &clkops_omap2_dflt,
1589  .enable_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1590  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1591  .clkdm_name = "l4_per_clkdm",
1592  .parent = &l4_div_ck,
1594 };
1595 
1596 static struct clk gpmc_ick = {
1597  .name = "gpmc_ick",
1598  .ops = &clkops_omap2_dflt,
1599  .enable_reg = OMAP4430_CM_L3_2_GPMC_CLKCTRL,
1600  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1601  .flags = ENABLE_ON_INIT,
1602  .clkdm_name = "l3_2_clkdm",
1603  .parent = &l3_div_ck,
1605 };
1606 
1607 static const struct clksel sgx_clk_mux_sel[] = {
1608  { .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
1609  { .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
1610  { .parent = NULL },
1611 };
1612 
1613 /* Merged sgx_clk_mux into gpu */
1614 static struct clk gpu_fck = {
1615  .name = "gpu_fck",
1616  .parent = &dpll_core_m7x2_ck,
1617  .clksel = sgx_clk_mux_sel,
1619  .clksel_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1620  .clksel_mask = OMAP4430_CLKSEL_SGX_FCLK_MASK,
1621  .ops = &clkops_omap2_dflt,
1622  .recalc = &omap2_clksel_recalc,
1623  .enable_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1624  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1625  .clkdm_name = "l3_gfx_clkdm",
1626 };
1627 
1628 static struct clk hdq1w_fck = {
1629  .name = "hdq1w_fck",
1630  .ops = &clkops_omap2_dflt,
1631  .enable_reg = OMAP4430_CM_L4PER_HDQ1W_CLKCTRL,
1632  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1633  .clkdm_name = "l4_per_clkdm",
1634  .parent = &func_12m_fclk,
1636 };
1637 
1638 static const struct clksel hsi_fclk_div[] = {
1639  { .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
1640  { .parent = NULL },
1641 };
1642 
1643 /* Merged hsi_fclk into hsi */
1644 static struct clk hsi_fck = {
1645  .name = "hsi_fck",
1646  .parent = &dpll_per_m2x2_ck,
1647  .clksel = hsi_fclk_div,
1648  .clksel_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
1649  .clksel_mask = OMAP4430_CLKSEL_24_25_MASK,
1650  .ops = &clkops_omap2_dflt,
1651  .recalc = &omap2_clksel_recalc,
1652  .round_rate = &omap2_clksel_round_rate,
1653  .set_rate = &omap2_clksel_set_rate,
1654  .enable_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
1655  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1656  .clkdm_name = "l3_init_clkdm",
1657 };
1658 
1659 static struct clk i2c1_fck = {
1660  .name = "i2c1_fck",
1661  .ops = &clkops_omap2_dflt,
1662  .enable_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
1663  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1664  .clkdm_name = "l4_per_clkdm",
1665  .parent = &func_96m_fclk,
1667 };
1668 
1669 static struct clk i2c2_fck = {
1670  .name = "i2c2_fck",
1671  .ops = &clkops_omap2_dflt,
1672  .enable_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
1673  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1674  .clkdm_name = "l4_per_clkdm",
1675  .parent = &func_96m_fclk,
1677 };
1678 
1679 static struct clk i2c3_fck = {
1680  .name = "i2c3_fck",
1681  .ops = &clkops_omap2_dflt,
1682  .enable_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
1683  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1684  .clkdm_name = "l4_per_clkdm",
1685  .parent = &func_96m_fclk,
1687 };
1688 
1689 static struct clk i2c4_fck = {
1690  .name = "i2c4_fck",
1691  .ops = &clkops_omap2_dflt,
1692  .enable_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
1693  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1694  .clkdm_name = "l4_per_clkdm",
1695  .parent = &func_96m_fclk,
1697 };
1698 
1699 static struct clk ipu_fck = {
1700  .name = "ipu_fck",
1701  .ops = &clkops_omap2_dflt,
1702  .enable_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
1703  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1704  .clkdm_name = "ducati_clkdm",
1705  .parent = &ducati_clk_mux_ck,
1707 };
1708 
1709 static struct clk iss_ctrlclk = {
1710  .name = "iss_ctrlclk",
1711  .ops = &clkops_omap2_dflt,
1712  .enable_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
1713  .enable_bit = OMAP4430_OPTFCLKEN_CTRLCLK_SHIFT,
1714  .clkdm_name = "iss_clkdm",
1715  .parent = &func_96m_fclk,
1717 };
1718 
1719 static struct clk iss_fck = {
1720  .name = "iss_fck",
1721  .ops = &clkops_omap2_dflt,
1722  .enable_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
1723  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1724  .clkdm_name = "iss_clkdm",
1725  .parent = &ducati_clk_mux_ck,
1727 };
1728 
1729 static struct clk iva_fck = {
1730  .name = "iva_fck",
1731  .ops = &clkops_omap2_dflt,
1732  .enable_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
1733  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1734  .clkdm_name = "ivahd_clkdm",
1735  .parent = &dpll_iva_m5x2_ck,
1737 };
1738 
1739 static struct clk kbd_fck = {
1740  .name = "kbd_fck",
1741  .ops = &clkops_omap2_dflt,
1742  .enable_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
1743  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1744  .clkdm_name = "l4_wkup_clkdm",
1745  .parent = &sys_32k_ck,
1747 };
1748 
1749 static struct clk l3_instr_ick = {
1750  .name = "l3_instr_ick",
1751  .ops = &clkops_omap2_dflt,
1753  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1754  .flags = ENABLE_ON_INIT,
1755  .clkdm_name = "l3_instr_clkdm",
1756  .parent = &l3_div_ck,
1758 };
1759 
1760 static struct clk l3_main_3_ick = {
1761  .name = "l3_main_3_ick",
1762  .ops = &clkops_omap2_dflt,
1763  .enable_reg = OMAP4430_CM_L3INSTR_L3_3_CLKCTRL,
1764  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1765  .flags = ENABLE_ON_INIT,
1766  .clkdm_name = "l3_instr_clkdm",
1767  .parent = &l3_div_ck,
1769 };
1770 
1771 static struct clk mcasp_sync_mux_ck = {
1772  .name = "mcasp_sync_mux_ck",
1773  .parent = &abe_24m_fclk,
1774  .clksel = dmic_sync_mux_sel,
1776  .clksel_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1777  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1778  .ops = &clkops_null,
1779  .recalc = &omap2_clksel_recalc,
1780 };
1781 
1782 static const struct clksel func_mcasp_abe_gfclk_sel[] = {
1783  { .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
1784  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1785  { .parent = &slimbus_clk, .rates = div_1_2_rates },
1786  { .parent = NULL },
1787 };
1788 
1789 /* Merged func_mcasp_abe_gfclk into mcasp */
1790 static struct clk mcasp_fck = {
1791  .name = "mcasp_fck",
1792  .parent = &mcasp_sync_mux_ck,
1793  .clksel = func_mcasp_abe_gfclk_sel,
1795  .clksel_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1796  .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1797  .ops = &clkops_omap2_dflt,
1798  .recalc = &omap2_clksel_recalc,
1799  .enable_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1800  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1801  .clkdm_name = "abe_clkdm",
1802 };
1803 
1804 static struct clk mcbsp1_sync_mux_ck = {
1805  .name = "mcbsp1_sync_mux_ck",
1806  .parent = &abe_24m_fclk,
1807  .clksel = dmic_sync_mux_sel,
1809  .clksel_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1810  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1811  .ops = &clkops_null,
1812  .recalc = &omap2_clksel_recalc,
1813 };
1814 
1815 static const struct clksel func_mcbsp1_gfclk_sel[] = {
1816  { .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
1817  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1818  { .parent = &slimbus_clk, .rates = div_1_2_rates },
1819  { .parent = NULL },
1820 };
1821 
1822 /* Merged func_mcbsp1_gfclk into mcbsp1 */
1823 static struct clk mcbsp1_fck = {
1824  .name = "mcbsp1_fck",
1825  .parent = &mcbsp1_sync_mux_ck,
1826  .clksel = func_mcbsp1_gfclk_sel,
1828  .clksel_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1829  .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1830  .ops = &clkops_omap2_dflt,
1831  .recalc = &omap2_clksel_recalc,
1832  .enable_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1833  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1834  .clkdm_name = "abe_clkdm",
1835 };
1836 
1837 static struct clk mcbsp2_sync_mux_ck = {
1838  .name = "mcbsp2_sync_mux_ck",
1839  .parent = &abe_24m_fclk,
1840  .clksel = dmic_sync_mux_sel,
1842  .clksel_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1843  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1844  .ops = &clkops_null,
1845  .recalc = &omap2_clksel_recalc,
1846 };
1847 
1848 static const struct clksel func_mcbsp2_gfclk_sel[] = {
1849  { .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
1850  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1851  { .parent = &slimbus_clk, .rates = div_1_2_rates },
1852  { .parent = NULL },
1853 };
1854 
1855 /* Merged func_mcbsp2_gfclk into mcbsp2 */
1856 static struct clk mcbsp2_fck = {
1857  .name = "mcbsp2_fck",
1858  .parent = &mcbsp2_sync_mux_ck,
1859  .clksel = func_mcbsp2_gfclk_sel,
1861  .clksel_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1862  .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1863  .ops = &clkops_omap2_dflt,
1864  .recalc = &omap2_clksel_recalc,
1865  .enable_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1866  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1867  .clkdm_name = "abe_clkdm",
1868 };
1869 
1870 static struct clk mcbsp3_sync_mux_ck = {
1871  .name = "mcbsp3_sync_mux_ck",
1872  .parent = &abe_24m_fclk,
1873  .clksel = dmic_sync_mux_sel,
1875  .clksel_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1876  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1877  .ops = &clkops_null,
1878  .recalc = &omap2_clksel_recalc,
1879 };
1880 
1881 static const struct clksel func_mcbsp3_gfclk_sel[] = {
1882  { .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
1883  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1884  { .parent = &slimbus_clk, .rates = div_1_2_rates },
1885  { .parent = NULL },
1886 };
1887 
1888 /* Merged func_mcbsp3_gfclk into mcbsp3 */
1889 static struct clk mcbsp3_fck = {
1890  .name = "mcbsp3_fck",
1891  .parent = &mcbsp3_sync_mux_ck,
1892  .clksel = func_mcbsp3_gfclk_sel,
1894  .clksel_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1895  .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1896  .ops = &clkops_omap2_dflt,
1897  .recalc = &omap2_clksel_recalc,
1898  .enable_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1899  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1900  .clkdm_name = "abe_clkdm",
1901 };
1902 
1903 static const struct clksel mcbsp4_sync_mux_sel[] = {
1904  { .parent = &func_96m_fclk, .rates = div_1_0_rates },
1905  { .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
1906  { .parent = NULL },
1907 };
1908 
1909 static struct clk mcbsp4_sync_mux_ck = {
1910  .name = "mcbsp4_sync_mux_ck",
1911  .parent = &func_96m_fclk,
1912  .clksel = mcbsp4_sync_mux_sel,
1914  .clksel_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1915  .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1916  .ops = &clkops_null,
1917  .recalc = &omap2_clksel_recalc,
1918 };
1919 
1920 static const struct clksel per_mcbsp4_gfclk_sel[] = {
1921  { .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
1922  { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1923  { .parent = NULL },
1924 };
1925 
1926 /* Merged per_mcbsp4_gfclk into mcbsp4 */
1927 static struct clk mcbsp4_fck = {
1928  .name = "mcbsp4_fck",
1929  .parent = &mcbsp4_sync_mux_ck,
1930  .clksel = per_mcbsp4_gfclk_sel,
1932  .clksel_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1933  .clksel_mask = OMAP4430_CLKSEL_SOURCE_24_24_MASK,
1934  .ops = &clkops_omap2_dflt,
1935  .recalc = &omap2_clksel_recalc,
1936  .enable_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1937  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1938  .clkdm_name = "l4_per_clkdm",
1939 };
1940 
1941 static struct clk mcpdm_fck = {
1942  .name = "mcpdm_fck",
1943  .ops = &clkops_omap2_dflt,
1944  .enable_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
1945  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1946  .clkdm_name = "abe_clkdm",
1947  .parent = &pad_clks_ck,
1949 };
1950 
1951 static struct clk mcspi1_fck = {
1952  .name = "mcspi1_fck",
1953  .ops = &clkops_omap2_dflt,
1954  .enable_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
1955  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1956  .clkdm_name = "l4_per_clkdm",
1957  .parent = &func_48m_fclk,
1959 };
1960 
1961 static struct clk mcspi2_fck = {
1962  .name = "mcspi2_fck",
1963  .ops = &clkops_omap2_dflt,
1964  .enable_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
1965  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1966  .clkdm_name = "l4_per_clkdm",
1967  .parent = &func_48m_fclk,
1969 };
1970 
1971 static struct clk mcspi3_fck = {
1972  .name = "mcspi3_fck",
1973  .ops = &clkops_omap2_dflt,
1974  .enable_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
1975  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1976  .clkdm_name = "l4_per_clkdm",
1977  .parent = &func_48m_fclk,
1979 };
1980 
1981 static struct clk mcspi4_fck = {
1982  .name = "mcspi4_fck",
1983  .ops = &clkops_omap2_dflt,
1984  .enable_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
1985  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1986  .clkdm_name = "l4_per_clkdm",
1987  .parent = &func_48m_fclk,
1989 };
1990 
1991 static const struct clksel hsmmc1_fclk_sel[] = {
1992  { .parent = &func_64m_fclk, .rates = div_1_0_rates },
1993  { .parent = &func_96m_fclk, .rates = div_1_1_rates },
1994  { .parent = NULL },
1995 };
1996 
1997 /* Merged hsmmc1_fclk into mmc1 */
1998 static struct clk mmc1_fck = {
1999  .name = "mmc1_fck",
2000  .parent = &func_64m_fclk,
2001  .clksel = hsmmc1_fclk_sel,
2003  .clksel_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
2004  .clksel_mask = OMAP4430_CLKSEL_MASK,
2005  .ops = &clkops_omap2_dflt,
2006  .recalc = &omap2_clksel_recalc,
2007  .enable_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
2008  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2009  .clkdm_name = "l3_init_clkdm",
2010 };
2011 
2012 /* Merged hsmmc2_fclk into mmc2 */
2013 static struct clk mmc2_fck = {
2014  .name = "mmc2_fck",
2015  .parent = &func_64m_fclk,
2016  .clksel = hsmmc1_fclk_sel,
2018  .clksel_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
2019  .clksel_mask = OMAP4430_CLKSEL_MASK,
2020  .ops = &clkops_omap2_dflt,
2021  .recalc = &omap2_clksel_recalc,
2022  .enable_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
2023  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2024  .clkdm_name = "l3_init_clkdm",
2025 };
2026 
2027 static struct clk mmc3_fck = {
2028  .name = "mmc3_fck",
2029  .ops = &clkops_omap2_dflt,
2030  .enable_reg = OMAP4430_CM_L4PER_MMCSD3_CLKCTRL,
2031  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2032  .clkdm_name = "l4_per_clkdm",
2033  .parent = &func_48m_fclk,
2035 };
2036 
2037 static struct clk mmc4_fck = {
2038  .name = "mmc4_fck",
2039  .ops = &clkops_omap2_dflt,
2040  .enable_reg = OMAP4430_CM_L4PER_MMCSD4_CLKCTRL,
2041  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2042  .clkdm_name = "l4_per_clkdm",
2043  .parent = &func_48m_fclk,
2045 };
2046 
2047 static struct clk mmc5_fck = {
2048  .name = "mmc5_fck",
2049  .ops = &clkops_omap2_dflt,
2050  .enable_reg = OMAP4430_CM_L4PER_MMCSD5_CLKCTRL,
2051  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2052  .clkdm_name = "l4_per_clkdm",
2053  .parent = &func_48m_fclk,
2055 };
2056 
2057 static struct clk ocp2scp_usb_phy_phy_48m = {
2058  .name = "ocp2scp_usb_phy_phy_48m",
2059  .ops = &clkops_omap2_dflt,
2061  .enable_bit = OMAP4430_OPTFCLKEN_PHY_48M_SHIFT,
2062  .clkdm_name = "l3_init_clkdm",
2063  .parent = &func_48m_fclk,
2065 };
2066 
2067 static struct clk ocp2scp_usb_phy_ick = {
2068  .name = "ocp2scp_usb_phy_ick",
2069  .ops = &clkops_omap2_dflt,
2071  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2072  .clkdm_name = "l3_init_clkdm",
2073  .parent = &l4_div_ck,
2075 };
2076 
2077 static struct clk ocp_wp_noc_ick = {
2078  .name = "ocp_wp_noc_ick",
2079  .ops = &clkops_omap2_dflt,
2081  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2082  .flags = ENABLE_ON_INIT,
2083  .clkdm_name = "l3_instr_clkdm",
2084  .parent = &l3_div_ck,
2086 };
2087 
2088 static struct clk rng_ick = {
2089  .name = "rng_ick",
2090  .ops = &clkops_omap2_dflt,
2091  .enable_reg = OMAP4430_CM_L4SEC_RNG_CLKCTRL,
2092  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2093  .clkdm_name = "l4_secure_clkdm",
2094  .parent = &l4_div_ck,
2096 };
2097 
2098 static struct clk sha2md5_fck = {
2099  .name = "sha2md5_fck",
2100  .ops = &clkops_omap2_dflt,
2101  .enable_reg = OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL,
2102  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2103  .clkdm_name = "l4_secure_clkdm",
2104  .parent = &l3_div_ck,
2106 };
2107 
2108 static struct clk sl2if_ick = {
2109  .name = "sl2if_ick",
2110  .ops = &clkops_omap2_dflt,
2111  .enable_reg = OMAP4430_CM_IVAHD_SL2_CLKCTRL,
2112  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2113  .clkdm_name = "ivahd_clkdm",
2114  .parent = &dpll_iva_m5x2_ck,
2116 };
2117 
2118 static struct clk slimbus1_fclk_1 = {
2119  .name = "slimbus1_fclk_1",
2120  .ops = &clkops_omap2_dflt,
2121  .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2122  .enable_bit = OMAP4430_OPTFCLKEN_FCLK1_SHIFT,
2123  .clkdm_name = "abe_clkdm",
2124  .parent = &func_24m_clk,
2126 };
2127 
2128 static struct clk slimbus1_fclk_0 = {
2129  .name = "slimbus1_fclk_0",
2130  .ops = &clkops_omap2_dflt,
2131  .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2132  .enable_bit = OMAP4430_OPTFCLKEN_FCLK0_SHIFT,
2133  .clkdm_name = "abe_clkdm",
2134  .parent = &abe_24m_fclk,
2136 };
2137 
2138 static struct clk slimbus1_fclk_2 = {
2139  .name = "slimbus1_fclk_2",
2140  .ops = &clkops_omap2_dflt,
2141  .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2142  .enable_bit = OMAP4430_OPTFCLKEN_FCLK2_SHIFT,
2143  .clkdm_name = "abe_clkdm",
2144  .parent = &pad_clks_ck,
2146 };
2147 
2148 static struct clk slimbus1_slimbus_clk = {
2149  .name = "slimbus1_slimbus_clk",
2150  .ops = &clkops_omap2_dflt,
2151  .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2153  .clkdm_name = "abe_clkdm",
2154  .parent = &slimbus_clk,
2156 };
2157 
2158 static struct clk slimbus1_fck = {
2159  .name = "slimbus1_fck",
2160  .ops = &clkops_omap2_dflt,
2161  .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2162  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2163  .clkdm_name = "abe_clkdm",
2164  .parent = &ocp_abe_iclk,
2166 };
2167 
2168 static struct clk slimbus2_fclk_1 = {
2169  .name = "slimbus2_fclk_1",
2170  .ops = &clkops_omap2_dflt,
2171  .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2173  .clkdm_name = "l4_per_clkdm",
2174  .parent = &per_abe_24m_fclk,
2176 };
2177 
2178 static struct clk slimbus2_fclk_0 = {
2179  .name = "slimbus2_fclk_0",
2180  .ops = &clkops_omap2_dflt,
2181  .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2183  .clkdm_name = "l4_per_clkdm",
2184  .parent = &func_24mc_fclk,
2186 };
2187 
2188 static struct clk slimbus2_slimbus_clk = {
2189  .name = "slimbus2_slimbus_clk",
2190  .ops = &clkops_omap2_dflt,
2191  .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2193  .clkdm_name = "l4_per_clkdm",
2194  .parent = &pad_slimbus_core_clks_ck,
2196 };
2197 
2198 static struct clk slimbus2_fck = {
2199  .name = "slimbus2_fck",
2200  .ops = &clkops_omap2_dflt,
2201  .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2202  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2203  .clkdm_name = "l4_per_clkdm",
2204  .parent = &l4_div_ck,
2206 };
2207 
2208 static struct clk smartreflex_core_fck = {
2209  .name = "smartreflex_core_fck",
2210  .ops = &clkops_omap2_dflt,
2211  .enable_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
2212  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2213  .clkdm_name = "l4_ao_clkdm",
2214  .parent = &l4_wkup_clk_mux_ck,
2216 };
2217 
2218 static struct clk smartreflex_iva_fck = {
2219  .name = "smartreflex_iva_fck",
2220  .ops = &clkops_omap2_dflt,
2221  .enable_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
2222  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2223  .clkdm_name = "l4_ao_clkdm",
2224  .parent = &l4_wkup_clk_mux_ck,
2226 };
2227 
2228 static struct clk smartreflex_mpu_fck = {
2229  .name = "smartreflex_mpu_fck",
2230  .ops = &clkops_omap2_dflt,
2231  .enable_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
2232  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2233  .clkdm_name = "l4_ao_clkdm",
2234  .parent = &l4_wkup_clk_mux_ck,
2236 };
2237 
2238 /* Merged dmt1_clk_mux into timer1 */
2239 static struct clk timer1_fck = {
2240  .name = "timer1_fck",
2241  .parent = &sys_clkin_ck,
2242  .clksel = abe_dpll_bypass_clk_mux_sel,
2243  .init = &omap2_init_clksel_parent,
2244  .clksel_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
2245  .clksel_mask = OMAP4430_CLKSEL_MASK,
2246  .ops = &clkops_omap2_dflt,
2247  .recalc = &omap2_clksel_recalc,
2248  .enable_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
2249  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2250  .clkdm_name = "l4_wkup_clkdm",
2251 };
2252 
2253 /* Merged cm2_dm10_mux into timer10 */
2254 static struct clk timer10_fck = {
2255  .name = "timer10_fck",
2256  .parent = &sys_clkin_ck,
2257  .clksel = abe_dpll_bypass_clk_mux_sel,
2258  .init = &omap2_init_clksel_parent,
2260  .clksel_mask = OMAP4430_CLKSEL_MASK,
2261  .ops = &clkops_omap2_dflt,
2262  .recalc = &omap2_clksel_recalc,
2264  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2265  .clkdm_name = "l4_per_clkdm",
2266 };
2267 
2268 /* Merged cm2_dm11_mux into timer11 */
2269 static struct clk timer11_fck = {
2270  .name = "timer11_fck",
2271  .parent = &sys_clkin_ck,
2272  .clksel = abe_dpll_bypass_clk_mux_sel,
2273  .init = &omap2_init_clksel_parent,
2275  .clksel_mask = OMAP4430_CLKSEL_MASK,
2276  .ops = &clkops_omap2_dflt,
2277  .recalc = &omap2_clksel_recalc,
2279  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2280  .clkdm_name = "l4_per_clkdm",
2281 };
2282 
2283 /* Merged cm2_dm2_mux into timer2 */
2284 static struct clk timer2_fck = {
2285  .name = "timer2_fck",
2286  .parent = &sys_clkin_ck,
2287  .clksel = abe_dpll_bypass_clk_mux_sel,
2288  .init = &omap2_init_clksel_parent,
2289  .clksel_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
2290  .clksel_mask = OMAP4430_CLKSEL_MASK,
2291  .ops = &clkops_omap2_dflt,
2292  .recalc = &omap2_clksel_recalc,
2293  .enable_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
2294  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2295  .clkdm_name = "l4_per_clkdm",
2296 };
2297 
2298 /* Merged cm2_dm3_mux into timer3 */
2299 static struct clk timer3_fck = {
2300  .name = "timer3_fck",
2301  .parent = &sys_clkin_ck,
2302  .clksel = abe_dpll_bypass_clk_mux_sel,
2303  .init = &omap2_init_clksel_parent,
2304  .clksel_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
2305  .clksel_mask = OMAP4430_CLKSEL_MASK,
2306  .ops = &clkops_omap2_dflt,
2307  .recalc = &omap2_clksel_recalc,
2308  .enable_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
2309  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2310  .clkdm_name = "l4_per_clkdm",
2311 };
2312 
2313 /* Merged cm2_dm4_mux into timer4 */
2314 static struct clk timer4_fck = {
2315  .name = "timer4_fck",
2316  .parent = &sys_clkin_ck,
2317  .clksel = abe_dpll_bypass_clk_mux_sel,
2318  .init = &omap2_init_clksel_parent,
2319  .clksel_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
2320  .clksel_mask = OMAP4430_CLKSEL_MASK,
2321  .ops = &clkops_omap2_dflt,
2322  .recalc = &omap2_clksel_recalc,
2323  .enable_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
2324  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2325  .clkdm_name = "l4_per_clkdm",
2326 };
2327 
2328 static const struct clksel timer5_sync_mux_sel[] = {
2329  { .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
2330  { .parent = &sys_32k_ck, .rates = div_1_1_rates },
2331  { .parent = NULL },
2332 };
2333 
2334 /* Merged timer5_sync_mux into timer5 */
2335 static struct clk timer5_fck = {
2336  .name = "timer5_fck",
2337  .parent = &syc_clk_div_ck,
2338  .clksel = timer5_sync_mux_sel,
2340  .clksel_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
2341  .clksel_mask = OMAP4430_CLKSEL_MASK,
2342  .ops = &clkops_omap2_dflt,
2343  .recalc = &omap2_clksel_recalc,
2344  .enable_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
2345  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2346  .clkdm_name = "abe_clkdm",
2347 };
2348 
2349 /* Merged timer6_sync_mux into timer6 */
2350 static struct clk timer6_fck = {
2351  .name = "timer6_fck",
2352  .parent = &syc_clk_div_ck,
2353  .clksel = timer5_sync_mux_sel,
2355  .clksel_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
2356  .clksel_mask = OMAP4430_CLKSEL_MASK,
2357  .ops = &clkops_omap2_dflt,
2358  .recalc = &omap2_clksel_recalc,
2359  .enable_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
2360  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2361  .clkdm_name = "abe_clkdm",
2362 };
2363 
2364 /* Merged timer7_sync_mux into timer7 */
2365 static struct clk timer7_fck = {
2366  .name = "timer7_fck",
2367  .parent = &syc_clk_div_ck,
2368  .clksel = timer5_sync_mux_sel,
2370  .clksel_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
2371  .clksel_mask = OMAP4430_CLKSEL_MASK,
2372  .ops = &clkops_omap2_dflt,
2373  .recalc = &omap2_clksel_recalc,
2374  .enable_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
2375  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2376  .clkdm_name = "abe_clkdm",
2377 };
2378 
2379 /* Merged timer8_sync_mux into timer8 */
2380 static struct clk timer8_fck = {
2381  .name = "timer8_fck",
2382  .parent = &syc_clk_div_ck,
2383  .clksel = timer5_sync_mux_sel,
2385  .clksel_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
2386  .clksel_mask = OMAP4430_CLKSEL_MASK,
2387  .ops = &clkops_omap2_dflt,
2388  .recalc = &omap2_clksel_recalc,
2389  .enable_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
2390  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2391  .clkdm_name = "abe_clkdm",
2392 };
2393 
2394 /* Merged cm2_dm9_mux into timer9 */
2395 static struct clk timer9_fck = {
2396  .name = "timer9_fck",
2397  .parent = &sys_clkin_ck,
2398  .clksel = abe_dpll_bypass_clk_mux_sel,
2399  .init = &omap2_init_clksel_parent,
2400  .clksel_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
2401  .clksel_mask = OMAP4430_CLKSEL_MASK,
2402  .ops = &clkops_omap2_dflt,
2403  .recalc = &omap2_clksel_recalc,
2404  .enable_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
2405  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2406  .clkdm_name = "l4_per_clkdm",
2407 };
2408 
2409 static struct clk uart1_fck = {
2410  .name = "uart1_fck",
2411  .ops = &clkops_omap2_dflt,
2412  .enable_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
2413  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2414  .clkdm_name = "l4_per_clkdm",
2415  .parent = &func_48m_fclk,
2417 };
2418 
2419 static struct clk uart2_fck = {
2420  .name = "uart2_fck",
2421  .ops = &clkops_omap2_dflt,
2422  .enable_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
2423  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2424  .clkdm_name = "l4_per_clkdm",
2425  .parent = &func_48m_fclk,
2427 };
2428 
2429 static struct clk uart3_fck = {
2430  .name = "uart3_fck",
2431  .ops = &clkops_omap2_dflt,
2432  .enable_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
2433  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2434  .clkdm_name = "l4_per_clkdm",
2435  .parent = &func_48m_fclk,
2437 };
2438 
2439 static struct clk uart4_fck = {
2440  .name = "uart4_fck",
2441  .ops = &clkops_omap2_dflt,
2442  .enable_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
2443  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2444  .clkdm_name = "l4_per_clkdm",
2445  .parent = &func_48m_fclk,
2447 };
2448 
2449 static struct clk usb_host_fs_fck = {
2450  .name = "usb_host_fs_fck",
2451  .ops = &clkops_omap2_dflt,
2453  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2454  .clkdm_name = "l3_init_clkdm",
2455  .parent = &func_48mc_fclk,
2457 };
2458 
2459 static const struct clksel utmi_p1_gfclk_sel[] = {
2460  { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2461  { .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
2462  { .parent = NULL },
2463 };
2464 
2465 static struct clk utmi_p1_gfclk = {
2466  .name = "utmi_p1_gfclk",
2467  .parent = &init_60m_fclk,
2468  .clksel = utmi_p1_gfclk_sel,
2471  .clksel_mask = OMAP4430_CLKSEL_UTMI_P1_MASK,
2472  .ops = &clkops_null,
2473  .recalc = &omap2_clksel_recalc,
2474 };
2475 
2476 static struct clk usb_host_hs_utmi_p1_clk = {
2477  .name = "usb_host_hs_utmi_p1_clk",
2478  .ops = &clkops_omap2_dflt,
2481  .clkdm_name = "l3_init_clkdm",
2482  .parent = &utmi_p1_gfclk,
2484 };
2485 
2486 static const struct clksel utmi_p2_gfclk_sel[] = {
2487  { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2488  { .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
2489  { .parent = NULL },
2490 };
2491 
2492 static struct clk utmi_p2_gfclk = {
2493  .name = "utmi_p2_gfclk",
2494  .parent = &init_60m_fclk,
2495  .clksel = utmi_p2_gfclk_sel,
2498  .clksel_mask = OMAP4430_CLKSEL_UTMI_P2_MASK,
2499  .ops = &clkops_null,
2500  .recalc = &omap2_clksel_recalc,
2501 };
2502 
2503 static struct clk usb_host_hs_utmi_p2_clk = {
2504  .name = "usb_host_hs_utmi_p2_clk",
2505  .ops = &clkops_omap2_dflt,
2508  .clkdm_name = "l3_init_clkdm",
2509  .parent = &utmi_p2_gfclk,
2511 };
2512 
2513 static struct clk usb_host_hs_utmi_p3_clk = {
2514  .name = "usb_host_hs_utmi_p3_clk",
2515  .ops = &clkops_omap2_dflt,
2518  .clkdm_name = "l3_init_clkdm",
2519  .parent = &init_60m_fclk,
2521 };
2522 
2523 static struct clk usb_host_hs_hsic480m_p1_clk = {
2524  .name = "usb_host_hs_hsic480m_p1_clk",
2525  .ops = &clkops_omap2_dflt,
2528  .clkdm_name = "l3_init_clkdm",
2529  .parent = &dpll_usb_m2_ck,
2531 };
2532 
2533 static struct clk usb_host_hs_hsic60m_p1_clk = {
2534  .name = "usb_host_hs_hsic60m_p1_clk",
2535  .ops = &clkops_omap2_dflt,
2538  .clkdm_name = "l3_init_clkdm",
2539  .parent = &init_60m_fclk,
2541 };
2542 
2543 static struct clk usb_host_hs_hsic60m_p2_clk = {
2544  .name = "usb_host_hs_hsic60m_p2_clk",
2545  .ops = &clkops_omap2_dflt,
2548  .clkdm_name = "l3_init_clkdm",
2549  .parent = &init_60m_fclk,
2551 };
2552 
2553 static struct clk usb_host_hs_hsic480m_p2_clk = {
2554  .name = "usb_host_hs_hsic480m_p2_clk",
2555  .ops = &clkops_omap2_dflt,
2558  .clkdm_name = "l3_init_clkdm",
2559  .parent = &dpll_usb_m2_ck,
2561 };
2562 
2563 static struct clk usb_host_hs_func48mclk = {
2564  .name = "usb_host_hs_func48mclk",
2565  .ops = &clkops_omap2_dflt,
2568  .clkdm_name = "l3_init_clkdm",
2569  .parent = &func_48mc_fclk,
2571 };
2572 
2573 static struct clk usb_host_hs_fck = {
2574  .name = "usb_host_hs_fck",
2575  .ops = &clkops_omap2_dflt,
2577  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2578  .clkdm_name = "l3_init_clkdm",
2579  .parent = &init_60m_fclk,
2581 };
2582 
2583 static const struct clksel otg_60m_gfclk_sel[] = {
2584  { .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
2585  { .parent = &xclk60motg_ck, .rates = div_1_1_rates },
2586  { .parent = NULL },
2587 };
2588 
2589 static struct clk otg_60m_gfclk = {
2590  .name = "otg_60m_gfclk",
2591  .parent = &utmi_phy_clkout_ck,
2592  .clksel = otg_60m_gfclk_sel,
2594  .clksel_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2595  .clksel_mask = OMAP4430_CLKSEL_60M_MASK,
2596  .ops = &clkops_null,
2597  .recalc = &omap2_clksel_recalc,
2598 };
2599 
2600 static struct clk usb_otg_hs_xclk = {
2601  .name = "usb_otg_hs_xclk",
2602  .ops = &clkops_omap2_dflt,
2603  .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2604  .enable_bit = OMAP4430_OPTFCLKEN_XCLK_SHIFT,
2605  .clkdm_name = "l3_init_clkdm",
2606  .parent = &otg_60m_gfclk,
2608 };
2609 
2610 static struct clk usb_otg_hs_ick = {
2611  .name = "usb_otg_hs_ick",
2612  .ops = &clkops_omap2_dflt,
2613  .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2614  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2615  .clkdm_name = "l3_init_clkdm",
2616  .parent = &l3_div_ck,
2618 };
2619 
2620 static struct clk usb_phy_cm_clk32k = {
2621  .name = "usb_phy_cm_clk32k",
2622  .ops = &clkops_omap2_dflt,
2623  .enable_reg = OMAP4430_CM_ALWON_USBPHY_CLKCTRL,
2624  .enable_bit = OMAP4430_OPTFCLKEN_CLK32K_SHIFT,
2625  .clkdm_name = "l4_ao_clkdm",
2626  .parent = &sys_32k_ck,
2628 };
2629 
2630 static struct clk usb_tll_hs_usb_ch2_clk = {
2631  .name = "usb_tll_hs_usb_ch2_clk",
2632  .ops = &clkops_omap2_dflt,
2633  .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2635  .clkdm_name = "l3_init_clkdm",
2636  .parent = &init_60m_fclk,
2638 };
2639 
2640 static struct clk usb_tll_hs_usb_ch0_clk = {
2641  .name = "usb_tll_hs_usb_ch0_clk",
2642  .ops = &clkops_omap2_dflt,
2643  .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2645  .clkdm_name = "l3_init_clkdm",
2646  .parent = &init_60m_fclk,
2648 };
2649 
2650 static struct clk usb_tll_hs_usb_ch1_clk = {
2651  .name = "usb_tll_hs_usb_ch1_clk",
2652  .ops = &clkops_omap2_dflt,
2653  .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2655  .clkdm_name = "l3_init_clkdm",
2656  .parent = &init_60m_fclk,
2658 };
2659 
2660 static struct clk usb_tll_hs_ick = {
2661  .name = "usb_tll_hs_ick",
2662  .ops = &clkops_omap2_dflt,
2663  .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2664  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2665  .clkdm_name = "l3_init_clkdm",
2666  .parent = &l4_div_ck,
2668 };
2669 
2670 static const struct clksel_rate div2_14to18_rates[] = {
2671  { .div = 14, .val = 0, .flags = RATE_IN_4430 },
2672  { .div = 18, .val = 1, .flags = RATE_IN_4430 },
2673  { .div = 0 },
2674 };
2675 
2676 static const struct clksel usim_fclk_div[] = {
2677  { .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
2678  { .parent = NULL },
2679 };
2680 
2681 static struct clk usim_ck = {
2682  .name = "usim_ck",
2683  .parent = &dpll_per_m4x2_ck,
2684  .clksel = usim_fclk_div,
2685  .clksel_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2686  .clksel_mask = OMAP4430_CLKSEL_DIV_MASK,
2687  .ops = &clkops_null,
2688  .recalc = &omap2_clksel_recalc,
2689  .round_rate = &omap2_clksel_round_rate,
2690  .set_rate = &omap2_clksel_set_rate,
2691 };
2692 
2693 static struct clk usim_fclk = {
2694  .name = "usim_fclk",
2695  .ops = &clkops_omap2_dflt,
2696  .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2697  .enable_bit = OMAP4430_OPTFCLKEN_FCLK_SHIFT,
2698  .clkdm_name = "l4_wkup_clkdm",
2699  .parent = &usim_ck,
2701 };
2702 
2703 static struct clk usim_fck = {
2704  .name = "usim_fck",
2705  .ops = &clkops_omap2_dflt,
2706  .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2707  .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2708  .clkdm_name = "l4_wkup_clkdm",
2709  .parent = &sys_32k_ck,
2711 };
2712 
2713 static struct clk wd_timer2_fck = {
2714  .name = "wd_timer2_fck",
2715  .ops = &clkops_omap2_dflt,
2716  .enable_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
2717  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2718  .clkdm_name = "l4_wkup_clkdm",
2719  .parent = &sys_32k_ck,
2721 };
2722 
2723 static struct clk wd_timer3_fck = {
2724  .name = "wd_timer3_fck",
2725  .ops = &clkops_omap2_dflt,
2726  .enable_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
2727  .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2728  .clkdm_name = "abe_clkdm",
2729  .parent = &sys_32k_ck,
2731 };
2732 
2733 /* Remaining optional clocks */
2734 static const struct clksel stm_clk_div_div[] = {
2735  { .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
2736  { .parent = NULL },
2737 };
2738 
2739 static struct clk stm_clk_div_ck = {
2740  .name = "stm_clk_div_ck",
2741  .parent = &pmd_stm_clock_mux_ck,
2742  .clksel = stm_clk_div_div,
2743  .clksel_reg = OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
2744  .clksel_mask = OMAP4430_CLKSEL_PMD_STM_CLK_MASK,
2745  .ops = &clkops_null,
2746  .recalc = &omap2_clksel_recalc,
2747  .round_rate = &omap2_clksel_round_rate,
2748  .set_rate = &omap2_clksel_set_rate,
2749 };
2750 
2751 static const struct clksel trace_clk_div_div[] = {
2752  { .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
2753  { .parent = NULL },
2754 };
2755 
2756 static struct clk trace_clk_div_ck = {
2757  .name = "trace_clk_div_ck",
2758  .parent = &pmd_trace_clk_mux_ck,
2759  .clkdm_name = "emu_sys_clkdm",
2760  .clksel = trace_clk_div_div,
2761  .clksel_reg = OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
2762  .clksel_mask = OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK,
2763  .ops = &clkops_null,
2764  .recalc = &omap2_clksel_recalc,
2765  .round_rate = &omap2_clksel_round_rate,
2766  .set_rate = &omap2_clksel_set_rate,
2767 };
2768 
2769 /* SCRM aux clk nodes */
2770 
2771 static const struct clksel auxclk_src_sel[] = {
2772  { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
2773  { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
2774  { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
2775  { .parent = NULL },
2776 };
2777 
2778 static const struct clksel_rate div16_1to16_rates[] = {
2779  { .div = 1, .val = 0, .flags = RATE_IN_4430 },
2780  { .div = 2, .val = 1, .flags = RATE_IN_4430 },
2781  { .div = 3, .val = 2, .flags = RATE_IN_4430 },
2782  { .div = 4, .val = 3, .flags = RATE_IN_4430 },
2783  { .div = 5, .val = 4, .flags = RATE_IN_4430 },
2784  { .div = 6, .val = 5, .flags = RATE_IN_4430 },
2785  { .div = 7, .val = 6, .flags = RATE_IN_4430 },
2786  { .div = 8, .val = 7, .flags = RATE_IN_4430 },
2787  { .div = 9, .val = 8, .flags = RATE_IN_4430 },
2788  { .div = 10, .val = 9, .flags = RATE_IN_4430 },
2789  { .div = 11, .val = 10, .flags = RATE_IN_4430 },
2790  { .div = 12, .val = 11, .flags = RATE_IN_4430 },
2791  { .div = 13, .val = 12, .flags = RATE_IN_4430 },
2792  { .div = 14, .val = 13, .flags = RATE_IN_4430 },
2793  { .div = 15, .val = 14, .flags = RATE_IN_4430 },
2794  { .div = 16, .val = 15, .flags = RATE_IN_4430 },
2795  { .div = 0 },
2796 };
2797 
2798 static struct clk auxclk0_src_ck = {
2799  .name = "auxclk0_src_ck",
2800  .parent = &sys_clkin_ck,
2802  .ops = &clkops_omap2_dflt,
2803  .clksel = auxclk_src_sel,
2804  .clksel_reg = OMAP4_SCRM_AUXCLK0,
2805  .clksel_mask = OMAP4_SRCSELECT_MASK,
2806  .recalc = &omap2_clksel_recalc,
2807  .enable_reg = OMAP4_SCRM_AUXCLK0,
2808  .enable_bit = OMAP4_ENABLE_SHIFT,
2809 };
2810 
2811 static const struct clksel auxclk0_sel[] = {
2812  { .parent = &auxclk0_src_ck, .rates = div16_1to16_rates },
2813  { .parent = NULL },
2814 };
2815 
2816 static struct clk auxclk0_ck = {
2817  .name = "auxclk0_ck",
2818  .parent = &auxclk0_src_ck,
2819  .clksel = auxclk0_sel,
2820  .clksel_reg = OMAP4_SCRM_AUXCLK0,
2821  .clksel_mask = OMAP4_CLKDIV_MASK,
2822  .ops = &clkops_null,
2823  .recalc = &omap2_clksel_recalc,
2824  .round_rate = &omap2_clksel_round_rate,
2825  .set_rate = &omap2_clksel_set_rate,
2826 };
2827 
2828 static struct clk auxclk1_src_ck = {
2829  .name = "auxclk1_src_ck",
2830  .parent = &sys_clkin_ck,
2832  .ops = &clkops_omap2_dflt,
2833  .clksel = auxclk_src_sel,
2834  .clksel_reg = OMAP4_SCRM_AUXCLK1,
2835  .clksel_mask = OMAP4_SRCSELECT_MASK,
2836  .recalc = &omap2_clksel_recalc,
2837  .enable_reg = OMAP4_SCRM_AUXCLK1,
2838  .enable_bit = OMAP4_ENABLE_SHIFT,
2839 };
2840 
2841 static const struct clksel auxclk1_sel[] = {
2842  { .parent = &auxclk1_src_ck, .rates = div16_1to16_rates },
2843  { .parent = NULL },
2844 };
2845 
2846 static struct clk auxclk1_ck = {
2847  .name = "auxclk1_ck",
2848  .parent = &auxclk1_src_ck,
2849  .clksel = auxclk1_sel,
2850  .clksel_reg = OMAP4_SCRM_AUXCLK1,
2851  .clksel_mask = OMAP4_CLKDIV_MASK,
2852  .ops = &clkops_null,
2853  .recalc = &omap2_clksel_recalc,
2854  .round_rate = &omap2_clksel_round_rate,
2855  .set_rate = &omap2_clksel_set_rate,
2856 };
2857 
2858 static struct clk auxclk2_src_ck = {
2859  .name = "auxclk2_src_ck",
2860  .parent = &sys_clkin_ck,
2862  .ops = &clkops_omap2_dflt,
2863  .clksel = auxclk_src_sel,
2864  .clksel_reg = OMAP4_SCRM_AUXCLK2,
2865  .clksel_mask = OMAP4_SRCSELECT_MASK,
2866  .recalc = &omap2_clksel_recalc,
2867  .enable_reg = OMAP4_SCRM_AUXCLK2,
2868  .enable_bit = OMAP4_ENABLE_SHIFT,
2869 };
2870 
2871 static const struct clksel auxclk2_sel[] = {
2872  { .parent = &auxclk2_src_ck, .rates = div16_1to16_rates },
2873  { .parent = NULL },
2874 };
2875 
2876 static struct clk auxclk2_ck = {
2877  .name = "auxclk2_ck",
2878  .parent = &auxclk2_src_ck,
2879  .clksel = auxclk2_sel,
2880  .clksel_reg = OMAP4_SCRM_AUXCLK2,
2881  .clksel_mask = OMAP4_CLKDIV_MASK,
2882  .ops = &clkops_null,
2883  .recalc = &omap2_clksel_recalc,
2884  .round_rate = &omap2_clksel_round_rate,
2885  .set_rate = &omap2_clksel_set_rate,
2886 };
2887 
2888 static struct clk auxclk3_src_ck = {
2889  .name = "auxclk3_src_ck",
2890  .parent = &sys_clkin_ck,
2892  .ops = &clkops_omap2_dflt,
2893  .clksel = auxclk_src_sel,
2894  .clksel_reg = OMAP4_SCRM_AUXCLK3,
2895  .clksel_mask = OMAP4_SRCSELECT_MASK,
2896  .recalc = &omap2_clksel_recalc,
2897  .enable_reg = OMAP4_SCRM_AUXCLK3,
2898  .enable_bit = OMAP4_ENABLE_SHIFT,
2899 };
2900 
2901 static const struct clksel auxclk3_sel[] = {
2902  { .parent = &auxclk3_src_ck, .rates = div16_1to16_rates },
2903  { .parent = NULL },
2904 };
2905 
2906 static struct clk auxclk3_ck = {
2907  .name = "auxclk3_ck",
2908  .parent = &auxclk3_src_ck,
2909  .clksel = auxclk3_sel,
2910  .clksel_reg = OMAP4_SCRM_AUXCLK3,
2911  .clksel_mask = OMAP4_CLKDIV_MASK,
2912  .ops = &clkops_null,
2913  .recalc = &omap2_clksel_recalc,
2914  .round_rate = &omap2_clksel_round_rate,
2915  .set_rate = &omap2_clksel_set_rate,
2916 };
2917 
2918 static struct clk auxclk4_src_ck = {
2919  .name = "auxclk4_src_ck",
2920  .parent = &sys_clkin_ck,
2922  .ops = &clkops_omap2_dflt,
2923  .clksel = auxclk_src_sel,
2924  .clksel_reg = OMAP4_SCRM_AUXCLK4,
2925  .clksel_mask = OMAP4_SRCSELECT_MASK,
2926  .recalc = &omap2_clksel_recalc,
2927  .enable_reg = OMAP4_SCRM_AUXCLK4,
2928  .enable_bit = OMAP4_ENABLE_SHIFT,
2929 };
2930 
2931 static const struct clksel auxclk4_sel[] = {
2932  { .parent = &auxclk4_src_ck, .rates = div16_1to16_rates },
2933  { .parent = NULL },
2934 };
2935 
2936 static struct clk auxclk4_ck = {
2937  .name = "auxclk4_ck",
2938  .parent = &auxclk4_src_ck,
2939  .clksel = auxclk4_sel,
2940  .clksel_reg = OMAP4_SCRM_AUXCLK4,
2941  .clksel_mask = OMAP4_CLKDIV_MASK,
2942  .ops = &clkops_null,
2943  .recalc = &omap2_clksel_recalc,
2944  .round_rate = &omap2_clksel_round_rate,
2945  .set_rate = &omap2_clksel_set_rate,
2946 };
2947 
2948 static struct clk auxclk5_src_ck = {
2949  .name = "auxclk5_src_ck",
2950  .parent = &sys_clkin_ck,
2952  .ops = &clkops_omap2_dflt,
2953  .clksel = auxclk_src_sel,
2954  .clksel_reg = OMAP4_SCRM_AUXCLK5,
2955  .clksel_mask = OMAP4_SRCSELECT_MASK,
2956  .recalc = &omap2_clksel_recalc,
2957  .enable_reg = OMAP4_SCRM_AUXCLK5,
2958  .enable_bit = OMAP4_ENABLE_SHIFT,
2959 };
2960 
2961 static const struct clksel auxclk5_sel[] = {
2962  { .parent = &auxclk5_src_ck, .rates = div16_1to16_rates },
2963  { .parent = NULL },
2964 };
2965 
2966 static struct clk auxclk5_ck = {
2967  .name = "auxclk5_ck",
2968  .parent = &auxclk5_src_ck,
2969  .clksel = auxclk5_sel,
2970  .clksel_reg = OMAP4_SCRM_AUXCLK5,
2971  .clksel_mask = OMAP4_CLKDIV_MASK,
2972  .ops = &clkops_null,
2973  .recalc = &omap2_clksel_recalc,
2974  .round_rate = &omap2_clksel_round_rate,
2975  .set_rate = &omap2_clksel_set_rate,
2976 };
2977 
2978 static const struct clksel auxclkreq_sel[] = {
2979  { .parent = &auxclk0_ck, .rates = div_1_0_rates },
2980  { .parent = &auxclk1_ck, .rates = div_1_1_rates },
2981  { .parent = &auxclk2_ck, .rates = div_1_2_rates },
2982  { .parent = &auxclk3_ck, .rates = div_1_3_rates },
2983  { .parent = &auxclk4_ck, .rates = div_1_4_rates },
2984  { .parent = &auxclk5_ck, .rates = div_1_5_rates },
2985  { .parent = NULL },
2986 };
2987 
2988 static struct clk auxclkreq0_ck = {
2989  .name = "auxclkreq0_ck",
2990  .parent = &auxclk0_ck,
2992  .ops = &clkops_null,
2993  .clksel = auxclkreq_sel,
2994  .clksel_reg = OMAP4_SCRM_AUXCLKREQ0,
2995  .clksel_mask = OMAP4_MAPPING_MASK,
2996  .recalc = &omap2_clksel_recalc,
2997 };
2998 
2999 static struct clk auxclkreq1_ck = {
3000  .name = "auxclkreq1_ck",
3001  .parent = &auxclk1_ck,
3003  .ops = &clkops_null,
3004  .clksel = auxclkreq_sel,
3005  .clksel_reg = OMAP4_SCRM_AUXCLKREQ1,
3006  .clksel_mask = OMAP4_MAPPING_MASK,
3007  .recalc = &omap2_clksel_recalc,
3008 };
3009 
3010 static struct clk auxclkreq2_ck = {
3011  .name = "auxclkreq2_ck",
3012  .parent = &auxclk2_ck,
3014  .ops = &clkops_null,
3015  .clksel = auxclkreq_sel,
3016  .clksel_reg = OMAP4_SCRM_AUXCLKREQ2,
3017  .clksel_mask = OMAP4_MAPPING_MASK,
3018  .recalc = &omap2_clksel_recalc,
3019 };
3020 
3021 static struct clk auxclkreq3_ck = {
3022  .name = "auxclkreq3_ck",
3023  .parent = &auxclk3_ck,
3025  .ops = &clkops_null,
3026  .clksel = auxclkreq_sel,
3027  .clksel_reg = OMAP4_SCRM_AUXCLKREQ3,
3028  .clksel_mask = OMAP4_MAPPING_MASK,
3029  .recalc = &omap2_clksel_recalc,
3030 };
3031 
3032 static struct clk auxclkreq4_ck = {
3033  .name = "auxclkreq4_ck",
3034  .parent = &auxclk4_ck,
3036  .ops = &clkops_null,
3037  .clksel = auxclkreq_sel,
3038  .clksel_reg = OMAP4_SCRM_AUXCLKREQ4,
3039  .clksel_mask = OMAP4_MAPPING_MASK,
3040  .recalc = &omap2_clksel_recalc,
3041 };
3042 
3043 static struct clk auxclkreq5_ck = {
3044  .name = "auxclkreq5_ck",
3045  .parent = &auxclk5_ck,
3047  .ops = &clkops_null,
3048  .clksel = auxclkreq_sel,
3049  .clksel_reg = OMAP4_SCRM_AUXCLKREQ5,
3050  .clksel_mask = OMAP4_MAPPING_MASK,
3051  .recalc = &omap2_clksel_recalc,
3052 };
3053 
3054 /*
3055  * clkdev
3056  */
3057 
3058 static struct omap_clk omap44xx_clks[] = {
3059  CLK(NULL, "extalt_clkin_ck", &extalt_clkin_ck, CK_443X),
3060  CLK(NULL, "pad_clks_ck", &pad_clks_ck, CK_443X),
3061  CLK(NULL, "pad_slimbus_core_clks_ck", &pad_slimbus_core_clks_ck, CK_443X),
3062  CLK(NULL, "secure_32k_clk_src_ck", &secure_32k_clk_src_ck, CK_443X),
3063  CLK(NULL, "slimbus_clk", &slimbus_clk, CK_443X),
3064  CLK(NULL, "sys_32k_ck", &sys_32k_ck, CK_443X),
3065  CLK(NULL, "virt_12000000_ck", &virt_12000000_ck, CK_443X),
3066  CLK(NULL, "virt_13000000_ck", &virt_13000000_ck, CK_443X),
3067  CLK(NULL, "virt_16800000_ck", &virt_16800000_ck, CK_443X),
3068  CLK(NULL, "virt_19200000_ck", &virt_19200000_ck, CK_443X),
3069  CLK(NULL, "virt_26000000_ck", &virt_26000000_ck, CK_443X),
3070  CLK(NULL, "virt_27000000_ck", &virt_27000000_ck, CK_443X),
3071  CLK(NULL, "virt_38400000_ck", &virt_38400000_ck, CK_443X),
3072  CLK(NULL, "sys_clkin_ck", &sys_clkin_ck, CK_443X),
3073  CLK(NULL, "tie_low_clock_ck", &tie_low_clock_ck, CK_443X),
3074  CLK(NULL, "utmi_phy_clkout_ck", &utmi_phy_clkout_ck, CK_443X),
3075  CLK(NULL, "xclk60mhsp1_ck", &xclk60mhsp1_ck, CK_443X),
3076  CLK(NULL, "xclk60mhsp2_ck", &xclk60mhsp2_ck, CK_443X),
3077  CLK(NULL, "xclk60motg_ck", &xclk60motg_ck, CK_443X),
3078  CLK(NULL, "abe_dpll_bypass_clk_mux_ck", &abe_dpll_bypass_clk_mux_ck, CK_443X),
3079  CLK(NULL, "abe_dpll_refclk_mux_ck", &abe_dpll_refclk_mux_ck, CK_443X),
3080  CLK(NULL, "dpll_abe_ck", &dpll_abe_ck, CK_443X),
3081  CLK(NULL, "dpll_abe_x2_ck", &dpll_abe_x2_ck, CK_443X),
3082  CLK(NULL, "dpll_abe_m2x2_ck", &dpll_abe_m2x2_ck, CK_443X),
3083  CLK(NULL, "abe_24m_fclk", &abe_24m_fclk, CK_443X),
3084  CLK(NULL, "abe_clk", &abe_clk, CK_443X),
3085  CLK(NULL, "aess_fclk", &aess_fclk, CK_443X),
3086  CLK(NULL, "dpll_abe_m3x2_ck", &dpll_abe_m3x2_ck, CK_443X),
3087  CLK(NULL, "core_hsd_byp_clk_mux_ck", &core_hsd_byp_clk_mux_ck, CK_443X),
3088  CLK(NULL, "dpll_core_ck", &dpll_core_ck, CK_443X),
3089  CLK(NULL, "dpll_core_x2_ck", &dpll_core_x2_ck, CK_443X),
3090  CLK(NULL, "dpll_core_m6x2_ck", &dpll_core_m6x2_ck, CK_443X),
3091  CLK(NULL, "dbgclk_mux_ck", &dbgclk_mux_ck, CK_443X),
3092  CLK(NULL, "dpll_core_m2_ck", &dpll_core_m2_ck, CK_443X),
3093  CLK(NULL, "ddrphy_ck", &ddrphy_ck, CK_443X),
3094  CLK(NULL, "dpll_core_m5x2_ck", &dpll_core_m5x2_ck, CK_443X),
3095  CLK(NULL, "div_core_ck", &div_core_ck, CK_443X),
3096  CLK(NULL, "div_iva_hs_clk", &div_iva_hs_clk, CK_443X),
3097  CLK(NULL, "div_mpu_hs_clk", &div_mpu_hs_clk, CK_443X),
3098  CLK(NULL, "dpll_core_m4x2_ck", &dpll_core_m4x2_ck, CK_443X),
3099  CLK(NULL, "dll_clk_div_ck", &dll_clk_div_ck, CK_443X),
3100  CLK(NULL, "dpll_abe_m2_ck", &dpll_abe_m2_ck, CK_443X),
3101  CLK(NULL, "dpll_core_m3x2_ck", &dpll_core_m3x2_ck, CK_443X),
3102  CLK(NULL, "dpll_core_m7x2_ck", &dpll_core_m7x2_ck, CK_443X),
3103  CLK(NULL, "iva_hsd_byp_clk_mux_ck", &iva_hsd_byp_clk_mux_ck, CK_443X),
3104  CLK(NULL, "dpll_iva_ck", &dpll_iva_ck, CK_443X),
3105  CLK(NULL, "dpll_iva_x2_ck", &dpll_iva_x2_ck, CK_443X),
3106  CLK(NULL, "dpll_iva_m4x2_ck", &dpll_iva_m4x2_ck, CK_443X),
3107  CLK(NULL, "dpll_iva_m5x2_ck", &dpll_iva_m5x2_ck, CK_443X),
3108  CLK(NULL, "dpll_mpu_ck", &dpll_mpu_ck, CK_443X),
3109  CLK(NULL, "dpll_mpu_m2_ck", &dpll_mpu_m2_ck, CK_443X),
3110  CLK(NULL, "per_hs_clk_div_ck", &per_hs_clk_div_ck, CK_443X),
3111  CLK(NULL, "per_hsd_byp_clk_mux_ck", &per_hsd_byp_clk_mux_ck, CK_443X),
3112  CLK(NULL, "dpll_per_ck", &dpll_per_ck, CK_443X),
3113  CLK(NULL, "dpll_per_m2_ck", &dpll_per_m2_ck, CK_443X),
3114  CLK(NULL, "dpll_per_x2_ck", &dpll_per_x2_ck, CK_443X),
3115  CLK(NULL, "dpll_per_m2x2_ck", &dpll_per_m2x2_ck, CK_443X),
3116  CLK(NULL, "dpll_per_m3x2_ck", &dpll_per_m3x2_ck, CK_443X),
3117  CLK(NULL, "dpll_per_m4x2_ck", &dpll_per_m4x2_ck, CK_443X),
3118  CLK(NULL, "dpll_per_m5x2_ck", &dpll_per_m5x2_ck, CK_443X),
3119  CLK(NULL, "dpll_per_m6x2_ck", &dpll_per_m6x2_ck, CK_443X),
3120  CLK(NULL, "dpll_per_m7x2_ck", &dpll_per_m7x2_ck, CK_443X),
3121  CLK(NULL, "usb_hs_clk_div_ck", &usb_hs_clk_div_ck, CK_443X),
3122  CLK(NULL, "dpll_usb_ck", &dpll_usb_ck, CK_443X),
3123  CLK(NULL, "dpll_usb_clkdcoldo_ck", &dpll_usb_clkdcoldo_ck, CK_443X),
3124  CLK(NULL, "dpll_usb_m2_ck", &dpll_usb_m2_ck, CK_443X),
3125  CLK(NULL, "ducati_clk_mux_ck", &ducati_clk_mux_ck, CK_443X),
3126  CLK(NULL, "func_12m_fclk", &func_12m_fclk, CK_443X),
3127  CLK(NULL, "func_24m_clk", &func_24m_clk, CK_443X),
3128  CLK(NULL, "func_24mc_fclk", &func_24mc_fclk, CK_443X),
3129  CLK(NULL, "func_48m_fclk", &func_48m_fclk, CK_443X),
3130  CLK(NULL, "func_48mc_fclk", &func_48mc_fclk, CK_443X),
3131  CLK(NULL, "func_64m_fclk", &func_64m_fclk, CK_443X),
3132  CLK(NULL, "func_96m_fclk", &func_96m_fclk, CK_443X),
3133  CLK(NULL, "init_60m_fclk", &init_60m_fclk, CK_443X),
3134  CLK(NULL, "l3_div_ck", &l3_div_ck, CK_443X),
3135  CLK(NULL, "l4_div_ck", &l4_div_ck, CK_443X),
3136  CLK(NULL, "lp_clk_div_ck", &lp_clk_div_ck, CK_443X),
3137  CLK(NULL, "l4_wkup_clk_mux_ck", &l4_wkup_clk_mux_ck, CK_443X),
3138  CLK("smp_twd", NULL, &mpu_periphclk, CK_443X),
3139  CLK(NULL, "ocp_abe_iclk", &ocp_abe_iclk, CK_443X),
3140  CLK(NULL, "per_abe_24m_fclk", &per_abe_24m_fclk, CK_443X),
3141  CLK(NULL, "per_abe_nc_fclk", &per_abe_nc_fclk, CK_443X),
3142  CLK(NULL, "pmd_stm_clock_mux_ck", &pmd_stm_clock_mux_ck, CK_443X),
3143  CLK(NULL, "pmd_trace_clk_mux_ck", &pmd_trace_clk_mux_ck, CK_443X),
3144  CLK(NULL, "syc_clk_div_ck", &syc_clk_div_ck, CK_443X),
3145  CLK(NULL, "aes1_fck", &aes1_fck, CK_443X),
3146  CLK(NULL, "aes2_fck", &aes2_fck, CK_443X),
3147  CLK(NULL, "aess_fck", &aess_fck, CK_443X),
3148  CLK(NULL, "bandgap_fclk", &bandgap_fclk, CK_443X),
3149  CLK(NULL, "bandgap_ts_fclk", &bandgap_ts_fclk, CK_446X),
3150  CLK(NULL, "des3des_fck", &des3des_fck, CK_443X),
3151  CLK(NULL, "div_ts_ck", &div_ts_ck, CK_446X),
3152  CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X),
3153  CLK(NULL, "dmic_fck", &dmic_fck, CK_443X),
3154  CLK(NULL, "dsp_fck", &dsp_fck, CK_443X),
3155  CLK(NULL, "dss_sys_clk", &dss_sys_clk, CK_443X),
3156  CLK(NULL, "dss_tv_clk", &dss_tv_clk, CK_443X),
3157  CLK(NULL, "dss_48mhz_clk", &dss_48mhz_clk, CK_443X),
3158  CLK(NULL, "dss_dss_clk", &dss_dss_clk, CK_443X),
3159  CLK(NULL, "dss_fck", &dss_fck, CK_443X),
3160  CLK("omapdss_dss", "ick", &dss_fck, CK_443X),
3161  CLK(NULL, "efuse_ctrl_cust_fck", &efuse_ctrl_cust_fck, CK_443X),
3162  CLK(NULL, "emif1_fck", &emif1_fck, CK_443X),
3163  CLK(NULL, "emif2_fck", &emif2_fck, CK_443X),
3164  CLK(NULL, "fdif_fck", &fdif_fck, CK_443X),
3165  CLK(NULL, "fpka_fck", &fpka_fck, CK_443X),
3166  CLK(NULL, "gpio1_dbclk", &gpio1_dbclk, CK_443X),
3167  CLK(NULL, "gpio1_ick", &gpio1_ick, CK_443X),
3168  CLK(NULL, "gpio2_dbclk", &gpio2_dbclk, CK_443X),
3169  CLK(NULL, "gpio2_ick", &gpio2_ick, CK_443X),
3170  CLK(NULL, "gpio3_dbclk", &gpio3_dbclk, CK_443X),
3171  CLK(NULL, "gpio3_ick", &gpio3_ick, CK_443X),
3172  CLK(NULL, "gpio4_dbclk", &gpio4_dbclk, CK_443X),
3173  CLK(NULL, "gpio4_ick", &gpio4_ick, CK_443X),
3174  CLK(NULL, "gpio5_dbclk", &gpio5_dbclk, CK_443X),
3175  CLK(NULL, "gpio5_ick", &gpio5_ick, CK_443X),
3176  CLK(NULL, "gpio6_dbclk", &gpio6_dbclk, CK_443X),
3177  CLK(NULL, "gpio6_ick", &gpio6_ick, CK_443X),
3178  CLK(NULL, "gpmc_ick", &gpmc_ick, CK_443X),
3179  CLK(NULL, "gpu_fck", &gpu_fck, CK_443X),
3180  CLK(NULL, "hdq1w_fck", &hdq1w_fck, CK_443X),
3181  CLK(NULL, "hsi_fck", &hsi_fck, CK_443X),
3182  CLK(NULL, "i2c1_fck", &i2c1_fck, CK_443X),
3183  CLK(NULL, "i2c2_fck", &i2c2_fck, CK_443X),
3184  CLK(NULL, "i2c3_fck", &i2c3_fck, CK_443X),
3185  CLK(NULL, "i2c4_fck", &i2c4_fck, CK_443X),
3186  CLK(NULL, "ipu_fck", &ipu_fck, CK_443X),
3187  CLK(NULL, "iss_ctrlclk", &iss_ctrlclk, CK_443X),
3188  CLK(NULL, "iss_fck", &iss_fck, CK_443X),
3189  CLK(NULL, "iva_fck", &iva_fck, CK_443X),
3190  CLK(NULL, "kbd_fck", &kbd_fck, CK_443X),
3191  CLK(NULL, "l3_instr_ick", &l3_instr_ick, CK_443X),
3192  CLK(NULL, "l3_main_3_ick", &l3_main_3_ick, CK_443X),
3193  CLK(NULL, "mcasp_sync_mux_ck", &mcasp_sync_mux_ck, CK_443X),
3194  CLK(NULL, "mcasp_fck", &mcasp_fck, CK_443X),
3195  CLK(NULL, "mcbsp1_sync_mux_ck", &mcbsp1_sync_mux_ck, CK_443X),
3196  CLK(NULL, "mcbsp1_fck", &mcbsp1_fck, CK_443X),
3197  CLK(NULL, "mcbsp2_sync_mux_ck", &mcbsp2_sync_mux_ck, CK_443X),
3198  CLK(NULL, "mcbsp2_fck", &mcbsp2_fck, CK_443X),
3199  CLK(NULL, "mcbsp3_sync_mux_ck", &mcbsp3_sync_mux_ck, CK_443X),
3200  CLK(NULL, "mcbsp3_fck", &mcbsp3_fck, CK_443X),
3201  CLK(NULL, "mcbsp4_sync_mux_ck", &mcbsp4_sync_mux_ck, CK_443X),
3202  CLK(NULL, "mcbsp4_fck", &mcbsp4_fck, CK_443X),
3203  CLK(NULL, "mcpdm_fck", &mcpdm_fck, CK_443X),
3204  CLK(NULL, "mcspi1_fck", &mcspi1_fck, CK_443X),
3205  CLK(NULL, "mcspi2_fck", &mcspi2_fck, CK_443X),
3206  CLK(NULL, "mcspi3_fck", &mcspi3_fck, CK_443X),
3207  CLK(NULL, "mcspi4_fck", &mcspi4_fck, CK_443X),
3208  CLK(NULL, "mmc1_fck", &mmc1_fck, CK_443X),
3209  CLK(NULL, "mmc2_fck", &mmc2_fck, CK_443X),
3210  CLK(NULL, "mmc3_fck", &mmc3_fck, CK_443X),
3211  CLK(NULL, "mmc4_fck", &mmc4_fck, CK_443X),
3212  CLK(NULL, "mmc5_fck", &mmc5_fck, CK_443X),
3213  CLK(NULL, "ocp2scp_usb_phy_phy_48m", &ocp2scp_usb_phy_phy_48m, CK_443X),
3214  CLK(NULL, "ocp2scp_usb_phy_ick", &ocp2scp_usb_phy_ick, CK_443X),
3215  CLK(NULL, "ocp_wp_noc_ick", &ocp_wp_noc_ick, CK_443X),
3216  CLK(NULL, "rng_ick", &rng_ick, CK_443X),
3217  CLK("omap_rng", "ick", &rng_ick, CK_443X),
3218  CLK(NULL, "sha2md5_fck", &sha2md5_fck, CK_443X),
3219  CLK(NULL, "sl2if_ick", &sl2if_ick, CK_443X),
3220  CLK(NULL, "slimbus1_fclk_1", &slimbus1_fclk_1, CK_443X),
3221  CLK(NULL, "slimbus1_fclk_0", &slimbus1_fclk_0, CK_443X),
3222  CLK(NULL, "slimbus1_fclk_2", &slimbus1_fclk_2, CK_443X),
3223  CLK(NULL, "slimbus1_slimbus_clk", &slimbus1_slimbus_clk, CK_443X),
3224  CLK(NULL, "slimbus1_fck", &slimbus1_fck, CK_443X),
3225  CLK(NULL, "slimbus2_fclk_1", &slimbus2_fclk_1, CK_443X),
3226  CLK(NULL, "slimbus2_fclk_0", &slimbus2_fclk_0, CK_443X),
3227  CLK(NULL, "slimbus2_slimbus_clk", &slimbus2_slimbus_clk, CK_443X),
3228  CLK(NULL, "slimbus2_fck", &slimbus2_fck, CK_443X),
3229  CLK(NULL, "smartreflex_core_fck", &smartreflex_core_fck, CK_443X),
3230  CLK(NULL, "smartreflex_iva_fck", &smartreflex_iva_fck, CK_443X),
3231  CLK(NULL, "smartreflex_mpu_fck", &smartreflex_mpu_fck, CK_443X),
3232  CLK(NULL, "timer1_fck", &timer1_fck, CK_443X),
3233  CLK(NULL, "timer10_fck", &timer10_fck, CK_443X),
3234  CLK(NULL, "timer11_fck", &timer11_fck, CK_443X),
3235  CLK(NULL, "timer2_fck", &timer2_fck, CK_443X),
3236  CLK(NULL, "timer3_fck", &timer3_fck, CK_443X),
3237  CLK(NULL, "timer4_fck", &timer4_fck, CK_443X),
3238  CLK(NULL, "timer5_fck", &timer5_fck, CK_443X),
3239  CLK(NULL, "timer6_fck", &timer6_fck, CK_443X),
3240  CLK(NULL, "timer7_fck", &timer7_fck, CK_443X),
3241  CLK(NULL, "timer8_fck", &timer8_fck, CK_443X),
3242  CLK(NULL, "timer9_fck", &timer9_fck, CK_443X),
3243  CLK(NULL, "uart1_fck", &uart1_fck, CK_443X),
3244  CLK(NULL, "uart2_fck", &uart2_fck, CK_443X),
3245  CLK(NULL, "uart3_fck", &uart3_fck, CK_443X),
3246  CLK(NULL, "uart4_fck", &uart4_fck, CK_443X),
3247  CLK("usbhs_omap", "fs_fck", &usb_host_fs_fck, CK_443X),
3248  CLK(NULL, "usb_host_fs_fck", &usb_host_fs_fck, CK_443X),
3249  CLK(NULL, "utmi_p1_gfclk", &utmi_p1_gfclk, CK_443X),
3250  CLK(NULL, "usb_host_hs_utmi_p1_clk", &usb_host_hs_utmi_p1_clk, CK_443X),
3251  CLK(NULL, "utmi_p2_gfclk", &utmi_p2_gfclk, CK_443X),
3252  CLK(NULL, "usb_host_hs_utmi_p2_clk", &usb_host_hs_utmi_p2_clk, CK_443X),
3253  CLK(NULL, "usb_host_hs_utmi_p3_clk", &usb_host_hs_utmi_p3_clk, CK_443X),
3254  CLK(NULL, "usb_host_hs_hsic480m_p1_clk", &usb_host_hs_hsic480m_p1_clk, CK_443X),
3255  CLK(NULL, "usb_host_hs_hsic60m_p1_clk", &usb_host_hs_hsic60m_p1_clk, CK_443X),
3256  CLK(NULL, "usb_host_hs_hsic60m_p2_clk", &usb_host_hs_hsic60m_p2_clk, CK_443X),
3257  CLK(NULL, "usb_host_hs_hsic480m_p2_clk", &usb_host_hs_hsic480m_p2_clk, CK_443X),
3258  CLK(NULL, "usb_host_hs_func48mclk", &usb_host_hs_func48mclk, CK_443X),
3259  CLK(NULL, "usb_host_hs_fck", &usb_host_hs_fck, CK_443X),
3260  CLK("usbhs_omap", "hs_fck", &usb_host_hs_fck, CK_443X),
3261  CLK(NULL, "otg_60m_gfclk", &otg_60m_gfclk, CK_443X),
3262  CLK(NULL, "usb_otg_hs_xclk", &usb_otg_hs_xclk, CK_443X),
3263  CLK(NULL, "usb_otg_hs_ick", &usb_otg_hs_ick, CK_443X),
3264  CLK("musb-omap2430", "ick", &usb_otg_hs_ick, CK_443X),
3265  CLK(NULL, "usb_phy_cm_clk32k", &usb_phy_cm_clk32k, CK_443X),
3266  CLK(NULL, "usb_tll_hs_usb_ch2_clk", &usb_tll_hs_usb_ch2_clk, CK_443X),
3267  CLK(NULL, "usb_tll_hs_usb_ch0_clk", &usb_tll_hs_usb_ch0_clk, CK_443X),
3268  CLK(NULL, "usb_tll_hs_usb_ch1_clk", &usb_tll_hs_usb_ch1_clk, CK_443X),
3269  CLK(NULL, "usb_tll_hs_ick", &usb_tll_hs_ick, CK_443X),
3270  CLK("usbhs_omap", "usbtll_ick", &usb_tll_hs_ick, CK_443X),
3271  CLK("usbhs_tll", "usbtll_ick", &usb_tll_hs_ick, CK_443X),
3272  CLK(NULL, "usim_ck", &usim_ck, CK_443X),
3273  CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
3274  CLK(NULL, "usim_fck", &usim_fck, CK_443X),
3275  CLK(NULL, "wd_timer2_fck", &wd_timer2_fck, CK_443X),
3276  CLK(NULL, "wd_timer3_fck", &wd_timer3_fck, CK_443X),
3277  CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X),
3278  CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X),
3279  CLK(NULL, "auxclk0_src_ck", &auxclk0_src_ck, CK_443X),
3280  CLK(NULL, "auxclk0_ck", &auxclk0_ck, CK_443X),
3281  CLK(NULL, "auxclkreq0_ck", &auxclkreq0_ck, CK_443X),
3282  CLK(NULL, "auxclk1_src_ck", &auxclk1_src_ck, CK_443X),
3283  CLK(NULL, "auxclk1_ck", &auxclk1_ck, CK_443X),
3284  CLK(NULL, "auxclkreq1_ck", &auxclkreq1_ck, CK_443X),
3285  CLK(NULL, "auxclk2_src_ck", &auxclk2_src_ck, CK_443X),
3286  CLK(NULL, "auxclk2_ck", &auxclk2_ck, CK_443X),
3287  CLK(NULL, "auxclkreq2_ck", &auxclkreq2_ck, CK_443X),
3288  CLK(NULL, "auxclk3_src_ck", &auxclk3_src_ck, CK_443X),
3289  CLK(NULL, "auxclk3_ck", &auxclk3_ck, CK_443X),
3290  CLK(NULL, "auxclkreq3_ck", &auxclkreq3_ck, CK_443X),
3291  CLK(NULL, "auxclk4_src_ck", &auxclk4_src_ck, CK_443X),
3292  CLK(NULL, "auxclk4_ck", &auxclk4_ck, CK_443X),
3293  CLK(NULL, "auxclkreq4_ck", &auxclkreq4_ck, CK_443X),
3294  CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck, CK_443X),
3295  CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X),
3296  CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X),
3297  CLK("omap-gpmc", "fck", &dummy_ck, CK_443X),
3298  CLK("omap_i2c.1", "ick", &dummy_ck, CK_443X),
3299  CLK("omap_i2c.2", "ick", &dummy_ck, CK_443X),
3300  CLK("omap_i2c.3", "ick", &dummy_ck, CK_443X),
3301  CLK("omap_i2c.4", "ick", &dummy_ck, CK_443X),
3302  CLK(NULL, "mailboxes_ick", &dummy_ck, CK_443X),
3303  CLK("omap_hsmmc.0", "ick", &dummy_ck, CK_443X),
3304  CLK("omap_hsmmc.1", "ick", &dummy_ck, CK_443X),
3305  CLK("omap_hsmmc.2", "ick", &dummy_ck, CK_443X),
3306  CLK("omap_hsmmc.3", "ick", &dummy_ck, CK_443X),
3307  CLK("omap_hsmmc.4", "ick", &dummy_ck, CK_443X),
3308  CLK("omap-mcbsp.1", "ick", &dummy_ck, CK_443X),
3309  CLK("omap-mcbsp.2", "ick", &dummy_ck, CK_443X),
3310  CLK("omap-mcbsp.3", "ick", &dummy_ck, CK_443X),
3311  CLK("omap-mcbsp.4", "ick", &dummy_ck, CK_443X),
3312  CLK("omap2_mcspi.1", "ick", &dummy_ck, CK_443X),
3313  CLK("omap2_mcspi.2", "ick", &dummy_ck, CK_443X),
3314  CLK("omap2_mcspi.3", "ick", &dummy_ck, CK_443X),
3315  CLK("omap2_mcspi.4", "ick", &dummy_ck, CK_443X),
3316  CLK(NULL, "uart1_ick", &dummy_ck, CK_443X),
3317  CLK(NULL, "uart2_ick", &dummy_ck, CK_443X),
3318  CLK(NULL, "uart3_ick", &dummy_ck, CK_443X),
3319  CLK(NULL, "uart4_ick", &dummy_ck, CK_443X),
3320  CLK("usbhs_omap", "usbhost_ick", &dummy_ck, CK_443X),
3321  CLK("usbhs_omap", "usbtll_fck", &dummy_ck, CK_443X),
3322  CLK("usbhs_tll", "usbtll_fck", &dummy_ck, CK_443X),
3323  CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
3324  CLK(NULL, "timer_32k_ck", &sys_32k_ck, CK_443X),
3325  /* TODO: Remove "omap_timer.X" aliases once DT migration is complete */
3326  CLK("omap_timer.1", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3327  CLK("omap_timer.2", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3328  CLK("omap_timer.3", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3329  CLK("omap_timer.4", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3330  CLK("omap_timer.9", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3331  CLK("omap_timer.10", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3332  CLK("omap_timer.11", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3333  CLK("omap_timer.5", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3334  CLK("omap_timer.6", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3335  CLK("omap_timer.7", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3336  CLK("omap_timer.8", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3337  CLK("4a318000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3338  CLK("48032000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3339  CLK("48034000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3340  CLK("48036000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3341  CLK("4803e000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3342  CLK("48086000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3343  CLK("48088000.timer", "timer_sys_ck", &sys_clkin_ck, CK_443X),
3344  CLK("49038000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3345  CLK("4903a000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3346  CLK("4903c000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3347  CLK("4903e000.timer", "timer_sys_ck", &syc_clk_div_ck, CK_443X),
3348  CLK(NULL, "cpufreq_ck", &dpll_mpu_ck, CK_443X),
3349 };
3350 
3352 {
3353  struct omap_clk *c;
3354  u32 cpu_clkflg;
3355 
3356  if (cpu_is_omap443x()) {
3357  cpu_mask = RATE_IN_4430;
3358  cpu_clkflg = CK_443X;
3359  } else if (cpu_is_omap446x() || cpu_is_omap447x()) {
3360  cpu_mask = RATE_IN_4460 | RATE_IN_4430;
3361  cpu_clkflg = CK_446X | CK_443X;
3362 
3363  if (cpu_is_omap447x())
3364  pr_warn("WARNING: OMAP4470 clock data incomplete!\n");
3365  } else {
3366  return 0;
3367  }
3368 
3370 
3371  /*
3372  * Must stay commented until all OMAP SoC drivers are
3373  * converted to runtime PM, or drivers may start crashing
3374  *
3375  * omap2_clk_disable_clkdm_control();
3376  */
3377 
3378  for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks);
3379  c++)
3380  clk_preinit(c->lk.clk);
3381 
3382  for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks);
3383  c++)
3384  if (c->cpu & cpu_clkflg) {
3385  clkdev_add(&c->lk);
3386  clk_register(c->lk.clk);
3387  omap2_init_clk_clkdm(c->lk.clk);
3388  }
3389 
3390  /* Disable autoidle on all clocks; let the PM code enable it later */
3392 
3394 
3395  /*
3396  * Only enable those clocks we will need, let the drivers
3397  * enable other clocks as necessary
3398  */
3400 
3401  return 0;
3402 }