blob: f39552bd74b82a845ba4bb2a5dc07e20e778fe0f [file] [log] [blame]
Rajendra Nayak972c5422009-12-08 18:46:28 -07001/*
2 * OMAP4 Clock data
3 *
Rajendra Nayak54776052010-02-22 22:09:39 -07004 * Copyright (C) 2009-2010 Texas Instruments, Inc.
5 * Copyright (C) 2009-2010 Nokia Corporation
Rajendra Nayak972c5422009-12-08 18:46:28 -07006 *
7 * Paul Walmsley (paul@pwsan.com)
8 * Rajendra Nayak (rnayak@ti.com)
9 * Benoit Cousson (b-cousson@ti.com)
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 linux-omap@vger.kernel.org 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.
Rajendra Nayak76cf5292010-09-27 14:02:54 -060020 *
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.
Rajendra Nayak972c5422009-12-08 18:46:28 -070024 */
25
26#include <linux/kernel.h>
Paul Walmsley93340a22010-02-22 22:09:12 -070027#include <linux/list.h>
Rajendra Nayak972c5422009-12-08 18:46:28 -070028#include <linux/clk.h>
29
30#include <plat/control.h>
31#include <plat/clkdev_omap.h>
32
33#include "clock.h"
34#include "clock44xx.h"
35#include "cm.h"
36#include "cm-regbits-44xx.h"
37#include "prm.h"
38#include "prm-regbits-44xx.h"
39
40/* Root clocks */
41
42static struct clk extalt_clkin_ck = {
43 .name = "extalt_clkin_ck",
44 .rate = 59000000,
45 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070046};
47
48static struct clk pad_clks_ck = {
49 .name = "pad_clks_ck",
50 .rate = 12000000,
51 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070052};
53
54static struct clk pad_slimbus_core_clks_ck = {
55 .name = "pad_slimbus_core_clks_ck",
56 .rate = 12000000,
57 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070058};
59
60static struct clk secure_32k_clk_src_ck = {
61 .name = "secure_32k_clk_src_ck",
62 .rate = 32768,
63 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070064};
65
66static struct clk slimbus_clk = {
67 .name = "slimbus_clk",
68 .rate = 12000000,
69 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070070};
71
72static struct clk sys_32k_ck = {
73 .name = "sys_32k_ck",
74 .rate = 32768,
75 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -070076};
77
78static struct clk virt_12000000_ck = {
79 .name = "virt_12000000_ck",
80 .ops = &clkops_null,
81 .rate = 12000000,
82};
83
84static struct clk virt_13000000_ck = {
85 .name = "virt_13000000_ck",
86 .ops = &clkops_null,
87 .rate = 13000000,
88};
89
90static struct clk virt_16800000_ck = {
91 .name = "virt_16800000_ck",
92 .ops = &clkops_null,
93 .rate = 16800000,
94};
95
96static struct clk virt_19200000_ck = {
97 .name = "virt_19200000_ck",
98 .ops = &clkops_null,
99 .rate = 19200000,
100};
101
102static struct clk virt_26000000_ck = {
103 .name = "virt_26000000_ck",
104 .ops = &clkops_null,
105 .rate = 26000000,
106};
107
108static struct clk virt_27000000_ck = {
109 .name = "virt_27000000_ck",
110 .ops = &clkops_null,
111 .rate = 27000000,
112};
113
114static struct clk virt_38400000_ck = {
115 .name = "virt_38400000_ck",
116 .ops = &clkops_null,
117 .rate = 38400000,
118};
119
120static const struct clksel_rate div_1_0_rates[] = {
121 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
122 { .div = 0 },
123};
124
125static const struct clksel_rate div_1_1_rates[] = {
126 { .div = 1, .val = 1, .flags = RATE_IN_4430 },
127 { .div = 0 },
128};
129
130static const struct clksel_rate div_1_2_rates[] = {
131 { .div = 1, .val = 2, .flags = RATE_IN_4430 },
132 { .div = 0 },
133};
134
135static const struct clksel_rate div_1_3_rates[] = {
136 { .div = 1, .val = 3, .flags = RATE_IN_4430 },
137 { .div = 0 },
138};
139
140static const struct clksel_rate div_1_4_rates[] = {
141 { .div = 1, .val = 4, .flags = RATE_IN_4430 },
142 { .div = 0 },
143};
144
145static const struct clksel_rate div_1_5_rates[] = {
146 { .div = 1, .val = 5, .flags = RATE_IN_4430 },
147 { .div = 0 },
148};
149
150static const struct clksel_rate div_1_6_rates[] = {
151 { .div = 1, .val = 6, .flags = RATE_IN_4430 },
152 { .div = 0 },
153};
154
155static const struct clksel_rate div_1_7_rates[] = {
156 { .div = 1, .val = 7, .flags = RATE_IN_4430 },
157 { .div = 0 },
158};
159
160static const struct clksel sys_clkin_sel[] = {
161 { .parent = &virt_12000000_ck, .rates = div_1_1_rates },
162 { .parent = &virt_13000000_ck, .rates = div_1_2_rates },
163 { .parent = &virt_16800000_ck, .rates = div_1_3_rates },
164 { .parent = &virt_19200000_ck, .rates = div_1_4_rates },
165 { .parent = &virt_26000000_ck, .rates = div_1_5_rates },
166 { .parent = &virt_27000000_ck, .rates = div_1_6_rates },
167 { .parent = &virt_38400000_ck, .rates = div_1_7_rates },
168 { .parent = NULL },
169};
170
171static struct clk sys_clkin_ck = {
172 .name = "sys_clkin_ck",
173 .rate = 38400000,
174 .clksel = sys_clkin_sel,
175 .init = &omap2_init_clksel_parent,
176 .clksel_reg = OMAP4430_CM_SYS_CLKSEL,
177 .clksel_mask = OMAP4430_SYS_CLKSEL_MASK,
178 .ops = &clkops_null,
179 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700180};
181
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600182static struct clk tie_low_clock_ck = {
183 .name = "tie_low_clock_ck",
184 .rate = 0,
185 .ops = &clkops_null,
186};
187
Rajendra Nayak972c5422009-12-08 18:46:28 -0700188static struct clk utmi_phy_clkout_ck = {
189 .name = "utmi_phy_clkout_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600190 .rate = 60000000,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700191 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700192};
193
194static struct clk xclk60mhsp1_ck = {
195 .name = "xclk60mhsp1_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600196 .rate = 60000000,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700197 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700198};
199
200static struct clk xclk60mhsp2_ck = {
201 .name = "xclk60mhsp2_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600202 .rate = 60000000,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700203 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700204};
205
206static struct clk xclk60motg_ck = {
207 .name = "xclk60motg_ck",
208 .rate = 60000000,
209 .ops = &clkops_null,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700210};
211
212/* Module clocks and DPLL outputs */
213
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600214static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
215 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -0700216 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
217 { .parent = NULL },
218};
219
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600220static struct clk abe_dpll_bypass_clk_mux_ck = {
221 .name = "abe_dpll_bypass_clk_mux_ck",
222 .parent = &sys_clkin_ck,
223 .ops = &clkops_null,
224 .recalc = &followparent_recalc,
225};
226
Rajendra Nayak972c5422009-12-08 18:46:28 -0700227static struct clk abe_dpll_refclk_mux_ck = {
228 .name = "abe_dpll_refclk_mux_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600229 .parent = &sys_clkin_ck,
230 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700231 .init = &omap2_init_clksel_parent,
232 .clksel_reg = OMAP4430_CM_ABE_PLL_REF_CLKSEL,
233 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
234 .ops = &clkops_null,
235 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700236};
237
238/* DPLL_ABE */
239static struct dpll_data dpll_abe_dd = {
240 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_ABE,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600241 .clk_bypass = &abe_dpll_bypass_clk_mux_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700242 .clk_ref = &abe_dpll_refclk_mux_ck,
243 .control_reg = OMAP4430_CM_CLKMODE_DPLL_ABE,
244 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
245 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_ABE,
246 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_ABE,
247 .mult_mask = OMAP4430_DPLL_MULT_MASK,
248 .div1_mask = OMAP4430_DPLL_DIV_MASK,
249 .enable_mask = OMAP4430_DPLL_EN_MASK,
250 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
251 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
252 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
253 .max_divider = OMAP4430_MAX_DPLL_DIV,
254 .min_divider = 1,
255};
256
257
258static struct clk dpll_abe_ck = {
259 .name = "dpll_abe_ck",
260 .parent = &abe_dpll_refclk_mux_ck,
261 .dpll_data = &dpll_abe_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700262 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700263 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700264 .recalc = &omap3_dpll_recalc,
265 .round_rate = &omap2_dpll_round_rate,
266 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700267};
268
269static struct clk dpll_abe_m2x2_ck = {
270 .name = "dpll_abe_m2x2_ck",
271 .parent = &dpll_abe_ck,
272 .ops = &clkops_null,
273 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700274};
275
276static struct clk abe_24m_fclk = {
277 .name = "abe_24m_fclk",
278 .parent = &dpll_abe_m2x2_ck,
279 .ops = &clkops_null,
280 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700281};
282
283static const struct clksel_rate div3_1to4_rates[] = {
284 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
285 { .div = 2, .val = 1, .flags = RATE_IN_4430 },
286 { .div = 4, .val = 2, .flags = RATE_IN_4430 },
287 { .div = 0 },
288};
289
290static const struct clksel abe_clk_div[] = {
291 { .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
292 { .parent = NULL },
293};
294
295static struct clk abe_clk = {
296 .name = "abe_clk",
297 .parent = &dpll_abe_m2x2_ck,
298 .clksel = abe_clk_div,
299 .clksel_reg = OMAP4430_CM_CLKSEL_ABE,
300 .clksel_mask = OMAP4430_CLKSEL_OPP_MASK,
301 .ops = &clkops_null,
302 .recalc = &omap2_clksel_recalc,
303 .round_rate = &omap2_clksel_round_rate,
304 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700305};
306
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600307static const struct clksel_rate div2_1to2_rates[] = {
308 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
309 { .div = 2, .val = 1, .flags = RATE_IN_4430 },
310 { .div = 0 },
311};
312
Rajendra Nayak972c5422009-12-08 18:46:28 -0700313static const struct clksel aess_fclk_div[] = {
314 { .parent = &abe_clk, .rates = div2_1to2_rates },
315 { .parent = NULL },
316};
317
318static struct clk aess_fclk = {
319 .name = "aess_fclk",
320 .parent = &abe_clk,
321 .clksel = aess_fclk_div,
322 .clksel_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
323 .clksel_mask = OMAP4430_CLKSEL_AESS_FCLK_MASK,
324 .ops = &clkops_null,
325 .recalc = &omap2_clksel_recalc,
326 .round_rate = &omap2_clksel_round_rate,
327 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700328};
329
330static const struct clksel_rate div31_1to31_rates[] = {
Rajendra Nayakecbb0652010-01-19 17:30:55 -0700331 { .div = 1, .val = 1, .flags = RATE_IN_4430 },
332 { .div = 2, .val = 2, .flags = RATE_IN_4430 },
333 { .div = 3, .val = 3, .flags = RATE_IN_4430 },
334 { .div = 4, .val = 4, .flags = RATE_IN_4430 },
335 { .div = 5, .val = 5, .flags = RATE_IN_4430 },
336 { .div = 6, .val = 6, .flags = RATE_IN_4430 },
337 { .div = 7, .val = 7, .flags = RATE_IN_4430 },
338 { .div = 8, .val = 8, .flags = RATE_IN_4430 },
339 { .div = 9, .val = 9, .flags = RATE_IN_4430 },
340 { .div = 10, .val = 10, .flags = RATE_IN_4430 },
341 { .div = 11, .val = 11, .flags = RATE_IN_4430 },
342 { .div = 12, .val = 12, .flags = RATE_IN_4430 },
343 { .div = 13, .val = 13, .flags = RATE_IN_4430 },
344 { .div = 14, .val = 14, .flags = RATE_IN_4430 },
345 { .div = 15, .val = 15, .flags = RATE_IN_4430 },
346 { .div = 16, .val = 16, .flags = RATE_IN_4430 },
347 { .div = 17, .val = 17, .flags = RATE_IN_4430 },
348 { .div = 18, .val = 18, .flags = RATE_IN_4430 },
349 { .div = 19, .val = 19, .flags = RATE_IN_4430 },
350 { .div = 20, .val = 20, .flags = RATE_IN_4430 },
351 { .div = 21, .val = 21, .flags = RATE_IN_4430 },
352 { .div = 22, .val = 22, .flags = RATE_IN_4430 },
353 { .div = 23, .val = 23, .flags = RATE_IN_4430 },
354 { .div = 24, .val = 24, .flags = RATE_IN_4430 },
355 { .div = 25, .val = 25, .flags = RATE_IN_4430 },
356 { .div = 26, .val = 26, .flags = RATE_IN_4430 },
357 { .div = 27, .val = 27, .flags = RATE_IN_4430 },
358 { .div = 28, .val = 28, .flags = RATE_IN_4430 },
359 { .div = 29, .val = 29, .flags = RATE_IN_4430 },
360 { .div = 30, .val = 30, .flags = RATE_IN_4430 },
361 { .div = 31, .val = 31, .flags = RATE_IN_4430 },
Rajendra Nayak972c5422009-12-08 18:46:28 -0700362 { .div = 0 },
363};
364
365static const struct clksel dpll_abe_m3_div[] = {
366 { .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
367 { .parent = NULL },
368};
369
370static struct clk dpll_abe_m3_ck = {
371 .name = "dpll_abe_m3_ck",
372 .parent = &dpll_abe_ck,
373 .clksel = dpll_abe_m3_div,
374 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_ABE,
375 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
376 .ops = &clkops_null,
377 .recalc = &omap2_clksel_recalc,
378 .round_rate = &omap2_clksel_round_rate,
379 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700380};
381
382static const struct clksel core_hsd_byp_clk_mux_sel[] = {
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600383 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -0700384 { .parent = &dpll_abe_m3_ck, .rates = div_1_1_rates },
385 { .parent = NULL },
386};
387
388static struct clk core_hsd_byp_clk_mux_ck = {
389 .name = "core_hsd_byp_clk_mux_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600390 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700391 .clksel = core_hsd_byp_clk_mux_sel,
392 .init = &omap2_init_clksel_parent,
393 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
394 .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
395 .ops = &clkops_null,
396 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700397};
398
399/* DPLL_CORE */
400static struct dpll_data dpll_core_dd = {
401 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_CORE,
402 .clk_bypass = &core_hsd_byp_clk_mux_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600403 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700404 .control_reg = OMAP4430_CM_CLKMODE_DPLL_CORE,
405 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
406 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_CORE,
407 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_CORE,
408 .mult_mask = OMAP4430_DPLL_MULT_MASK,
409 .div1_mask = OMAP4430_DPLL_DIV_MASK,
410 .enable_mask = OMAP4430_DPLL_EN_MASK,
411 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
412 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
413 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
414 .max_divider = OMAP4430_MAX_DPLL_DIV,
415 .min_divider = 1,
416};
417
418
419static struct clk dpll_core_ck = {
420 .name = "dpll_core_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600421 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700422 .dpll_data = &dpll_core_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700423 .init = &omap2_init_dpll_parent,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700424 .ops = &clkops_null,
425 .recalc = &omap3_dpll_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700426};
427
428static const struct clksel dpll_core_m6_div[] = {
429 { .parent = &dpll_core_ck, .rates = div31_1to31_rates },
430 { .parent = NULL },
431};
432
433static struct clk dpll_core_m6_ck = {
434 .name = "dpll_core_m6_ck",
435 .parent = &dpll_core_ck,
436 .clksel = dpll_core_m6_div,
437 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_CORE,
438 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
439 .ops = &clkops_null,
440 .recalc = &omap2_clksel_recalc,
441 .round_rate = &omap2_clksel_round_rate,
442 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700443};
444
445static const struct clksel dbgclk_mux_sel[] = {
446 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
447 { .parent = &dpll_core_m6_ck, .rates = div_1_1_rates },
448 { .parent = NULL },
449};
450
451static struct clk dbgclk_mux_ck = {
452 .name = "dbgclk_mux_ck",
453 .parent = &sys_clkin_ck,
454 .ops = &clkops_null,
455 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700456};
457
458static struct clk dpll_core_m2_ck = {
459 .name = "dpll_core_m2_ck",
460 .parent = &dpll_core_ck,
461 .clksel = dpll_core_m6_div,
462 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_CORE,
463 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
464 .ops = &clkops_null,
465 .recalc = &omap2_clksel_recalc,
466 .round_rate = &omap2_clksel_round_rate,
467 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700468};
469
470static struct clk ddrphy_ck = {
471 .name = "ddrphy_ck",
472 .parent = &dpll_core_m2_ck,
473 .ops = &clkops_null,
474 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700475};
476
477static struct clk dpll_core_m5_ck = {
478 .name = "dpll_core_m5_ck",
479 .parent = &dpll_core_ck,
480 .clksel = dpll_core_m6_div,
481 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_CORE,
482 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
483 .ops = &clkops_null,
484 .recalc = &omap2_clksel_recalc,
485 .round_rate = &omap2_clksel_round_rate,
486 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700487};
488
489static const struct clksel div_core_div[] = {
490 { .parent = &dpll_core_m5_ck, .rates = div2_1to2_rates },
491 { .parent = NULL },
492};
493
494static struct clk div_core_ck = {
495 .name = "div_core_ck",
496 .parent = &dpll_core_m5_ck,
497 .clksel = div_core_div,
498 .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
499 .clksel_mask = OMAP4430_CLKSEL_CORE_MASK,
500 .ops = &clkops_null,
501 .recalc = &omap2_clksel_recalc,
502 .round_rate = &omap2_clksel_round_rate,
503 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700504};
505
506static const struct clksel_rate div4_1to8_rates[] = {
507 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
508 { .div = 2, .val = 1, .flags = RATE_IN_4430 },
509 { .div = 4, .val = 2, .flags = RATE_IN_4430 },
510 { .div = 8, .val = 3, .flags = RATE_IN_4430 },
511 { .div = 0 },
512};
513
514static const struct clksel div_iva_hs_clk_div[] = {
515 { .parent = &dpll_core_m5_ck, .rates = div4_1to8_rates },
516 { .parent = NULL },
517};
518
519static struct clk div_iva_hs_clk = {
520 .name = "div_iva_hs_clk",
521 .parent = &dpll_core_m5_ck,
522 .clksel = div_iva_hs_clk_div,
523 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_IVA,
524 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
525 .ops = &clkops_null,
526 .recalc = &omap2_clksel_recalc,
527 .round_rate = &omap2_clksel_round_rate,
528 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700529};
530
531static struct clk div_mpu_hs_clk = {
532 .name = "div_mpu_hs_clk",
533 .parent = &dpll_core_m5_ck,
534 .clksel = div_iva_hs_clk_div,
535 .clksel_reg = OMAP4430_CM_BYPCLK_DPLL_MPU,
536 .clksel_mask = OMAP4430_CLKSEL_0_1_MASK,
537 .ops = &clkops_null,
538 .recalc = &omap2_clksel_recalc,
539 .round_rate = &omap2_clksel_round_rate,
540 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700541};
542
543static struct clk dpll_core_m4_ck = {
544 .name = "dpll_core_m4_ck",
545 .parent = &dpll_core_ck,
546 .clksel = dpll_core_m6_div,
547 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_CORE,
548 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
549 .ops = &clkops_null,
550 .recalc = &omap2_clksel_recalc,
551 .round_rate = &omap2_clksel_round_rate,
552 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700553};
554
555static struct clk dll_clk_div_ck = {
556 .name = "dll_clk_div_ck",
557 .parent = &dpll_core_m4_ck,
558 .ops = &clkops_null,
559 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700560};
561
562static struct clk dpll_abe_m2_ck = {
563 .name = "dpll_abe_m2_ck",
564 .parent = &dpll_abe_ck,
565 .clksel = dpll_abe_m3_div,
566 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_ABE,
567 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
568 .ops = &clkops_null,
569 .recalc = &omap2_clksel_recalc,
570 .round_rate = &omap2_clksel_round_rate,
571 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700572};
573
574static struct clk dpll_core_m3_ck = {
575 .name = "dpll_core_m3_ck",
576 .parent = &dpll_core_ck,
577 .clksel = dpll_core_m6_div,
578 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_CORE,
579 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
580 .ops = &clkops_null,
581 .recalc = &omap2_clksel_recalc,
582 .round_rate = &omap2_clksel_round_rate,
583 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700584};
585
586static struct clk dpll_core_m7_ck = {
587 .name = "dpll_core_m7_ck",
588 .parent = &dpll_core_ck,
589 .clksel = dpll_core_m6_div,
590 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_CORE,
591 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
592 .ops = &clkops_null,
593 .recalc = &omap2_clksel_recalc,
594 .round_rate = &omap2_clksel_round_rate,
595 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700596};
597
598static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600599 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -0700600 { .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
601 { .parent = NULL },
602};
603
604static struct clk iva_hsd_byp_clk_mux_ck = {
605 .name = "iva_hsd_byp_clk_mux_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600606 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700607 .ops = &clkops_null,
608 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700609};
610
611/* DPLL_IVA */
612static struct dpll_data dpll_iva_dd = {
613 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_IVA,
614 .clk_bypass = &iva_hsd_byp_clk_mux_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600615 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700616 .control_reg = OMAP4430_CM_CLKMODE_DPLL_IVA,
617 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
618 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_IVA,
619 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_IVA,
620 .mult_mask = OMAP4430_DPLL_MULT_MASK,
621 .div1_mask = OMAP4430_DPLL_DIV_MASK,
622 .enable_mask = OMAP4430_DPLL_EN_MASK,
623 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
624 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
625 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
626 .max_divider = OMAP4430_MAX_DPLL_DIV,
627 .min_divider = 1,
628};
629
630
631static struct clk dpll_iva_ck = {
632 .name = "dpll_iva_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600633 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700634 .dpll_data = &dpll_iva_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700635 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700636 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700637 .recalc = &omap3_dpll_recalc,
638 .round_rate = &omap2_dpll_round_rate,
639 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700640};
641
642static const struct clksel dpll_iva_m4_div[] = {
643 { .parent = &dpll_iva_ck, .rates = div31_1to31_rates },
644 { .parent = NULL },
645};
646
647static struct clk dpll_iva_m4_ck = {
648 .name = "dpll_iva_m4_ck",
649 .parent = &dpll_iva_ck,
650 .clksel = dpll_iva_m4_div,
651 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_IVA,
652 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
653 .ops = &clkops_null,
654 .recalc = &omap2_clksel_recalc,
655 .round_rate = &omap2_clksel_round_rate,
656 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700657};
658
659static struct clk dpll_iva_m5_ck = {
660 .name = "dpll_iva_m5_ck",
661 .parent = &dpll_iva_ck,
662 .clksel = dpll_iva_m4_div,
663 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_IVA,
664 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
665 .ops = &clkops_null,
666 .recalc = &omap2_clksel_recalc,
667 .round_rate = &omap2_clksel_round_rate,
668 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700669};
670
671/* DPLL_MPU */
672static struct dpll_data dpll_mpu_dd = {
673 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_MPU,
674 .clk_bypass = &div_mpu_hs_clk,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600675 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700676 .control_reg = OMAP4430_CM_CLKMODE_DPLL_MPU,
677 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
678 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_MPU,
679 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_MPU,
680 .mult_mask = OMAP4430_DPLL_MULT_MASK,
681 .div1_mask = OMAP4430_DPLL_DIV_MASK,
682 .enable_mask = OMAP4430_DPLL_EN_MASK,
683 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
684 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
685 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
686 .max_divider = OMAP4430_MAX_DPLL_DIV,
687 .min_divider = 1,
688};
689
690
691static struct clk dpll_mpu_ck = {
692 .name = "dpll_mpu_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600693 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700694 .dpll_data = &dpll_mpu_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700695 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700696 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700697 .recalc = &omap3_dpll_recalc,
698 .round_rate = &omap2_dpll_round_rate,
699 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700700};
701
702static const struct clksel dpll_mpu_m2_div[] = {
703 { .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
704 { .parent = NULL },
705};
706
707static struct clk dpll_mpu_m2_ck = {
708 .name = "dpll_mpu_m2_ck",
709 .parent = &dpll_mpu_ck,
710 .clksel = dpll_mpu_m2_div,
711 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_MPU,
712 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
713 .ops = &clkops_null,
714 .recalc = &omap2_clksel_recalc,
715 .round_rate = &omap2_clksel_round_rate,
716 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700717};
718
719static struct clk per_hs_clk_div_ck = {
720 .name = "per_hs_clk_div_ck",
721 .parent = &dpll_abe_m3_ck,
722 .ops = &clkops_null,
723 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700724};
725
726static const struct clksel per_hsd_byp_clk_mux_sel[] = {
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600727 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -0700728 { .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
729 { .parent = NULL },
730};
731
732static struct clk per_hsd_byp_clk_mux_ck = {
733 .name = "per_hsd_byp_clk_mux_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600734 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700735 .clksel = per_hsd_byp_clk_mux_sel,
736 .init = &omap2_init_clksel_parent,
737 .clksel_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
738 .clksel_mask = OMAP4430_DPLL_BYP_CLKSEL_MASK,
739 .ops = &clkops_null,
740 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700741};
742
743/* DPLL_PER */
744static struct dpll_data dpll_per_dd = {
745 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_PER,
746 .clk_bypass = &per_hsd_byp_clk_mux_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600747 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700748 .control_reg = OMAP4430_CM_CLKMODE_DPLL_PER,
749 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
750 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_PER,
751 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_PER,
752 .mult_mask = OMAP4430_DPLL_MULT_MASK,
753 .div1_mask = OMAP4430_DPLL_DIV_MASK,
754 .enable_mask = OMAP4430_DPLL_EN_MASK,
755 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
756 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
757 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
758 .max_divider = OMAP4430_MAX_DPLL_DIV,
759 .min_divider = 1,
760};
761
762
763static struct clk dpll_per_ck = {
764 .name = "dpll_per_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600765 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700766 .dpll_data = &dpll_per_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700767 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700768 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700769 .recalc = &omap3_dpll_recalc,
770 .round_rate = &omap2_dpll_round_rate,
771 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700772};
773
774static const struct clksel dpll_per_m2_div[] = {
775 { .parent = &dpll_per_ck, .rates = div31_1to31_rates },
776 { .parent = NULL },
777};
778
779static struct clk dpll_per_m2_ck = {
780 .name = "dpll_per_m2_ck",
781 .parent = &dpll_per_ck,
782 .clksel = dpll_per_m2_div,
783 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_PER,
784 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
785 .ops = &clkops_null,
786 .recalc = &omap2_clksel_recalc,
787 .round_rate = &omap2_clksel_round_rate,
788 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700789};
790
791static struct clk dpll_per_m2x2_ck = {
792 .name = "dpll_per_m2x2_ck",
793 .parent = &dpll_per_ck,
794 .ops = &clkops_null,
795 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700796};
797
798static struct clk dpll_per_m3_ck = {
799 .name = "dpll_per_m3_ck",
800 .parent = &dpll_per_ck,
801 .clksel = dpll_per_m2_div,
802 .clksel_reg = OMAP4430_CM_DIV_M3_DPLL_PER,
803 .clksel_mask = OMAP4430_DPLL_CLKOUTHIF_DIV_MASK,
804 .ops = &clkops_null,
805 .recalc = &omap2_clksel_recalc,
806 .round_rate = &omap2_clksel_round_rate,
807 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700808};
809
810static struct clk dpll_per_m4_ck = {
811 .name = "dpll_per_m4_ck",
812 .parent = &dpll_per_ck,
813 .clksel = dpll_per_m2_div,
814 .clksel_reg = OMAP4430_CM_DIV_M4_DPLL_PER,
815 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT1_DIV_MASK,
816 .ops = &clkops_null,
817 .recalc = &omap2_clksel_recalc,
818 .round_rate = &omap2_clksel_round_rate,
819 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700820};
821
822static struct clk dpll_per_m5_ck = {
823 .name = "dpll_per_m5_ck",
824 .parent = &dpll_per_ck,
825 .clksel = dpll_per_m2_div,
826 .clksel_reg = OMAP4430_CM_DIV_M5_DPLL_PER,
827 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT2_DIV_MASK,
828 .ops = &clkops_null,
829 .recalc = &omap2_clksel_recalc,
830 .round_rate = &omap2_clksel_round_rate,
831 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700832};
833
834static struct clk dpll_per_m6_ck = {
835 .name = "dpll_per_m6_ck",
836 .parent = &dpll_per_ck,
837 .clksel = dpll_per_m2_div,
838 .clksel_reg = OMAP4430_CM_DIV_M6_DPLL_PER,
839 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT3_DIV_MASK,
840 .ops = &clkops_null,
841 .recalc = &omap2_clksel_recalc,
842 .round_rate = &omap2_clksel_round_rate,
843 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700844};
845
846static struct clk dpll_per_m7_ck = {
847 .name = "dpll_per_m7_ck",
848 .parent = &dpll_per_ck,
849 .clksel = dpll_per_m2_div,
850 .clksel_reg = OMAP4430_CM_DIV_M7_DPLL_PER,
851 .clksel_mask = OMAP4430_HSDIVIDER_CLKOUT4_DIV_MASK,
852 .ops = &clkops_null,
853 .recalc = &omap2_clksel_recalc,
854 .round_rate = &omap2_clksel_round_rate,
855 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700856};
857
858/* DPLL_UNIPRO */
859static struct dpll_data dpll_unipro_dd = {
860 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_UNIPRO,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600861 .clk_bypass = &sys_clkin_ck,
862 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700863 .control_reg = OMAP4430_CM_CLKMODE_DPLL_UNIPRO,
864 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
865 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_UNIPRO,
866 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_UNIPRO,
867 .mult_mask = OMAP4430_DPLL_MULT_MASK,
868 .div1_mask = OMAP4430_DPLL_DIV_MASK,
869 .enable_mask = OMAP4430_DPLL_EN_MASK,
870 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
871 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
872 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
873 .max_divider = OMAP4430_MAX_DPLL_DIV,
874 .min_divider = 1,
875};
876
877
878static struct clk dpll_unipro_ck = {
879 .name = "dpll_unipro_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600880 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700881 .dpll_data = &dpll_unipro_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700882 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700883 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700884 .recalc = &omap3_dpll_recalc,
885 .round_rate = &omap2_dpll_round_rate,
886 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700887};
888
889static const struct clksel dpll_unipro_m2x2_div[] = {
890 { .parent = &dpll_unipro_ck, .rates = div31_1to31_rates },
891 { .parent = NULL },
892};
893
894static struct clk dpll_unipro_m2x2_ck = {
895 .name = "dpll_unipro_m2x2_ck",
896 .parent = &dpll_unipro_ck,
897 .clksel = dpll_unipro_m2x2_div,
898 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_UNIPRO,
899 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_MASK,
900 .ops = &clkops_null,
901 .recalc = &omap2_clksel_recalc,
902 .round_rate = &omap2_clksel_round_rate,
903 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700904};
905
906static struct clk usb_hs_clk_div_ck = {
907 .name = "usb_hs_clk_div_ck",
908 .parent = &dpll_abe_m3_ck,
909 .ops = &clkops_null,
910 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700911};
912
913/* DPLL_USB */
914static struct dpll_data dpll_usb_dd = {
915 .mult_div1_reg = OMAP4430_CM_CLKSEL_DPLL_USB,
916 .clk_bypass = &usb_hs_clk_div_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600917 .clk_ref = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700918 .control_reg = OMAP4430_CM_CLKMODE_DPLL_USB,
919 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
920 .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB,
921 .idlest_reg = OMAP4430_CM_IDLEST_DPLL_USB,
922 .mult_mask = OMAP4430_DPLL_MULT_MASK,
923 .div1_mask = OMAP4430_DPLL_DIV_MASK,
924 .enable_mask = OMAP4430_DPLL_EN_MASK,
925 .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
926 .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
927 .max_multiplier = OMAP4430_MAX_DPLL_MULT,
928 .max_divider = OMAP4430_MAX_DPLL_DIV,
929 .min_divider = 1,
Richard Woodruff358965d2010-02-22 22:09:08 -0700930 .flags = DPLL_J_TYPE | DPLL_NO_DCO_SEL
Rajendra Nayak972c5422009-12-08 18:46:28 -0700931};
932
933
934static struct clk dpll_usb_ck = {
935 .name = "dpll_usb_ck",
Rajendra Nayak76cf5292010-09-27 14:02:54 -0600936 .parent = &sys_clkin_ck,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700937 .dpll_data = &dpll_usb_dd,
Rajendra Nayak911bd732009-12-08 18:47:17 -0700938 .init = &omap2_init_dpll_parent,
Paul Walmsley657ebfa2010-02-22 22:09:20 -0700939 .ops = &clkops_omap3_noncore_dpll_ops,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700940 .recalc = &omap3_dpll_recalc,
941 .round_rate = &omap2_dpll_round_rate,
942 .set_rate = &omap3_noncore_dpll_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700943};
944
945static struct clk dpll_usb_clkdcoldo_ck = {
946 .name = "dpll_usb_clkdcoldo_ck",
947 .parent = &dpll_usb_ck,
948 .ops = &clkops_null,
949 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700950};
951
952static const struct clksel dpll_usb_m2_div[] = {
953 { .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
954 { .parent = NULL },
955};
956
957static struct clk dpll_usb_m2_ck = {
958 .name = "dpll_usb_m2_ck",
959 .parent = &dpll_usb_ck,
960 .clksel = dpll_usb_m2_div,
961 .clksel_reg = OMAP4430_CM_DIV_M2_DPLL_USB,
962 .clksel_mask = OMAP4430_DPLL_CLKOUT_DIV_0_6_MASK,
963 .ops = &clkops_null,
964 .recalc = &omap2_clksel_recalc,
965 .round_rate = &omap2_clksel_round_rate,
966 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700967};
968
969static const struct clksel ducati_clk_mux_sel[] = {
970 { .parent = &div_core_ck, .rates = div_1_0_rates },
971 { .parent = &dpll_per_m6_ck, .rates = div_1_1_rates },
972 { .parent = NULL },
973};
974
975static struct clk ducati_clk_mux_ck = {
976 .name = "ducati_clk_mux_ck",
977 .parent = &div_core_ck,
978 .clksel = ducati_clk_mux_sel,
979 .init = &omap2_init_clksel_parent,
980 .clksel_reg = OMAP4430_CM_CLKSEL_DUCATI_ISS_ROOT,
981 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
982 .ops = &clkops_null,
983 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700984};
985
986static struct clk func_12m_fclk = {
987 .name = "func_12m_fclk",
988 .parent = &dpll_per_m2x2_ck,
989 .ops = &clkops_null,
990 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700991};
992
993static struct clk func_24m_clk = {
994 .name = "func_24m_clk",
995 .parent = &dpll_per_m2_ck,
996 .ops = &clkops_null,
997 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -0700998};
999
1000static struct clk func_24mc_fclk = {
1001 .name = "func_24mc_fclk",
1002 .parent = &dpll_per_m2x2_ck,
1003 .ops = &clkops_null,
1004 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001005};
1006
1007static const struct clksel_rate div2_4to8_rates[] = {
1008 { .div = 4, .val = 0, .flags = RATE_IN_4430 },
1009 { .div = 8, .val = 1, .flags = RATE_IN_4430 },
1010 { .div = 0 },
1011};
1012
1013static const struct clksel func_48m_fclk_div[] = {
1014 { .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
1015 { .parent = NULL },
1016};
1017
1018static struct clk func_48m_fclk = {
1019 .name = "func_48m_fclk",
1020 .parent = &dpll_per_m2x2_ck,
1021 .clksel = func_48m_fclk_div,
1022 .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1023 .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1024 .ops = &clkops_null,
1025 .recalc = &omap2_clksel_recalc,
1026 .round_rate = &omap2_clksel_round_rate,
1027 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001028};
1029
1030static struct clk func_48mc_fclk = {
1031 .name = "func_48mc_fclk",
1032 .parent = &dpll_per_m2x2_ck,
1033 .ops = &clkops_null,
1034 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001035};
1036
1037static const struct clksel_rate div2_2to4_rates[] = {
1038 { .div = 2, .val = 0, .flags = RATE_IN_4430 },
1039 { .div = 4, .val = 1, .flags = RATE_IN_4430 },
1040 { .div = 0 },
1041};
1042
1043static const struct clksel func_64m_fclk_div[] = {
1044 { .parent = &dpll_per_m4_ck, .rates = div2_2to4_rates },
1045 { .parent = NULL },
1046};
1047
1048static struct clk func_64m_fclk = {
1049 .name = "func_64m_fclk",
1050 .parent = &dpll_per_m4_ck,
1051 .clksel = func_64m_fclk_div,
1052 .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1053 .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1054 .ops = &clkops_null,
1055 .recalc = &omap2_clksel_recalc,
1056 .round_rate = &omap2_clksel_round_rate,
1057 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001058};
1059
1060static const struct clksel func_96m_fclk_div[] = {
1061 { .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
1062 { .parent = NULL },
1063};
1064
1065static struct clk func_96m_fclk = {
1066 .name = "func_96m_fclk",
1067 .parent = &dpll_per_m2x2_ck,
1068 .clksel = func_96m_fclk_div,
1069 .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1070 .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1071 .ops = &clkops_null,
1072 .recalc = &omap2_clksel_recalc,
1073 .round_rate = &omap2_clksel_round_rate,
1074 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001075};
1076
1077static const struct clksel hsmmc6_fclk_sel[] = {
1078 { .parent = &func_64m_fclk, .rates = div_1_0_rates },
1079 { .parent = &func_96m_fclk, .rates = div_1_1_rates },
1080 { .parent = NULL },
1081};
1082
1083static struct clk hsmmc6_fclk = {
1084 .name = "hsmmc6_fclk",
1085 .parent = &func_64m_fclk,
1086 .ops = &clkops_null,
1087 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001088};
1089
1090static const struct clksel_rate div2_1to8_rates[] = {
1091 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
1092 { .div = 8, .val = 1, .flags = RATE_IN_4430 },
1093 { .div = 0 },
1094};
1095
1096static const struct clksel init_60m_fclk_div[] = {
1097 { .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
1098 { .parent = NULL },
1099};
1100
1101static struct clk init_60m_fclk = {
1102 .name = "init_60m_fclk",
1103 .parent = &dpll_usb_m2_ck,
1104 .clksel = init_60m_fclk_div,
1105 .clksel_reg = OMAP4430_CM_CLKSEL_USB_60MHZ,
1106 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1107 .ops = &clkops_null,
1108 .recalc = &omap2_clksel_recalc,
1109 .round_rate = &omap2_clksel_round_rate,
1110 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001111};
1112
1113static const struct clksel l3_div_div[] = {
1114 { .parent = &div_core_ck, .rates = div2_1to2_rates },
1115 { .parent = NULL },
1116};
1117
1118static struct clk l3_div_ck = {
1119 .name = "l3_div_ck",
1120 .parent = &div_core_ck,
1121 .clksel = l3_div_div,
1122 .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
1123 .clksel_mask = OMAP4430_CLKSEL_L3_MASK,
1124 .ops = &clkops_null,
1125 .recalc = &omap2_clksel_recalc,
1126 .round_rate = &omap2_clksel_round_rate,
1127 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001128};
1129
1130static const struct clksel l4_div_div[] = {
1131 { .parent = &l3_div_ck, .rates = div2_1to2_rates },
1132 { .parent = NULL },
1133};
1134
1135static struct clk l4_div_ck = {
1136 .name = "l4_div_ck",
1137 .parent = &l3_div_ck,
1138 .clksel = l4_div_div,
1139 .clksel_reg = OMAP4430_CM_CLKSEL_CORE,
1140 .clksel_mask = OMAP4430_CLKSEL_L4_MASK,
1141 .ops = &clkops_null,
1142 .recalc = &omap2_clksel_recalc,
1143 .round_rate = &omap2_clksel_round_rate,
1144 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001145};
1146
1147static struct clk lp_clk_div_ck = {
1148 .name = "lp_clk_div_ck",
1149 .parent = &dpll_abe_m2x2_ck,
1150 .ops = &clkops_null,
1151 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001152};
1153
1154static const struct clksel l4_wkup_clk_mux_sel[] = {
1155 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
1156 { .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
1157 { .parent = NULL },
1158};
1159
1160static struct clk l4_wkup_clk_mux_ck = {
1161 .name = "l4_wkup_clk_mux_ck",
1162 .parent = &sys_clkin_ck,
1163 .clksel = l4_wkup_clk_mux_sel,
1164 .init = &omap2_init_clksel_parent,
1165 .clksel_reg = OMAP4430_CM_L4_WKUP_CLKSEL,
1166 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1167 .ops = &clkops_null,
1168 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001169};
1170
1171static const struct clksel per_abe_nc_fclk_div[] = {
1172 { .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
1173 { .parent = NULL },
1174};
1175
1176static struct clk per_abe_nc_fclk = {
1177 .name = "per_abe_nc_fclk",
1178 .parent = &dpll_abe_m2_ck,
1179 .clksel = per_abe_nc_fclk_div,
1180 .clksel_reg = OMAP4430_CM_SCALE_FCLK,
1181 .clksel_mask = OMAP4430_SCALE_FCLK_MASK,
1182 .ops = &clkops_null,
1183 .recalc = &omap2_clksel_recalc,
1184 .round_rate = &omap2_clksel_round_rate,
1185 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001186};
1187
1188static const struct clksel mcasp2_fclk_sel[] = {
1189 { .parent = &func_96m_fclk, .rates = div_1_0_rates },
1190 { .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
1191 { .parent = NULL },
1192};
1193
1194static struct clk mcasp2_fclk = {
1195 .name = "mcasp2_fclk",
1196 .parent = &func_96m_fclk,
1197 .ops = &clkops_null,
1198 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001199};
1200
1201static struct clk mcasp3_fclk = {
1202 .name = "mcasp3_fclk",
1203 .parent = &func_96m_fclk,
1204 .ops = &clkops_null,
1205 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001206};
1207
1208static struct clk ocp_abe_iclk = {
1209 .name = "ocp_abe_iclk",
1210 .parent = &aess_fclk,
1211 .ops = &clkops_null,
1212 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001213};
1214
1215static struct clk per_abe_24m_fclk = {
1216 .name = "per_abe_24m_fclk",
1217 .parent = &dpll_abe_m2_ck,
1218 .ops = &clkops_null,
1219 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001220};
1221
1222static const struct clksel pmd_stm_clock_mux_sel[] = {
1223 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
1224 { .parent = &dpll_core_m6_ck, .rates = div_1_1_rates },
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001225 { .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -07001226 { .parent = NULL },
1227};
1228
1229static struct clk pmd_stm_clock_mux_ck = {
1230 .name = "pmd_stm_clock_mux_ck",
1231 .parent = &sys_clkin_ck,
1232 .ops = &clkops_null,
1233 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001234};
1235
1236static struct clk pmd_trace_clk_mux_ck = {
1237 .name = "pmd_trace_clk_mux_ck",
1238 .parent = &sys_clkin_ck,
1239 .ops = &clkops_null,
1240 .recalc = &followparent_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001241};
1242
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001243static const struct clksel syc_clk_div_div[] = {
1244 { .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
1245 { .parent = NULL },
1246};
1247
Rajendra Nayak972c5422009-12-08 18:46:28 -07001248static struct clk syc_clk_div_ck = {
1249 .name = "syc_clk_div_ck",
1250 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001251 .clksel = syc_clk_div_div,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001252 .clksel_reg = OMAP4430_CM_ABE_DSS_SYS_CLKSEL,
1253 .clksel_mask = OMAP4430_CLKSEL_0_0_MASK,
1254 .ops = &clkops_null,
1255 .recalc = &omap2_clksel_recalc,
1256 .round_rate = &omap2_clksel_round_rate,
1257 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001258};
1259
1260/* Leaf clocks controlled by modules */
1261
Rajendra Nayak54776052010-02-22 22:09:39 -07001262static struct clk aes1_fck = {
1263 .name = "aes1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001264 .ops = &clkops_omap2_dflt,
1265 .enable_reg = OMAP4430_CM_L4SEC_AES1_CLKCTRL,
1266 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1267 .clkdm_name = "l4_secure_clkdm",
1268 .parent = &l3_div_ck,
1269 .recalc = &followparent_recalc,
1270};
1271
Rajendra Nayak54776052010-02-22 22:09:39 -07001272static struct clk aes2_fck = {
1273 .name = "aes2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001274 .ops = &clkops_omap2_dflt,
1275 .enable_reg = OMAP4430_CM_L4SEC_AES2_CLKCTRL,
1276 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1277 .clkdm_name = "l4_secure_clkdm",
1278 .parent = &l3_div_ck,
1279 .recalc = &followparent_recalc,
1280};
1281
Rajendra Nayak54776052010-02-22 22:09:39 -07001282static struct clk aess_fck = {
1283 .name = "aess_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001284 .ops = &clkops_omap2_dflt,
1285 .enable_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
1286 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1287 .clkdm_name = "abe_clkdm",
1288 .parent = &aess_fclk,
1289 .recalc = &followparent_recalc,
1290};
1291
Rajendra Nayak54776052010-02-22 22:09:39 -07001292static struct clk cust_efuse_fck = {
1293 .name = "cust_efuse_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001294 .ops = &clkops_omap2_dflt,
1295 .enable_reg = OMAP4430_CM_CEFUSE_CEFUSE_CLKCTRL,
1296 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1297 .clkdm_name = "l4_cefuse_clkdm",
1298 .parent = &sys_clkin_ck,
1299 .recalc = &followparent_recalc,
1300};
1301
Rajendra Nayak54776052010-02-22 22:09:39 -07001302static struct clk des3des_fck = {
1303 .name = "des3des_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001304 .ops = &clkops_omap2_dflt,
1305 .enable_reg = OMAP4430_CM_L4SEC_DES3DES_CLKCTRL,
1306 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1307 .clkdm_name = "l4_secure_clkdm",
1308 .parent = &l4_div_ck,
1309 .recalc = &followparent_recalc,
1310};
1311
1312static const struct clksel dmic_sync_mux_sel[] = {
1313 { .parent = &abe_24m_fclk, .rates = div_1_0_rates },
1314 { .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
1315 { .parent = &func_24m_clk, .rates = div_1_2_rates },
1316 { .parent = NULL },
1317};
1318
1319static struct clk dmic_sync_mux_ck = {
1320 .name = "dmic_sync_mux_ck",
1321 .parent = &abe_24m_fclk,
1322 .clksel = dmic_sync_mux_sel,
1323 .init = &omap2_init_clksel_parent,
1324 .clksel_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1325 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1326 .ops = &clkops_null,
1327 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001328};
1329
1330static const struct clksel func_dmic_abe_gfclk_sel[] = {
1331 { .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
1332 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1333 { .parent = &slimbus_clk, .rates = div_1_2_rates },
1334 { .parent = NULL },
1335};
1336
Rajendra Nayak54776052010-02-22 22:09:39 -07001337/* Merged func_dmic_abe_gfclk into dmic */
1338static struct clk dmic_fck = {
1339 .name = "dmic_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001340 .parent = &dmic_sync_mux_ck,
1341 .clksel = func_dmic_abe_gfclk_sel,
1342 .init = &omap2_init_clksel_parent,
1343 .clksel_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1344 .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1345 .ops = &clkops_omap2_dflt,
1346 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001347 .enable_reg = OMAP4430_CM1_ABE_DMIC_CLKCTRL,
1348 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1349 .clkdm_name = "abe_clkdm",
1350};
1351
Rajendra Nayak54776052010-02-22 22:09:39 -07001352static struct clk dss_fck = {
1353 .name = "dss_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001354 .ops = &clkops_omap2_dflt,
1355 .enable_reg = OMAP4430_CM_DSS_DSS_CLKCTRL,
1356 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1357 .clkdm_name = "l3_dss_clkdm",
1358 .parent = &l3_div_ck,
1359 .recalc = &followparent_recalc,
1360};
1361
Rajendra Nayak54776052010-02-22 22:09:39 -07001362static struct clk ducati_ick = {
1363 .name = "ducati_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001364 .ops = &clkops_omap2_dflt,
1365 .enable_reg = OMAP4430_CM_DUCATI_DUCATI_CLKCTRL,
1366 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1367 .clkdm_name = "ducati_clkdm",
1368 .parent = &ducati_clk_mux_ck,
1369 .recalc = &followparent_recalc,
1370};
1371
Rajendra Nayak54776052010-02-22 22:09:39 -07001372static struct clk emif1_ick = {
1373 .name = "emif1_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001374 .ops = &clkops_omap2_dflt,
1375 .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL,
1376 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
Santosh Shilimkar090830b2010-06-16 19:01:33 +03001377 .flags = ENABLE_ON_INIT,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001378 .clkdm_name = "l3_emif_clkdm",
1379 .parent = &ddrphy_ck,
1380 .recalc = &followparent_recalc,
1381};
1382
Rajendra Nayak54776052010-02-22 22:09:39 -07001383static struct clk emif2_ick = {
1384 .name = "emif2_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001385 .ops = &clkops_omap2_dflt,
1386 .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL,
1387 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
Santosh Shilimkar090830b2010-06-16 19:01:33 +03001388 .flags = ENABLE_ON_INIT,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001389 .clkdm_name = "l3_emif_clkdm",
1390 .parent = &ddrphy_ck,
1391 .recalc = &followparent_recalc,
1392};
1393
1394static const struct clksel fdif_fclk_div[] = {
1395 { .parent = &dpll_per_m4_ck, .rates = div3_1to4_rates },
1396 { .parent = NULL },
1397};
1398
Rajendra Nayak54776052010-02-22 22:09:39 -07001399/* Merged fdif_fclk into fdif */
1400static struct clk fdif_fck = {
1401 .name = "fdif_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001402 .parent = &dpll_per_m4_ck,
1403 .clksel = fdif_fclk_div,
1404 .clksel_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL,
1405 .clksel_mask = OMAP4430_CLKSEL_FCLK_MASK,
1406 .ops = &clkops_omap2_dflt,
1407 .recalc = &omap2_clksel_recalc,
1408 .round_rate = &omap2_clksel_round_rate,
1409 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001410 .enable_reg = OMAP4430_CM_CAM_FDIF_CLKCTRL,
1411 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1412 .clkdm_name = "iss_clkdm",
1413};
1414
Rajendra Nayak972c5422009-12-08 18:46:28 -07001415static const struct clksel sgx_clk_mux_sel[] = {
1416 { .parent = &dpll_core_m7_ck, .rates = div_1_0_rates },
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001417 { .parent = &dpll_per_m7_ck, .rates = div_1_1_rates },
Rajendra Nayak972c5422009-12-08 18:46:28 -07001418 { .parent = NULL },
1419};
1420
Rajendra Nayak54776052010-02-22 22:09:39 -07001421/* Merged sgx_clk_mux into gfx */
1422static struct clk gfx_fck = {
1423 .name = "gfx_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001424 .parent = &dpll_core_m7_ck,
1425 .clksel = sgx_clk_mux_sel,
1426 .init = &omap2_init_clksel_parent,
1427 .clksel_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1428 .clksel_mask = OMAP4430_CLKSEL_SGX_FCLK_MASK,
1429 .ops = &clkops_omap2_dflt,
1430 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001431 .enable_reg = OMAP4430_CM_GFX_GFX_CLKCTRL,
1432 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1433 .clkdm_name = "l3_gfx_clkdm",
1434};
1435
Rajendra Nayak54776052010-02-22 22:09:39 -07001436static struct clk gpio1_ick = {
1437 .name = "gpio1_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001438 .ops = &clkops_omap2_dflt,
1439 .enable_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
1440 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1441 .clkdm_name = "l4_wkup_clkdm",
1442 .parent = &l4_wkup_clk_mux_ck,
1443 .recalc = &followparent_recalc,
1444};
1445
Rajendra Nayak54776052010-02-22 22:09:39 -07001446static struct clk gpio2_ick = {
1447 .name = "gpio2_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001448 .ops = &clkops_omap2_dflt,
1449 .enable_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
1450 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1451 .clkdm_name = "l4_per_clkdm",
1452 .parent = &l4_div_ck,
1453 .recalc = &followparent_recalc,
1454};
1455
Rajendra Nayak54776052010-02-22 22:09:39 -07001456static struct clk gpio3_ick = {
1457 .name = "gpio3_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001458 .ops = &clkops_omap2_dflt,
1459 .enable_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
1460 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1461 .clkdm_name = "l4_per_clkdm",
1462 .parent = &l4_div_ck,
1463 .recalc = &followparent_recalc,
1464};
1465
Rajendra Nayak54776052010-02-22 22:09:39 -07001466static struct clk gpio4_ick = {
1467 .name = "gpio4_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001468 .ops = &clkops_omap2_dflt,
1469 .enable_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
1470 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1471 .clkdm_name = "l4_per_clkdm",
1472 .parent = &l4_div_ck,
1473 .recalc = &followparent_recalc,
1474};
1475
Rajendra Nayak54776052010-02-22 22:09:39 -07001476static struct clk gpio5_ick = {
1477 .name = "gpio5_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001478 .ops = &clkops_omap2_dflt,
1479 .enable_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
1480 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1481 .clkdm_name = "l4_per_clkdm",
1482 .parent = &l4_div_ck,
1483 .recalc = &followparent_recalc,
1484};
1485
Rajendra Nayak54776052010-02-22 22:09:39 -07001486static struct clk gpio6_ick = {
1487 .name = "gpio6_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001488 .ops = &clkops_omap2_dflt,
1489 .enable_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
1490 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1491 .clkdm_name = "l4_per_clkdm",
1492 .parent = &l4_div_ck,
1493 .recalc = &followparent_recalc,
1494};
1495
Rajendra Nayak54776052010-02-22 22:09:39 -07001496static struct clk gpmc_ick = {
1497 .name = "gpmc_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001498 .ops = &clkops_omap2_dflt,
1499 .enable_reg = OMAP4430_CM_L3_2_GPMC_CLKCTRL,
1500 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1501 .clkdm_name = "l3_2_clkdm",
1502 .parent = &l3_div_ck,
1503 .recalc = &followparent_recalc,
1504};
1505
Rajendra Nayak54776052010-02-22 22:09:39 -07001506/*
1507 * Merged dmt1_clk_mux into gptimer1
1508 * gptimer1 renamed temporarily into gpt1 to match OMAP3 convention
1509 */
1510static struct clk gpt1_fck = {
1511 .name = "gpt1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001512 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001513 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001514 .init = &omap2_init_clksel_parent,
1515 .clksel_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
1516 .clksel_mask = OMAP4430_CLKSEL_MASK,
1517 .ops = &clkops_omap2_dflt,
1518 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001519 .enable_reg = OMAP4430_CM_WKUP_TIMER1_CLKCTRL,
1520 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1521 .clkdm_name = "l4_wkup_clkdm",
1522};
1523
Rajendra Nayak54776052010-02-22 22:09:39 -07001524/*
1525 * Merged cm2_dm10_mux into gptimer10
1526 * gptimer10 renamed temporarily into gpt10 to match OMAP3 convention
1527 */
1528static struct clk gpt10_fck = {
1529 .name = "gpt10_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001530 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001531 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001532 .init = &omap2_init_clksel_parent,
1533 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
1534 .clksel_mask = OMAP4430_CLKSEL_MASK,
1535 .ops = &clkops_omap2_dflt,
1536 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001537 .enable_reg = OMAP4430_CM_L4PER_DMTIMER10_CLKCTRL,
1538 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1539 .clkdm_name = "l4_per_clkdm",
1540};
1541
Rajendra Nayak54776052010-02-22 22:09:39 -07001542/*
1543 * Merged cm2_dm11_mux into gptimer11
1544 * gptimer11 renamed temporarily into gpt11 to match OMAP3 convention
1545 */
1546static struct clk gpt11_fck = {
1547 .name = "gpt11_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001548 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001549 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001550 .init = &omap2_init_clksel_parent,
1551 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
1552 .clksel_mask = OMAP4430_CLKSEL_MASK,
1553 .ops = &clkops_omap2_dflt,
1554 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001555 .enable_reg = OMAP4430_CM_L4PER_DMTIMER11_CLKCTRL,
1556 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1557 .clkdm_name = "l4_per_clkdm",
1558};
1559
Rajendra Nayak54776052010-02-22 22:09:39 -07001560/*
1561 * Merged cm2_dm2_mux into gptimer2
1562 * gptimer2 renamed temporarily into gpt2 to match OMAP3 convention
1563 */
1564static struct clk gpt2_fck = {
1565 .name = "gpt2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001566 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001567 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001568 .init = &omap2_init_clksel_parent,
1569 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
1570 .clksel_mask = OMAP4430_CLKSEL_MASK,
1571 .ops = &clkops_omap2_dflt,
1572 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001573 .enable_reg = OMAP4430_CM_L4PER_DMTIMER2_CLKCTRL,
1574 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1575 .clkdm_name = "l4_per_clkdm",
1576};
1577
Rajendra Nayak54776052010-02-22 22:09:39 -07001578/*
1579 * Merged cm2_dm3_mux into gptimer3
1580 * gptimer3 renamed temporarily into gpt3 to match OMAP3 convention
1581 */
1582static struct clk gpt3_fck = {
1583 .name = "gpt3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001584 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001585 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001586 .init = &omap2_init_clksel_parent,
1587 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
1588 .clksel_mask = OMAP4430_CLKSEL_MASK,
1589 .ops = &clkops_omap2_dflt,
1590 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001591 .enable_reg = OMAP4430_CM_L4PER_DMTIMER3_CLKCTRL,
1592 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1593 .clkdm_name = "l4_per_clkdm",
1594};
1595
Rajendra Nayak54776052010-02-22 22:09:39 -07001596/*
1597 * Merged cm2_dm4_mux into gptimer4
1598 * gptimer4 renamed temporarily into gpt4 to match OMAP3 convention
1599 */
1600static struct clk gpt4_fck = {
1601 .name = "gpt4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001602 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001603 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001604 .init = &omap2_init_clksel_parent,
1605 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
1606 .clksel_mask = OMAP4430_CLKSEL_MASK,
1607 .ops = &clkops_omap2_dflt,
1608 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001609 .enable_reg = OMAP4430_CM_L4PER_DMTIMER4_CLKCTRL,
1610 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1611 .clkdm_name = "l4_per_clkdm",
1612};
1613
1614static const struct clksel timer5_sync_mux_sel[] = {
1615 { .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
1616 { .parent = &sys_32k_ck, .rates = div_1_1_rates },
1617 { .parent = NULL },
1618};
1619
Rajendra Nayak54776052010-02-22 22:09:39 -07001620/*
1621 * Merged timer5_sync_mux into gptimer5
1622 * gptimer5 renamed temporarily into gpt5 to match OMAP3 convention
1623 */
1624static struct clk gpt5_fck = {
1625 .name = "gpt5_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001626 .parent = &syc_clk_div_ck,
1627 .clksel = timer5_sync_mux_sel,
1628 .init = &omap2_init_clksel_parent,
1629 .clksel_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
1630 .clksel_mask = OMAP4430_CLKSEL_MASK,
1631 .ops = &clkops_omap2_dflt,
1632 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001633 .enable_reg = OMAP4430_CM1_ABE_TIMER5_CLKCTRL,
1634 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1635 .clkdm_name = "abe_clkdm",
1636};
1637
Rajendra Nayak54776052010-02-22 22:09:39 -07001638/*
1639 * Merged timer6_sync_mux into gptimer6
1640 * gptimer6 renamed temporarily into gpt6 to match OMAP3 convention
1641 */
1642static struct clk gpt6_fck = {
1643 .name = "gpt6_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001644 .parent = &syc_clk_div_ck,
1645 .clksel = timer5_sync_mux_sel,
1646 .init = &omap2_init_clksel_parent,
1647 .clksel_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
1648 .clksel_mask = OMAP4430_CLKSEL_MASK,
1649 .ops = &clkops_omap2_dflt,
1650 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001651 .enable_reg = OMAP4430_CM1_ABE_TIMER6_CLKCTRL,
1652 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1653 .clkdm_name = "abe_clkdm",
1654};
1655
Rajendra Nayak54776052010-02-22 22:09:39 -07001656/*
1657 * Merged timer7_sync_mux into gptimer7
1658 * gptimer7 renamed temporarily into gpt7 to match OMAP3 convention
1659 */
1660static struct clk gpt7_fck = {
1661 .name = "gpt7_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001662 .parent = &syc_clk_div_ck,
1663 .clksel = timer5_sync_mux_sel,
1664 .init = &omap2_init_clksel_parent,
1665 .clksel_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
1666 .clksel_mask = OMAP4430_CLKSEL_MASK,
1667 .ops = &clkops_omap2_dflt,
1668 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001669 .enable_reg = OMAP4430_CM1_ABE_TIMER7_CLKCTRL,
1670 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1671 .clkdm_name = "abe_clkdm",
1672};
1673
Rajendra Nayak54776052010-02-22 22:09:39 -07001674/*
1675 * Merged timer8_sync_mux into gptimer8
1676 * gptimer8 renamed temporarily into gpt8 to match OMAP3 convention
1677 */
1678static struct clk gpt8_fck = {
1679 .name = "gpt8_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001680 .parent = &syc_clk_div_ck,
1681 .clksel = timer5_sync_mux_sel,
1682 .init = &omap2_init_clksel_parent,
1683 .clksel_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
1684 .clksel_mask = OMAP4430_CLKSEL_MASK,
1685 .ops = &clkops_omap2_dflt,
1686 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001687 .enable_reg = OMAP4430_CM1_ABE_TIMER8_CLKCTRL,
1688 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1689 .clkdm_name = "abe_clkdm",
1690};
1691
Rajendra Nayak54776052010-02-22 22:09:39 -07001692/*
1693 * Merged cm2_dm9_mux into gptimer9
1694 * gptimer9 renamed temporarily into gpt9 to match OMAP3 convention
1695 */
1696static struct clk gpt9_fck = {
1697 .name = "gpt9_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001698 .parent = &sys_clkin_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001699 .clksel = abe_dpll_bypass_clk_mux_sel,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001700 .init = &omap2_init_clksel_parent,
1701 .clksel_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
1702 .clksel_mask = OMAP4430_CLKSEL_MASK,
1703 .ops = &clkops_omap2_dflt,
1704 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001705 .enable_reg = OMAP4430_CM_L4PER_DMTIMER9_CLKCTRL,
1706 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1707 .clkdm_name = "l4_per_clkdm",
1708};
1709
Rajendra Nayak54776052010-02-22 22:09:39 -07001710static struct clk hdq1w_fck = {
1711 .name = "hdq1w_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001712 .ops = &clkops_omap2_dflt,
1713 .enable_reg = OMAP4430_CM_L4PER_HDQ1W_CLKCTRL,
1714 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1715 .clkdm_name = "l4_per_clkdm",
1716 .parent = &func_12m_fclk,
1717 .recalc = &followparent_recalc,
1718};
1719
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001720static const struct clksel hsi_fclk_div[] = {
1721 { .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
1722 { .parent = NULL },
1723};
1724
Rajendra Nayak54776052010-02-22 22:09:39 -07001725/* Merged hsi_fclk into hsi */
1726static struct clk hsi_ick = {
1727 .name = "hsi_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001728 .parent = &dpll_per_m2x2_ck,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06001729 .clksel = hsi_fclk_div,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001730 .clksel_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
1731 .clksel_mask = OMAP4430_CLKSEL_24_25_MASK,
1732 .ops = &clkops_omap2_dflt,
1733 .recalc = &omap2_clksel_recalc,
1734 .round_rate = &omap2_clksel_round_rate,
1735 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001736 .enable_reg = OMAP4430_CM_L3INIT_HSI_CLKCTRL,
1737 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1738 .clkdm_name = "l3_init_clkdm",
1739};
1740
Rajendra Nayak54776052010-02-22 22:09:39 -07001741static struct clk i2c1_fck = {
1742 .name = "i2c1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001743 .ops = &clkops_omap2_dflt,
1744 .enable_reg = OMAP4430_CM_L4PER_I2C1_CLKCTRL,
1745 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1746 .clkdm_name = "l4_per_clkdm",
1747 .parent = &func_96m_fclk,
1748 .recalc = &followparent_recalc,
1749};
1750
Rajendra Nayak54776052010-02-22 22:09:39 -07001751static struct clk i2c2_fck = {
1752 .name = "i2c2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001753 .ops = &clkops_omap2_dflt,
1754 .enable_reg = OMAP4430_CM_L4PER_I2C2_CLKCTRL,
1755 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1756 .clkdm_name = "l4_per_clkdm",
1757 .parent = &func_96m_fclk,
1758 .recalc = &followparent_recalc,
1759};
1760
Rajendra Nayak54776052010-02-22 22:09:39 -07001761static struct clk i2c3_fck = {
1762 .name = "i2c3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001763 .ops = &clkops_omap2_dflt,
1764 .enable_reg = OMAP4430_CM_L4PER_I2C3_CLKCTRL,
1765 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1766 .clkdm_name = "l4_per_clkdm",
1767 .parent = &func_96m_fclk,
1768 .recalc = &followparent_recalc,
1769};
1770
Rajendra Nayak54776052010-02-22 22:09:39 -07001771static struct clk i2c4_fck = {
1772 .name = "i2c4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001773 .ops = &clkops_omap2_dflt,
1774 .enable_reg = OMAP4430_CM_L4PER_I2C4_CLKCTRL,
1775 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1776 .clkdm_name = "l4_per_clkdm",
1777 .parent = &func_96m_fclk,
1778 .recalc = &followparent_recalc,
1779};
1780
Rajendra Nayak54776052010-02-22 22:09:39 -07001781static struct clk iss_fck = {
1782 .name = "iss_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001783 .ops = &clkops_omap2_dflt,
1784 .enable_reg = OMAP4430_CM_CAM_ISS_CLKCTRL,
1785 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1786 .clkdm_name = "iss_clkdm",
1787 .parent = &ducati_clk_mux_ck,
1788 .recalc = &followparent_recalc,
1789};
1790
Rajendra Nayak54776052010-02-22 22:09:39 -07001791static struct clk ivahd_ick = {
1792 .name = "ivahd_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001793 .ops = &clkops_omap2_dflt,
1794 .enable_reg = OMAP4430_CM_IVAHD_IVAHD_CLKCTRL,
1795 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1796 .clkdm_name = "ivahd_clkdm",
1797 .parent = &dpll_iva_m5_ck,
1798 .recalc = &followparent_recalc,
1799};
1800
Rajendra Nayak54776052010-02-22 22:09:39 -07001801static struct clk keyboard_fck = {
1802 .name = "keyboard_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001803 .ops = &clkops_omap2_dflt,
1804 .enable_reg = OMAP4430_CM_WKUP_KEYBOARD_CLKCTRL,
1805 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1806 .clkdm_name = "l4_wkup_clkdm",
1807 .parent = &sys_32k_ck,
1808 .recalc = &followparent_recalc,
1809};
1810
Rajendra Nayak54776052010-02-22 22:09:39 -07001811static struct clk l3_instr_interconnect_ick = {
1812 .name = "l3_instr_interconnect_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001813 .ops = &clkops_omap2_dflt,
1814 .enable_reg = OMAP4430_CM_L3INSTR_L3_INSTR_CLKCTRL,
1815 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1816 .clkdm_name = "l3_instr_clkdm",
1817 .parent = &l3_div_ck,
1818 .recalc = &followparent_recalc,
1819};
1820
Rajendra Nayak54776052010-02-22 22:09:39 -07001821static struct clk l3_interconnect_3_ick = {
1822 .name = "l3_interconnect_3_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001823 .ops = &clkops_omap2_dflt,
1824 .enable_reg = OMAP4430_CM_L3INSTR_L3_3_CLKCTRL,
1825 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
1826 .clkdm_name = "l3_instr_clkdm",
1827 .parent = &l3_div_ck,
1828 .recalc = &followparent_recalc,
1829};
1830
1831static struct clk mcasp_sync_mux_ck = {
1832 .name = "mcasp_sync_mux_ck",
1833 .parent = &abe_24m_fclk,
1834 .clksel = dmic_sync_mux_sel,
1835 .init = &omap2_init_clksel_parent,
1836 .clksel_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1837 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1838 .ops = &clkops_null,
1839 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001840};
1841
1842static const struct clksel func_mcasp_abe_gfclk_sel[] = {
1843 { .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
1844 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1845 { .parent = &slimbus_clk, .rates = div_1_2_rates },
1846 { .parent = NULL },
1847};
1848
Rajendra Nayak54776052010-02-22 22:09:39 -07001849/* Merged func_mcasp_abe_gfclk into mcasp */
1850static struct clk mcasp_fck = {
1851 .name = "mcasp_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001852 .parent = &mcasp_sync_mux_ck,
1853 .clksel = func_mcasp_abe_gfclk_sel,
1854 .init = &omap2_init_clksel_parent,
1855 .clksel_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1856 .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1857 .ops = &clkops_omap2_dflt,
1858 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001859 .enable_reg = OMAP4430_CM1_ABE_MCASP_CLKCTRL,
1860 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1861 .clkdm_name = "abe_clkdm",
1862};
1863
1864static struct clk mcbsp1_sync_mux_ck = {
1865 .name = "mcbsp1_sync_mux_ck",
1866 .parent = &abe_24m_fclk,
1867 .clksel = dmic_sync_mux_sel,
1868 .init = &omap2_init_clksel_parent,
1869 .clksel_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1870 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1871 .ops = &clkops_null,
1872 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001873};
1874
1875static const struct clksel func_mcbsp1_gfclk_sel[] = {
1876 { .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
1877 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1878 { .parent = &slimbus_clk, .rates = div_1_2_rates },
1879 { .parent = NULL },
1880};
1881
Rajendra Nayak54776052010-02-22 22:09:39 -07001882/* Merged func_mcbsp1_gfclk into mcbsp1 */
1883static struct clk mcbsp1_fck = {
1884 .name = "mcbsp1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001885 .parent = &mcbsp1_sync_mux_ck,
1886 .clksel = func_mcbsp1_gfclk_sel,
1887 .init = &omap2_init_clksel_parent,
1888 .clksel_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1889 .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1890 .ops = &clkops_omap2_dflt,
1891 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001892 .enable_reg = OMAP4430_CM1_ABE_MCBSP1_CLKCTRL,
1893 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1894 .clkdm_name = "abe_clkdm",
1895};
1896
1897static struct clk mcbsp2_sync_mux_ck = {
1898 .name = "mcbsp2_sync_mux_ck",
1899 .parent = &abe_24m_fclk,
1900 .clksel = dmic_sync_mux_sel,
1901 .init = &omap2_init_clksel_parent,
1902 .clksel_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1903 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1904 .ops = &clkops_null,
1905 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001906};
1907
1908static const struct clksel func_mcbsp2_gfclk_sel[] = {
1909 { .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
1910 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1911 { .parent = &slimbus_clk, .rates = div_1_2_rates },
1912 { .parent = NULL },
1913};
1914
Rajendra Nayak54776052010-02-22 22:09:39 -07001915/* Merged func_mcbsp2_gfclk into mcbsp2 */
1916static struct clk mcbsp2_fck = {
1917 .name = "mcbsp2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001918 .parent = &mcbsp2_sync_mux_ck,
1919 .clksel = func_mcbsp2_gfclk_sel,
1920 .init = &omap2_init_clksel_parent,
1921 .clksel_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1922 .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1923 .ops = &clkops_omap2_dflt,
1924 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001925 .enable_reg = OMAP4430_CM1_ABE_MCBSP2_CLKCTRL,
1926 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1927 .clkdm_name = "abe_clkdm",
1928};
1929
1930static struct clk mcbsp3_sync_mux_ck = {
1931 .name = "mcbsp3_sync_mux_ck",
1932 .parent = &abe_24m_fclk,
1933 .clksel = dmic_sync_mux_sel,
1934 .init = &omap2_init_clksel_parent,
1935 .clksel_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1936 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1937 .ops = &clkops_null,
1938 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001939};
1940
1941static const struct clksel func_mcbsp3_gfclk_sel[] = {
1942 { .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
1943 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1944 { .parent = &slimbus_clk, .rates = div_1_2_rates },
1945 { .parent = NULL },
1946};
1947
Rajendra Nayak54776052010-02-22 22:09:39 -07001948/* Merged func_mcbsp3_gfclk into mcbsp3 */
1949static struct clk mcbsp3_fck = {
1950 .name = "mcbsp3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001951 .parent = &mcbsp3_sync_mux_ck,
1952 .clksel = func_mcbsp3_gfclk_sel,
1953 .init = &omap2_init_clksel_parent,
1954 .clksel_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1955 .clksel_mask = OMAP4430_CLKSEL_SOURCE_MASK,
1956 .ops = &clkops_omap2_dflt,
1957 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001958 .enable_reg = OMAP4430_CM1_ABE_MCBSP3_CLKCTRL,
1959 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1960 .clkdm_name = "abe_clkdm",
1961};
1962
1963static struct clk mcbsp4_sync_mux_ck = {
1964 .name = "mcbsp4_sync_mux_ck",
1965 .parent = &func_96m_fclk,
1966 .clksel = mcasp2_fclk_sel,
1967 .init = &omap2_init_clksel_parent,
1968 .clksel_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1969 .clksel_mask = OMAP4430_CLKSEL_INTERNAL_SOURCE_MASK,
1970 .ops = &clkops_null,
1971 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001972};
1973
1974static const struct clksel per_mcbsp4_gfclk_sel[] = {
1975 { .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
1976 { .parent = &pad_clks_ck, .rates = div_1_1_rates },
1977 { .parent = NULL },
1978};
1979
Rajendra Nayak54776052010-02-22 22:09:39 -07001980/* Merged per_mcbsp4_gfclk into mcbsp4 */
1981static struct clk mcbsp4_fck = {
1982 .name = "mcbsp4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001983 .parent = &mcbsp4_sync_mux_ck,
1984 .clksel = per_mcbsp4_gfclk_sel,
1985 .init = &omap2_init_clksel_parent,
1986 .clksel_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1987 .clksel_mask = OMAP4430_CLKSEL_SOURCE_24_24_MASK,
1988 .ops = &clkops_omap2_dflt,
1989 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07001990 .enable_reg = OMAP4430_CM_L4PER_MCBSP4_CLKCTRL,
1991 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
1992 .clkdm_name = "l4_per_clkdm",
1993};
1994
Rajendra Nayak54776052010-02-22 22:09:39 -07001995static struct clk mcspi1_fck = {
1996 .name = "mcspi1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07001997 .ops = &clkops_omap2_dflt,
1998 .enable_reg = OMAP4430_CM_L4PER_MCSPI1_CLKCTRL,
1999 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2000 .clkdm_name = "l4_per_clkdm",
2001 .parent = &func_48m_fclk,
2002 .recalc = &followparent_recalc,
2003};
2004
Rajendra Nayak54776052010-02-22 22:09:39 -07002005static struct clk mcspi2_fck = {
2006 .name = "mcspi2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002007 .ops = &clkops_omap2_dflt,
2008 .enable_reg = OMAP4430_CM_L4PER_MCSPI2_CLKCTRL,
2009 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2010 .clkdm_name = "l4_per_clkdm",
2011 .parent = &func_48m_fclk,
2012 .recalc = &followparent_recalc,
2013};
2014
Rajendra Nayak54776052010-02-22 22:09:39 -07002015static struct clk mcspi3_fck = {
2016 .name = "mcspi3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002017 .ops = &clkops_omap2_dflt,
2018 .enable_reg = OMAP4430_CM_L4PER_MCSPI3_CLKCTRL,
2019 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2020 .clkdm_name = "l4_per_clkdm",
2021 .parent = &func_48m_fclk,
2022 .recalc = &followparent_recalc,
2023};
2024
Rajendra Nayak54776052010-02-22 22:09:39 -07002025static struct clk mcspi4_fck = {
2026 .name = "mcspi4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002027 .ops = &clkops_omap2_dflt,
2028 .enable_reg = OMAP4430_CM_L4PER_MCSPI4_CLKCTRL,
2029 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2030 .clkdm_name = "l4_per_clkdm",
2031 .parent = &func_48m_fclk,
2032 .recalc = &followparent_recalc,
2033};
2034
Rajendra Nayak54776052010-02-22 22:09:39 -07002035/* Merged hsmmc1_fclk into mmc1 */
2036static struct clk mmc1_fck = {
2037 .name = "mmc1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002038 .parent = &func_64m_fclk,
2039 .clksel = hsmmc6_fclk_sel,
2040 .init = &omap2_init_clksel_parent,
2041 .clksel_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
2042 .clksel_mask = OMAP4430_CLKSEL_MASK,
2043 .ops = &clkops_omap2_dflt,
2044 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002045 .enable_reg = OMAP4430_CM_L3INIT_MMC1_CLKCTRL,
2046 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2047 .clkdm_name = "l3_init_clkdm",
2048};
2049
Rajendra Nayak54776052010-02-22 22:09:39 -07002050/* Merged hsmmc2_fclk into mmc2 */
2051static struct clk mmc2_fck = {
2052 .name = "mmc2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002053 .parent = &func_64m_fclk,
2054 .clksel = hsmmc6_fclk_sel,
2055 .init = &omap2_init_clksel_parent,
2056 .clksel_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
2057 .clksel_mask = OMAP4430_CLKSEL_MASK,
2058 .ops = &clkops_omap2_dflt,
2059 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002060 .enable_reg = OMAP4430_CM_L3INIT_MMC2_CLKCTRL,
2061 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2062 .clkdm_name = "l3_init_clkdm",
2063};
2064
Rajendra Nayak54776052010-02-22 22:09:39 -07002065static struct clk mmc3_fck = {
2066 .name = "mmc3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002067 .ops = &clkops_omap2_dflt,
2068 .enable_reg = OMAP4430_CM_L4PER_MMCSD3_CLKCTRL,
2069 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2070 .clkdm_name = "l4_per_clkdm",
2071 .parent = &func_48m_fclk,
2072 .recalc = &followparent_recalc,
2073};
2074
Rajendra Nayak54776052010-02-22 22:09:39 -07002075static struct clk mmc4_fck = {
2076 .name = "mmc4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002077 .ops = &clkops_omap2_dflt,
2078 .enable_reg = OMAP4430_CM_L4PER_MMCSD4_CLKCTRL,
2079 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2080 .clkdm_name = "l4_per_clkdm",
2081 .parent = &func_48m_fclk,
2082 .recalc = &followparent_recalc,
2083};
2084
Rajendra Nayak54776052010-02-22 22:09:39 -07002085static struct clk mmc5_fck = {
2086 .name = "mmc5_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002087 .ops = &clkops_omap2_dflt,
2088 .enable_reg = OMAP4430_CM_L4PER_MMCSD5_CLKCTRL,
2089 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2090 .clkdm_name = "l4_per_clkdm",
2091 .parent = &func_48m_fclk,
2092 .recalc = &followparent_recalc,
2093};
2094
Rajendra Nayak54776052010-02-22 22:09:39 -07002095static struct clk ocp_wp1_ick = {
2096 .name = "ocp_wp1_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002097 .ops = &clkops_omap2_dflt,
2098 .enable_reg = OMAP4430_CM_L3INSTR_OCP_WP1_CLKCTRL,
2099 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2100 .clkdm_name = "l3_instr_clkdm",
2101 .parent = &l3_div_ck,
2102 .recalc = &followparent_recalc,
2103};
2104
Rajendra Nayak54776052010-02-22 22:09:39 -07002105static struct clk pdm_fck = {
2106 .name = "pdm_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002107 .ops = &clkops_omap2_dflt,
2108 .enable_reg = OMAP4430_CM1_ABE_PDM_CLKCTRL,
2109 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2110 .clkdm_name = "abe_clkdm",
2111 .parent = &pad_clks_ck,
2112 .recalc = &followparent_recalc,
2113};
2114
Rajendra Nayak54776052010-02-22 22:09:39 -07002115static struct clk pkaeip29_fck = {
2116 .name = "pkaeip29_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002117 .ops = &clkops_omap2_dflt,
2118 .enable_reg = OMAP4430_CM_L4SEC_PKAEIP29_CLKCTRL,
2119 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2120 .clkdm_name = "l4_secure_clkdm",
2121 .parent = &l4_div_ck,
2122 .recalc = &followparent_recalc,
2123};
2124
Rajendra Nayak54776052010-02-22 22:09:39 -07002125static struct clk rng_ick = {
2126 .name = "rng_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002127 .ops = &clkops_omap2_dflt,
2128 .enable_reg = OMAP4430_CM_L4SEC_RNG_CLKCTRL,
2129 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2130 .clkdm_name = "l4_secure_clkdm",
2131 .parent = &l4_div_ck,
2132 .recalc = &followparent_recalc,
2133};
2134
Rajendra Nayak54776052010-02-22 22:09:39 -07002135static struct clk sha2md51_fck = {
2136 .name = "sha2md51_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002137 .ops = &clkops_omap2_dflt,
2138 .enable_reg = OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL,
2139 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2140 .clkdm_name = "l4_secure_clkdm",
2141 .parent = &l3_div_ck,
2142 .recalc = &followparent_recalc,
2143};
2144
Rajendra Nayak54776052010-02-22 22:09:39 -07002145static struct clk sl2_ick = {
2146 .name = "sl2_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002147 .ops = &clkops_omap2_dflt,
2148 .enable_reg = OMAP4430_CM_IVAHD_SL2_CLKCTRL,
2149 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2150 .clkdm_name = "ivahd_clkdm",
2151 .parent = &dpll_iva_m5_ck,
2152 .recalc = &followparent_recalc,
2153};
2154
Rajendra Nayak54776052010-02-22 22:09:39 -07002155static struct clk slimbus1_fck = {
2156 .name = "slimbus1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002157 .ops = &clkops_omap2_dflt,
2158 .enable_reg = OMAP4430_CM1_ABE_SLIMBUS_CLKCTRL,
2159 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2160 .clkdm_name = "abe_clkdm",
2161 .parent = &ocp_abe_iclk,
2162 .recalc = &followparent_recalc,
2163};
2164
Rajendra Nayak54776052010-02-22 22:09:39 -07002165static struct clk slimbus2_fck = {
2166 .name = "slimbus2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002167 .ops = &clkops_omap2_dflt,
2168 .enable_reg = OMAP4430_CM_L4PER_SLIMBUS2_CLKCTRL,
2169 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2170 .clkdm_name = "l4_per_clkdm",
2171 .parent = &l4_div_ck,
2172 .recalc = &followparent_recalc,
2173};
2174
Rajendra Nayak54776052010-02-22 22:09:39 -07002175static struct clk sr_core_fck = {
2176 .name = "sr_core_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002177 .ops = &clkops_omap2_dflt,
2178 .enable_reg = OMAP4430_CM_ALWON_SR_CORE_CLKCTRL,
2179 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2180 .clkdm_name = "l4_ao_clkdm",
2181 .parent = &l4_wkup_clk_mux_ck,
2182 .recalc = &followparent_recalc,
2183};
2184
Rajendra Nayak54776052010-02-22 22:09:39 -07002185static struct clk sr_iva_fck = {
2186 .name = "sr_iva_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002187 .ops = &clkops_omap2_dflt,
2188 .enable_reg = OMAP4430_CM_ALWON_SR_IVA_CLKCTRL,
2189 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2190 .clkdm_name = "l4_ao_clkdm",
2191 .parent = &l4_wkup_clk_mux_ck,
2192 .recalc = &followparent_recalc,
2193};
2194
Rajendra Nayak54776052010-02-22 22:09:39 -07002195static struct clk sr_mpu_fck = {
2196 .name = "sr_mpu_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002197 .ops = &clkops_omap2_dflt,
2198 .enable_reg = OMAP4430_CM_ALWON_SR_MPU_CLKCTRL,
2199 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2200 .clkdm_name = "l4_ao_clkdm",
2201 .parent = &l4_wkup_clk_mux_ck,
2202 .recalc = &followparent_recalc,
2203};
2204
Rajendra Nayak54776052010-02-22 22:09:39 -07002205static struct clk tesla_ick = {
2206 .name = "tesla_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002207 .ops = &clkops_omap2_dflt,
2208 .enable_reg = OMAP4430_CM_TESLA_TESLA_CLKCTRL,
2209 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2210 .clkdm_name = "tesla_clkdm",
2211 .parent = &dpll_iva_m4_ck,
2212 .recalc = &followparent_recalc,
2213};
2214
Rajendra Nayak54776052010-02-22 22:09:39 -07002215static struct clk uart1_fck = {
2216 .name = "uart1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002217 .ops = &clkops_omap2_dflt,
2218 .enable_reg = OMAP4430_CM_L4PER_UART1_CLKCTRL,
2219 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2220 .clkdm_name = "l4_per_clkdm",
2221 .parent = &func_48m_fclk,
2222 .recalc = &followparent_recalc,
2223};
2224
Rajendra Nayak54776052010-02-22 22:09:39 -07002225static struct clk uart2_fck = {
2226 .name = "uart2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002227 .ops = &clkops_omap2_dflt,
2228 .enable_reg = OMAP4430_CM_L4PER_UART2_CLKCTRL,
2229 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2230 .clkdm_name = "l4_per_clkdm",
2231 .parent = &func_48m_fclk,
2232 .recalc = &followparent_recalc,
2233};
2234
Rajendra Nayak54776052010-02-22 22:09:39 -07002235static struct clk uart3_fck = {
2236 .name = "uart3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002237 .ops = &clkops_omap2_dflt,
2238 .enable_reg = OMAP4430_CM_L4PER_UART3_CLKCTRL,
2239 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2240 .clkdm_name = "l4_per_clkdm",
2241 .parent = &func_48m_fclk,
2242 .recalc = &followparent_recalc,
2243};
2244
Rajendra Nayak54776052010-02-22 22:09:39 -07002245static struct clk uart4_fck = {
2246 .name = "uart4_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002247 .ops = &clkops_omap2_dflt,
2248 .enable_reg = OMAP4430_CM_L4PER_UART4_CLKCTRL,
2249 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2250 .clkdm_name = "l4_per_clkdm",
2251 .parent = &func_48m_fclk,
2252 .recalc = &followparent_recalc,
2253};
2254
Rajendra Nayak54776052010-02-22 22:09:39 -07002255static struct clk unipro1_fck = {
2256 .name = "unipro1_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002257 .ops = &clkops_omap2_dflt,
2258 .enable_reg = OMAP4430_CM_L3INIT_UNIPRO1_CLKCTRL,
2259 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2260 .clkdm_name = "l3_init_clkdm",
2261 .parent = &func_96m_fclk,
2262 .recalc = &followparent_recalc,
2263};
2264
Rajendra Nayak54776052010-02-22 22:09:39 -07002265static struct clk usb_host_fck = {
2266 .name = "usb_host_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002267 .ops = &clkops_omap2_dflt,
2268 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2269 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2270 .clkdm_name = "l3_init_clkdm",
2271 .parent = &init_60m_fclk,
2272 .recalc = &followparent_recalc,
2273};
2274
Rajendra Nayak54776052010-02-22 22:09:39 -07002275static struct clk usb_host_fs_fck = {
2276 .name = "usb_host_fs_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002277 .ops = &clkops_omap2_dflt,
2278 .enable_reg = OMAP4430_CM_L3INIT_USB_HOST_FS_CLKCTRL,
2279 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2280 .clkdm_name = "l3_init_clkdm",
2281 .parent = &func_48mc_fclk,
2282 .recalc = &followparent_recalc,
2283};
2284
Rajendra Nayak54776052010-02-22 22:09:39 -07002285static struct clk usb_otg_ick = {
2286 .name = "usb_otg_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002287 .ops = &clkops_omap2_dflt,
2288 .enable_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2289 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2290 .clkdm_name = "l3_init_clkdm",
2291 .parent = &l3_div_ck,
2292 .recalc = &followparent_recalc,
2293};
2294
Rajendra Nayak54776052010-02-22 22:09:39 -07002295static struct clk usb_tll_ick = {
2296 .name = "usb_tll_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002297 .ops = &clkops_omap2_dflt,
2298 .enable_reg = OMAP4430_CM_L3INIT_USB_TLL_CLKCTRL,
2299 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
2300 .clkdm_name = "l3_init_clkdm",
2301 .parent = &l4_div_ck,
2302 .recalc = &followparent_recalc,
2303};
2304
Rajendra Nayak76cf5292010-09-27 14:02:54 -06002305static struct clk usim_ick = {
2306 .name = "usim_ick",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002307 .ops = &clkops_omap2_dflt,
2308 .enable_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
Rajendra Nayak76cf5292010-09-27 14:02:54 -06002309 .enable_bit = OMAP4430_MODULEMODE_HWCTRL,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002310 .clkdm_name = "l4_wkup_clkdm",
2311 .parent = &sys_32k_ck,
2312 .recalc = &followparent_recalc,
2313};
2314
Rajendra Nayak54776052010-02-22 22:09:39 -07002315static struct clk wdt2_fck = {
2316 .name = "wdt2_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002317 .ops = &clkops_omap2_dflt,
2318 .enable_reg = OMAP4430_CM_WKUP_WDT2_CLKCTRL,
2319 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2320 .clkdm_name = "l4_wkup_clkdm",
2321 .parent = &sys_32k_ck,
2322 .recalc = &followparent_recalc,
2323};
2324
Rajendra Nayak54776052010-02-22 22:09:39 -07002325static struct clk wdt3_fck = {
2326 .name = "wdt3_fck",
Rajendra Nayak972c5422009-12-08 18:46:28 -07002327 .ops = &clkops_omap2_dflt,
2328 .enable_reg = OMAP4430_CM1_ABE_WDT3_CLKCTRL,
2329 .enable_bit = OMAP4430_MODULEMODE_SWCTRL,
2330 .clkdm_name = "abe_clkdm",
2331 .parent = &sys_32k_ck,
2332 .recalc = &followparent_recalc,
2333};
2334
2335/* Remaining optional clocks */
2336static const struct clksel otg_60m_gfclk_sel[] = {
2337 { .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
2338 { .parent = &xclk60motg_ck, .rates = div_1_1_rates },
2339 { .parent = NULL },
2340};
2341
2342static struct clk otg_60m_gfclk_ck = {
2343 .name = "otg_60m_gfclk_ck",
2344 .parent = &utmi_phy_clkout_ck,
2345 .clksel = otg_60m_gfclk_sel,
2346 .init = &omap2_init_clksel_parent,
2347 .clksel_reg = OMAP4430_CM_L3INIT_USB_OTG_CLKCTRL,
2348 .clksel_mask = OMAP4430_CLKSEL_60M_MASK,
2349 .ops = &clkops_null,
2350 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002351};
2352
2353static const struct clksel stm_clk_div_div[] = {
2354 { .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
2355 { .parent = NULL },
2356};
2357
2358static struct clk stm_clk_div_ck = {
2359 .name = "stm_clk_div_ck",
2360 .parent = &pmd_stm_clock_mux_ck,
2361 .clksel = stm_clk_div_div,
2362 .clksel_reg = OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
2363 .clksel_mask = OMAP4430_CLKSEL_PMD_STM_CLK_MASK,
2364 .ops = &clkops_null,
2365 .recalc = &omap2_clksel_recalc,
2366 .round_rate = &omap2_clksel_round_rate,
2367 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002368};
2369
2370static const struct clksel trace_clk_div_div[] = {
2371 { .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
2372 { .parent = NULL },
2373};
2374
2375static struct clk trace_clk_div_ck = {
2376 .name = "trace_clk_div_ck",
2377 .parent = &pmd_trace_clk_mux_ck,
2378 .clksel = trace_clk_div_div,
2379 .clksel_reg = OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
2380 .clksel_mask = OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK,
2381 .ops = &clkops_null,
2382 .recalc = &omap2_clksel_recalc,
2383 .round_rate = &omap2_clksel_round_rate,
2384 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002385};
2386
2387static const struct clksel_rate div2_14to18_rates[] = {
2388 { .div = 14, .val = 0, .flags = RATE_IN_4430 },
2389 { .div = 18, .val = 1, .flags = RATE_IN_4430 },
2390 { .div = 0 },
2391};
2392
2393static const struct clksel usim_fclk_div[] = {
2394 { .parent = &dpll_per_m4_ck, .rates = div2_14to18_rates },
2395 { .parent = NULL },
2396};
2397
2398static struct clk usim_fclk = {
2399 .name = "usim_fclk",
2400 .parent = &dpll_per_m4_ck,
2401 .clksel = usim_fclk_div,
2402 .clksel_reg = OMAP4430_CM_WKUP_USIM_CLKCTRL,
2403 .clksel_mask = OMAP4430_CLKSEL_DIV_MASK,
2404 .ops = &clkops_null,
2405 .recalc = &omap2_clksel_recalc,
2406 .round_rate = &omap2_clksel_round_rate,
2407 .set_rate = &omap2_clksel_set_rate,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002408};
2409
2410static const struct clksel utmi_p1_gfclk_sel[] = {
2411 { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2412 { .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
2413 { .parent = NULL },
2414};
2415
2416static struct clk utmi_p1_gfclk_ck = {
2417 .name = "utmi_p1_gfclk_ck",
2418 .parent = &init_60m_fclk,
2419 .clksel = utmi_p1_gfclk_sel,
2420 .init = &omap2_init_clksel_parent,
2421 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2422 .clksel_mask = OMAP4430_CLKSEL_UTMI_P1_MASK,
2423 .ops = &clkops_null,
2424 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002425};
2426
2427static const struct clksel utmi_p2_gfclk_sel[] = {
2428 { .parent = &init_60m_fclk, .rates = div_1_0_rates },
2429 { .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
2430 { .parent = NULL },
2431};
2432
2433static struct clk utmi_p2_gfclk_ck = {
2434 .name = "utmi_p2_gfclk_ck",
2435 .parent = &init_60m_fclk,
2436 .clksel = utmi_p2_gfclk_sel,
2437 .init = &omap2_init_clksel_parent,
2438 .clksel_reg = OMAP4430_CM_L3INIT_USB_HOST_CLKCTRL,
2439 .clksel_mask = OMAP4430_CLKSEL_UTMI_P2_MASK,
2440 .ops = &clkops_null,
2441 .recalc = &omap2_clksel_recalc,
Rajendra Nayak972c5422009-12-08 18:46:28 -07002442};
2443
2444/*
2445 * clkdev
2446 */
2447
2448static struct omap_clk omap44xx_clks[] = {
2449 CLK(NULL, "extalt_clkin_ck", &extalt_clkin_ck, CK_443X),
2450 CLK(NULL, "pad_clks_ck", &pad_clks_ck, CK_443X),
2451 CLK(NULL, "pad_slimbus_core_clks_ck", &pad_slimbus_core_clks_ck, CK_443X),
2452 CLK(NULL, "secure_32k_clk_src_ck", &secure_32k_clk_src_ck, CK_443X),
2453 CLK(NULL, "slimbus_clk", &slimbus_clk, CK_443X),
2454 CLK(NULL, "sys_32k_ck", &sys_32k_ck, CK_443X),
2455 CLK(NULL, "virt_12000000_ck", &virt_12000000_ck, CK_443X),
2456 CLK(NULL, "virt_13000000_ck", &virt_13000000_ck, CK_443X),
2457 CLK(NULL, "virt_16800000_ck", &virt_16800000_ck, CK_443X),
2458 CLK(NULL, "virt_19200000_ck", &virt_19200000_ck, CK_443X),
2459 CLK(NULL, "virt_26000000_ck", &virt_26000000_ck, CK_443X),
2460 CLK(NULL, "virt_27000000_ck", &virt_27000000_ck, CK_443X),
2461 CLK(NULL, "virt_38400000_ck", &virt_38400000_ck, CK_443X),
2462 CLK(NULL, "sys_clkin_ck", &sys_clkin_ck, CK_443X),
Rajendra Nayak76cf5292010-09-27 14:02:54 -06002463 CLK(NULL, "tie_low_clock_ck", &tie_low_clock_ck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002464 CLK(NULL, "utmi_phy_clkout_ck", &utmi_phy_clkout_ck, CK_443X),
2465 CLK(NULL, "xclk60mhsp1_ck", &xclk60mhsp1_ck, CK_443X),
2466 CLK(NULL, "xclk60mhsp2_ck", &xclk60mhsp2_ck, CK_443X),
2467 CLK(NULL, "xclk60motg_ck", &xclk60motg_ck, CK_443X),
Rajendra Nayak76cf5292010-09-27 14:02:54 -06002468 CLK(NULL, "abe_dpll_bypass_clk_mux_ck", &abe_dpll_bypass_clk_mux_ck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002469 CLK(NULL, "abe_dpll_refclk_mux_ck", &abe_dpll_refclk_mux_ck, CK_443X),
2470 CLK(NULL, "dpll_abe_ck", &dpll_abe_ck, CK_443X),
2471 CLK(NULL, "dpll_abe_m2x2_ck", &dpll_abe_m2x2_ck, CK_443X),
2472 CLK(NULL, "abe_24m_fclk", &abe_24m_fclk, CK_443X),
2473 CLK(NULL, "abe_clk", &abe_clk, CK_443X),
2474 CLK(NULL, "aess_fclk", &aess_fclk, CK_443X),
2475 CLK(NULL, "dpll_abe_m3_ck", &dpll_abe_m3_ck, CK_443X),
2476 CLK(NULL, "core_hsd_byp_clk_mux_ck", &core_hsd_byp_clk_mux_ck, CK_443X),
2477 CLK(NULL, "dpll_core_ck", &dpll_core_ck, CK_443X),
2478 CLK(NULL, "dpll_core_m6_ck", &dpll_core_m6_ck, CK_443X),
2479 CLK(NULL, "dbgclk_mux_ck", &dbgclk_mux_ck, CK_443X),
2480 CLK(NULL, "dpll_core_m2_ck", &dpll_core_m2_ck, CK_443X),
2481 CLK(NULL, "ddrphy_ck", &ddrphy_ck, CK_443X),
2482 CLK(NULL, "dpll_core_m5_ck", &dpll_core_m5_ck, CK_443X),
2483 CLK(NULL, "div_core_ck", &div_core_ck, CK_443X),
2484 CLK(NULL, "div_iva_hs_clk", &div_iva_hs_clk, CK_443X),
2485 CLK(NULL, "div_mpu_hs_clk", &div_mpu_hs_clk, CK_443X),
2486 CLK(NULL, "dpll_core_m4_ck", &dpll_core_m4_ck, CK_443X),
2487 CLK(NULL, "dll_clk_div_ck", &dll_clk_div_ck, CK_443X),
2488 CLK(NULL, "dpll_abe_m2_ck", &dpll_abe_m2_ck, CK_443X),
2489 CLK(NULL, "dpll_core_m3_ck", &dpll_core_m3_ck, CK_443X),
2490 CLK(NULL, "dpll_core_m7_ck", &dpll_core_m7_ck, CK_443X),
2491 CLK(NULL, "iva_hsd_byp_clk_mux_ck", &iva_hsd_byp_clk_mux_ck, CK_443X),
2492 CLK(NULL, "dpll_iva_ck", &dpll_iva_ck, CK_443X),
2493 CLK(NULL, "dpll_iva_m4_ck", &dpll_iva_m4_ck, CK_443X),
2494 CLK(NULL, "dpll_iva_m5_ck", &dpll_iva_m5_ck, CK_443X),
2495 CLK(NULL, "dpll_mpu_ck", &dpll_mpu_ck, CK_443X),
2496 CLK(NULL, "dpll_mpu_m2_ck", &dpll_mpu_m2_ck, CK_443X),
2497 CLK(NULL, "per_hs_clk_div_ck", &per_hs_clk_div_ck, CK_443X),
2498 CLK(NULL, "per_hsd_byp_clk_mux_ck", &per_hsd_byp_clk_mux_ck, CK_443X),
2499 CLK(NULL, "dpll_per_ck", &dpll_per_ck, CK_443X),
2500 CLK(NULL, "dpll_per_m2_ck", &dpll_per_m2_ck, CK_443X),
2501 CLK(NULL, "dpll_per_m2x2_ck", &dpll_per_m2x2_ck, CK_443X),
2502 CLK(NULL, "dpll_per_m3_ck", &dpll_per_m3_ck, CK_443X),
2503 CLK(NULL, "dpll_per_m4_ck", &dpll_per_m4_ck, CK_443X),
2504 CLK(NULL, "dpll_per_m5_ck", &dpll_per_m5_ck, CK_443X),
2505 CLK(NULL, "dpll_per_m6_ck", &dpll_per_m6_ck, CK_443X),
2506 CLK(NULL, "dpll_per_m7_ck", &dpll_per_m7_ck, CK_443X),
2507 CLK(NULL, "dpll_unipro_ck", &dpll_unipro_ck, CK_443X),
2508 CLK(NULL, "dpll_unipro_m2x2_ck", &dpll_unipro_m2x2_ck, CK_443X),
2509 CLK(NULL, "usb_hs_clk_div_ck", &usb_hs_clk_div_ck, CK_443X),
2510 CLK(NULL, "dpll_usb_ck", &dpll_usb_ck, CK_443X),
2511 CLK(NULL, "dpll_usb_clkdcoldo_ck", &dpll_usb_clkdcoldo_ck, CK_443X),
2512 CLK(NULL, "dpll_usb_m2_ck", &dpll_usb_m2_ck, CK_443X),
2513 CLK(NULL, "ducati_clk_mux_ck", &ducati_clk_mux_ck, CK_443X),
2514 CLK(NULL, "func_12m_fclk", &func_12m_fclk, CK_443X),
2515 CLK(NULL, "func_24m_clk", &func_24m_clk, CK_443X),
2516 CLK(NULL, "func_24mc_fclk", &func_24mc_fclk, CK_443X),
2517 CLK(NULL, "func_48m_fclk", &func_48m_fclk, CK_443X),
2518 CLK(NULL, "func_48mc_fclk", &func_48mc_fclk, CK_443X),
2519 CLK(NULL, "func_64m_fclk", &func_64m_fclk, CK_443X),
2520 CLK(NULL, "func_96m_fclk", &func_96m_fclk, CK_443X),
2521 CLK(NULL, "hsmmc6_fclk", &hsmmc6_fclk, CK_443X),
2522 CLK(NULL, "init_60m_fclk", &init_60m_fclk, CK_443X),
2523 CLK(NULL, "l3_div_ck", &l3_div_ck, CK_443X),
2524 CLK(NULL, "l4_div_ck", &l4_div_ck, CK_443X),
2525 CLK(NULL, "lp_clk_div_ck", &lp_clk_div_ck, CK_443X),
2526 CLK(NULL, "l4_wkup_clk_mux_ck", &l4_wkup_clk_mux_ck, CK_443X),
2527 CLK(NULL, "per_abe_nc_fclk", &per_abe_nc_fclk, CK_443X),
2528 CLK(NULL, "mcasp2_fclk", &mcasp2_fclk, CK_443X),
2529 CLK(NULL, "mcasp3_fclk", &mcasp3_fclk, CK_443X),
2530 CLK(NULL, "ocp_abe_iclk", &ocp_abe_iclk, CK_443X),
2531 CLK(NULL, "per_abe_24m_fclk", &per_abe_24m_fclk, CK_443X),
2532 CLK(NULL, "pmd_stm_clock_mux_ck", &pmd_stm_clock_mux_ck, CK_443X),
2533 CLK(NULL, "pmd_trace_clk_mux_ck", &pmd_trace_clk_mux_ck, CK_443X),
2534 CLK(NULL, "syc_clk_div_ck", &syc_clk_div_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002535 CLK(NULL, "aes1_fck", &aes1_fck, CK_443X),
2536 CLK(NULL, "aes2_fck", &aes2_fck, CK_443X),
2537 CLK(NULL, "aess_fck", &aess_fck, CK_443X),
2538 CLK(NULL, "cust_efuse_fck", &cust_efuse_fck, CK_443X),
2539 CLK(NULL, "des3des_fck", &des3des_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002540 CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002541 CLK(NULL, "dmic_fck", &dmic_fck, CK_443X),
2542 CLK(NULL, "dss_fck", &dss_fck, CK_443X),
2543 CLK(NULL, "ducati_ick", &ducati_ick, CK_443X),
2544 CLK(NULL, "emif1_ick", &emif1_ick, CK_443X),
2545 CLK(NULL, "emif2_ick", &emif2_ick, CK_443X),
2546 CLK(NULL, "fdif_fck", &fdif_fck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002547 CLK(NULL, "gfx_fck", &gfx_fck, CK_443X),
2548 CLK(NULL, "gpio1_ick", &gpio1_ick, CK_443X),
2549 CLK(NULL, "gpio2_ick", &gpio2_ick, CK_443X),
2550 CLK(NULL, "gpio3_ick", &gpio3_ick, CK_443X),
2551 CLK(NULL, "gpio4_ick", &gpio4_ick, CK_443X),
2552 CLK(NULL, "gpio5_ick", &gpio5_ick, CK_443X),
2553 CLK(NULL, "gpio6_ick", &gpio6_ick, CK_443X),
2554 CLK(NULL, "gpmc_ick", &gpmc_ick, CK_443X),
2555 CLK(NULL, "gpt1_fck", &gpt1_fck, CK_443X),
2556 CLK(NULL, "gpt10_fck", &gpt10_fck, CK_443X),
2557 CLK(NULL, "gpt11_fck", &gpt11_fck, CK_443X),
2558 CLK(NULL, "gpt2_fck", &gpt2_fck, CK_443X),
2559 CLK(NULL, "gpt3_fck", &gpt3_fck, CK_443X),
2560 CLK(NULL, "gpt4_fck", &gpt4_fck, CK_443X),
2561 CLK(NULL, "gpt5_fck", &gpt5_fck, CK_443X),
2562 CLK(NULL, "gpt6_fck", &gpt6_fck, CK_443X),
2563 CLK(NULL, "gpt7_fck", &gpt7_fck, CK_443X),
2564 CLK(NULL, "gpt8_fck", &gpt8_fck, CK_443X),
2565 CLK(NULL, "gpt9_fck", &gpt9_fck, CK_443X),
2566 CLK("omap2_hdq.0", "fck", &hdq1w_fck, CK_443X),
2567 CLK(NULL, "hsi_ick", &hsi_ick, CK_443X),
2568 CLK("i2c_omap.1", "fck", &i2c1_fck, CK_443X),
2569 CLK("i2c_omap.2", "fck", &i2c2_fck, CK_443X),
2570 CLK("i2c_omap.3", "fck", &i2c3_fck, CK_443X),
2571 CLK("i2c_omap.4", "fck", &i2c4_fck, CK_443X),
2572 CLK(NULL, "iss_fck", &iss_fck, CK_443X),
2573 CLK(NULL, "ivahd_ick", &ivahd_ick, CK_443X),
2574 CLK(NULL, "keyboard_fck", &keyboard_fck, CK_443X),
2575 CLK(NULL, "l3_instr_interconnect_ick", &l3_instr_interconnect_ick, CK_443X),
2576 CLK(NULL, "l3_interconnect_3_ick", &l3_interconnect_3_ick, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002577 CLK(NULL, "mcasp_sync_mux_ck", &mcasp_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002578 CLK(NULL, "mcasp_fck", &mcasp_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002579 CLK(NULL, "mcbsp1_sync_mux_ck", &mcbsp1_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002580 CLK("omap-mcbsp.1", "fck", &mcbsp1_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002581 CLK(NULL, "mcbsp2_sync_mux_ck", &mcbsp2_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002582 CLK("omap-mcbsp.2", "fck", &mcbsp2_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002583 CLK(NULL, "mcbsp3_sync_mux_ck", &mcbsp3_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002584 CLK("omap-mcbsp.3", "fck", &mcbsp3_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002585 CLK(NULL, "mcbsp4_sync_mux_ck", &mcbsp4_sync_mux_ck, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002586 CLK("omap-mcbsp.4", "fck", &mcbsp4_fck, CK_443X),
2587 CLK("omap2_mcspi.1", "fck", &mcspi1_fck, CK_443X),
2588 CLK("omap2_mcspi.2", "fck", &mcspi2_fck, CK_443X),
2589 CLK("omap2_mcspi.3", "fck", &mcspi3_fck, CK_443X),
2590 CLK("omap2_mcspi.4", "fck", &mcspi4_fck, CK_443X),
2591 CLK("mmci-omap-hs.0", "fck", &mmc1_fck, CK_443X),
2592 CLK("mmci-omap-hs.1", "fck", &mmc2_fck, CK_443X),
2593 CLK("mmci-omap-hs.2", "fck", &mmc3_fck, CK_443X),
2594 CLK("mmci-omap-hs.3", "fck", &mmc4_fck, CK_443X),
2595 CLK("mmci-omap-hs.4", "fck", &mmc5_fck, CK_443X),
2596 CLK(NULL, "ocp_wp1_ick", &ocp_wp1_ick, CK_443X),
2597 CLK(NULL, "pdm_fck", &pdm_fck, CK_443X),
2598 CLK(NULL, "pkaeip29_fck", &pkaeip29_fck, CK_443X),
2599 CLK("omap_rng", "ick", &rng_ick, CK_443X),
2600 CLK(NULL, "sha2md51_fck", &sha2md51_fck, CK_443X),
2601 CLK(NULL, "sl2_ick", &sl2_ick, CK_443X),
2602 CLK(NULL, "slimbus1_fck", &slimbus1_fck, CK_443X),
2603 CLK(NULL, "slimbus2_fck", &slimbus2_fck, CK_443X),
2604 CLK(NULL, "sr_core_fck", &sr_core_fck, CK_443X),
2605 CLK(NULL, "sr_iva_fck", &sr_iva_fck, CK_443X),
2606 CLK(NULL, "sr_mpu_fck", &sr_mpu_fck, CK_443X),
2607 CLK(NULL, "tesla_ick", &tesla_ick, CK_443X),
2608 CLK(NULL, "uart1_fck", &uart1_fck, CK_443X),
2609 CLK(NULL, "uart2_fck", &uart2_fck, CK_443X),
2610 CLK(NULL, "uart3_fck", &uart3_fck, CK_443X),
2611 CLK(NULL, "uart4_fck", &uart4_fck, CK_443X),
2612 CLK(NULL, "unipro1_fck", &unipro1_fck, CK_443X),
2613 CLK(NULL, "usb_host_fck", &usb_host_fck, CK_443X),
2614 CLK(NULL, "usb_host_fs_fck", &usb_host_fs_fck, CK_443X),
2615 CLK("musb_hdrc", "ick", &usb_otg_ick, CK_443X),
2616 CLK(NULL, "usb_tll_ick", &usb_tll_ick, CK_443X),
Rajendra Nayak76cf5292010-09-27 14:02:54 -06002617 CLK(NULL, "usim_ick", &usim_ick, CK_443X),
Rajendra Nayak54776052010-02-22 22:09:39 -07002618 CLK("omap_wdt", "fck", &wdt2_fck, CK_443X),
2619 CLK(NULL, "wdt3_fck", &wdt3_fck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002620 CLK(NULL, "otg_60m_gfclk_ck", &otg_60m_gfclk_ck, CK_443X),
2621 CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X),
2622 CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X),
2623 CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
2624 CLK(NULL, "utmi_p1_gfclk_ck", &utmi_p1_gfclk_ck, CK_443X),
2625 CLK(NULL, "utmi_p2_gfclk_ck", &utmi_p2_gfclk_ck, CK_443X),
Santosh Shilimkar7c43d542010-02-22 22:09:40 -07002626 CLK(NULL, "gpio1_dbck", &dummy_ck, CK_443X),
2627 CLK(NULL, "gpio2_dbck", &dummy_ck, CK_443X),
2628 CLK(NULL, "gpio3_dbck", &dummy_ck, CK_443X),
2629 CLK(NULL, "gpio4_dbck", &dummy_ck, CK_443X),
2630 CLK(NULL, "gpio5_dbck", &dummy_ck, CK_443X),
2631 CLK(NULL, "gpio6_dbck", &dummy_ck, CK_443X),
2632 CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X),
2633 CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X),
2634 CLK(NULL, "gpt2_ick", &dummy_ck, CK_443X),
2635 CLK(NULL, "gpt3_ick", &dummy_ck, CK_443X),
2636 CLK(NULL, "gpt4_ick", &dummy_ck, CK_443X),
2637 CLK(NULL, "gpt5_ick", &dummy_ck, CK_443X),
2638 CLK(NULL, "gpt6_ick", &dummy_ck, CK_443X),
2639 CLK(NULL, "gpt7_ick", &dummy_ck, CK_443X),
2640 CLK(NULL, "gpt8_ick", &dummy_ck, CK_443X),
2641 CLK(NULL, "gpt9_ick", &dummy_ck, CK_443X),
2642 CLK(NULL, "gpt10_ick", &dummy_ck, CK_443X),
2643 CLK(NULL, "gpt11_ick", &dummy_ck, CK_443X),
2644 CLK("i2c_omap.1", "ick", &dummy_ck, CK_443X),
2645 CLK("i2c_omap.2", "ick", &dummy_ck, CK_443X),
2646 CLK("i2c_omap.3", "ick", &dummy_ck, CK_443X),
2647 CLK("i2c_omap.4", "ick", &dummy_ck, CK_443X),
2648 CLK("omap-mcbsp.1", "ick", &dummy_ck, CK_443X),
2649 CLK("omap-mcbsp.2", "ick", &dummy_ck, CK_443X),
2650 CLK("omap-mcbsp.3", "ick", &dummy_ck, CK_443X),
2651 CLK("omap-mcbsp.4", "ick", &dummy_ck, CK_443X),
Abraham Arcec83348102010-04-22 14:42:15 +00002652 CLK("omap2_mcspi.1", "ick", &dummy_ck, CK_443X),
2653 CLK("omap2_mcspi.2", "ick", &dummy_ck, CK_443X),
2654 CLK("omap2_mcspi.3", "ick", &dummy_ck, CK_443X),
2655 CLK("omap2_mcspi.4", "ick", &dummy_ck, CK_443X),
kishore kadiyala2c9d1032010-05-04 16:01:45 +00002656 CLK("mmci-omap-hs.0", "ick", &dummy_ck, CK_443X),
2657 CLK("mmci-omap-hs.1", "ick", &dummy_ck, CK_443X),
2658 CLK("mmci-omap-hs.2", "ick", &dummy_ck, CK_443X),
2659 CLK("mmci-omap-hs.3", "ick", &dummy_ck, CK_443X),
2660 CLK("mmci-omap-hs.4", "ick", &dummy_ck, CK_443X),
Santosh Shilimkar7c43d542010-02-22 22:09:40 -07002661 CLK(NULL, "uart1_ick", &dummy_ck, CK_443X),
2662 CLK(NULL, "uart2_ick", &dummy_ck, CK_443X),
2663 CLK(NULL, "uart3_ick", &dummy_ck, CK_443X),
2664 CLK(NULL, "uart4_ick", &dummy_ck, CK_443X),
2665 CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
Rajendra Nayak972c5422009-12-08 18:46:28 -07002666};
2667
Paul Walmsleye80a9722010-01-26 20:13:12 -07002668int __init omap4xxx_clk_init(void)
Rajendra Nayak972c5422009-12-08 18:46:28 -07002669{
Rajendra Nayak972c5422009-12-08 18:46:28 -07002670 struct omap_clk *c;
Rajendra Nayak972c5422009-12-08 18:46:28 -07002671 u32 cpu_clkflg;
2672
2673 if (cpu_is_omap44xx()) {
2674 cpu_mask = RATE_IN_4430;
2675 cpu_clkflg = CK_443X;
2676 }
2677
2678 clk_init(&omap2_clk_functions);
2679
2680 for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks);
2681 c++)
2682 clk_preinit(c->lk.clk);
2683
2684 for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks);
2685 c++)
2686 if (c->cpu & cpu_clkflg) {
2687 clkdev_add(&c->lk);
2688 clk_register(c->lk.clk);
Rajendra Nayak972c5422009-12-08 18:46:28 -07002689 omap2_init_clk_clkdm(c->lk.clk);
Rajendra Nayak972c5422009-12-08 18:46:28 -07002690 }
2691
2692 recalculate_root_clocks();
2693
2694 /*
2695 * Only enable those clocks we will need, let the drivers
2696 * enable other clocks as necessary
2697 */
2698 clk_enable_init_clocks();
2699
2700 return 0;
2701}