blob: 681acf0427c1fb667d22bd3c7d90b09cebdc99cb [file] [log] [blame]
Paul Walmsleyb045d082008-03-18 11:24:28 +02001/*
2 * OMAP3 clock framework
3 *
4 * Copyright (C) 2007-2008 Texas Instruments, Inc.
5 * Copyright (C) 2007-2008 Nokia Corporation
6 *
7 * Written by Paul Walmsley
Paul Walmsley542313c2008-07-03 12:24:45 +03008 * With many device clock fixes by Kevin Hilman and Jouni Högander
9 * DPLL bypass clock support added by Roman Tereshonkov
10 *
11 */
12
13/*
14 * Virtual clocks are introduced as convenient tools.
15 * They are sources for other clocks and not supposed
16 * to be requested from drivers directly.
Paul Walmsleyb045d082008-03-18 11:24:28 +020017 */
18
19#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
20#define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
21
Russell Kinga09e64f2008-08-05 16:14:15 +010022#include <mach/control.h>
Paul Walmsleyb045d082008-03-18 11:24:28 +020023
24#include "clock.h"
25#include "cm.h"
26#include "cm-regbits-34xx.h"
27#include "prm.h"
28#include "prm-regbits-34xx.h"
29
30static void omap3_dpll_recalc(struct clk *clk);
31static void omap3_clkoutx2_recalc(struct clk *clk);
Paul Walmsley542313c2008-07-03 12:24:45 +030032static void omap3_dpll_allow_idle(struct clk *clk);
33static void omap3_dpll_deny_idle(struct clk *clk);
34static u32 omap3_dpll_autoidle_read(struct clk *clk);
Paul Walmsley16c90f02009-01-27 19:12:47 -070035static int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate);
36static int omap3_dpll4_set_rate(struct clk *clk, unsigned long rate);
Paul Walmsley0eafd472009-01-28 12:27:42 -070037static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate);
Paul Walmsleyb045d082008-03-18 11:24:28 +020038
Paul Walmsley88b8ba92008-07-03 12:24:46 +030039/* Maximum DPLL multiplier, divider values for OMAP3 */
40#define OMAP3_MAX_DPLL_MULT 2048
41#define OMAP3_MAX_DPLL_DIV 128
42
Paul Walmsleyb045d082008-03-18 11:24:28 +020043/*
44 * DPLL1 supplies clock to the MPU.
45 * DPLL2 supplies clock to the IVA2.
46 * DPLL3 supplies CORE domain clocks.
47 * DPLL4 supplies peripheral clocks.
48 * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
49 */
50
Paul Walmsley542313c2008-07-03 12:24:45 +030051/* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */
52#define DPLL_LOW_POWER_STOP 0x1
53#define DPLL_LOW_POWER_BYPASS 0x5
54#define DPLL_LOCKED 0x7
55
Paul Walmsleyb045d082008-03-18 11:24:28 +020056/* PRM CLOCKS */
57
58/* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */
59static struct clk omap_32k_fck = {
60 .name = "omap_32k_fck",
Russell King897dcde2008-11-04 16:35:03 +000061 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020062 .rate = 32768,
Russell King44dc9d02009-01-19 15:51:11 +000063 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +020064};
65
66static struct clk secure_32k_fck = {
67 .name = "secure_32k_fck",
Russell King897dcde2008-11-04 16:35:03 +000068 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020069 .rate = 32768,
Russell King44dc9d02009-01-19 15:51:11 +000070 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +020071};
72
73/* Virtual source clocks for osc_sys_ck */
74static struct clk virt_12m_ck = {
75 .name = "virt_12m_ck",
Russell King897dcde2008-11-04 16:35:03 +000076 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020077 .rate = 12000000,
Russell King44dc9d02009-01-19 15:51:11 +000078 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +020079};
80
81static struct clk virt_13m_ck = {
82 .name = "virt_13m_ck",
Russell King897dcde2008-11-04 16:35:03 +000083 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020084 .rate = 13000000,
Russell King44dc9d02009-01-19 15:51:11 +000085 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +020086};
87
88static struct clk virt_16_8m_ck = {
89 .name = "virt_16_8m_ck",
Russell King897dcde2008-11-04 16:35:03 +000090 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020091 .rate = 16800000,
Russell King44dc9d02009-01-19 15:51:11 +000092 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +020093};
94
95static struct clk virt_19_2m_ck = {
96 .name = "virt_19_2m_ck",
Russell King897dcde2008-11-04 16:35:03 +000097 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +020098 .rate = 19200000,
Russell King44dc9d02009-01-19 15:51:11 +000099 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200100};
101
102static struct clk virt_26m_ck = {
103 .name = "virt_26m_ck",
Russell King897dcde2008-11-04 16:35:03 +0000104 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200105 .rate = 26000000,
Russell King44dc9d02009-01-19 15:51:11 +0000106 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200107};
108
109static struct clk virt_38_4m_ck = {
110 .name = "virt_38_4m_ck",
Russell King897dcde2008-11-04 16:35:03 +0000111 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200112 .rate = 38400000,
Russell King44dc9d02009-01-19 15:51:11 +0000113 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200114};
115
116static const struct clksel_rate osc_sys_12m_rates[] = {
117 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
118 { .div = 0 }
119};
120
121static const struct clksel_rate osc_sys_13m_rates[] = {
122 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
123 { .div = 0 }
124};
125
126static const struct clksel_rate osc_sys_16_8m_rates[] = {
127 { .div = 1, .val = 5, .flags = RATE_IN_3430ES2 | DEFAULT_RATE },
128 { .div = 0 }
129};
130
131static const struct clksel_rate osc_sys_19_2m_rates[] = {
132 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
133 { .div = 0 }
134};
135
136static const struct clksel_rate osc_sys_26m_rates[] = {
137 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
138 { .div = 0 }
139};
140
141static const struct clksel_rate osc_sys_38_4m_rates[] = {
142 { .div = 1, .val = 4, .flags = RATE_IN_343X | DEFAULT_RATE },
143 { .div = 0 }
144};
145
146static const struct clksel osc_sys_clksel[] = {
147 { .parent = &virt_12m_ck, .rates = osc_sys_12m_rates },
148 { .parent = &virt_13m_ck, .rates = osc_sys_13m_rates },
149 { .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
150 { .parent = &virt_19_2m_ck, .rates = osc_sys_19_2m_rates },
151 { .parent = &virt_26m_ck, .rates = osc_sys_26m_rates },
152 { .parent = &virt_38_4m_ck, .rates = osc_sys_38_4m_rates },
153 { .parent = NULL },
154};
155
156/* Oscillator clock */
157/* 12, 13, 16.8, 19.2, 26, or 38.4 MHz */
158static struct clk osc_sys_ck = {
159 .name = "osc_sys_ck",
Russell King897dcde2008-11-04 16:35:03 +0000160 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200161 .init = &omap2_init_clksel_parent,
162 .clksel_reg = OMAP3430_PRM_CLKSEL,
163 .clksel_mask = OMAP3430_SYS_CLKIN_SEL_MASK,
164 .clksel = osc_sys_clksel,
165 /* REVISIT: deal with autoextclkmode? */
Russell King44dc9d02009-01-19 15:51:11 +0000166 .flags = RATE_FIXED | RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200167 .recalc = &omap2_clksel_recalc,
168};
169
170static const struct clksel_rate div2_rates[] = {
171 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
172 { .div = 2, .val = 2, .flags = RATE_IN_343X },
173 { .div = 0 }
174};
175
176static const struct clksel sys_clksel[] = {
177 { .parent = &osc_sys_ck, .rates = div2_rates },
178 { .parent = NULL }
179};
180
181/* Latency: this clock is only enabled after PRM_CLKSETUP.SETUP_TIME */
182/* Feeds DPLLs - divided first by PRM_CLKSRC_CTRL.SYSCLKDIV? */
183static struct clk sys_ck = {
184 .name = "sys_ck",
Russell King897dcde2008-11-04 16:35:03 +0000185 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200186 .parent = &osc_sys_ck,
187 .init = &omap2_init_clksel_parent,
188 .clksel_reg = OMAP3430_PRM_CLKSRC_CTRL,
189 .clksel_mask = OMAP_SYSCLKDIV_MASK,
190 .clksel = sys_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000191 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200192 .recalc = &omap2_clksel_recalc,
193};
194
195static struct clk sys_altclk = {
196 .name = "sys_altclk",
Russell King897dcde2008-11-04 16:35:03 +0000197 .ops = &clkops_null,
Russell King44dc9d02009-01-19 15:51:11 +0000198 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200199};
200
201/* Optional external clock input for some McBSPs */
202static struct clk mcbsp_clks = {
203 .name = "mcbsp_clks",
Russell King897dcde2008-11-04 16:35:03 +0000204 .ops = &clkops_null,
Russell King44dc9d02009-01-19 15:51:11 +0000205 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200206};
207
208/* PRM EXTERNAL CLOCK OUTPUT */
209
210static struct clk sys_clkout1 = {
211 .name = "sys_clkout1",
Russell Kingc1168dc2008-11-04 21:24:00 +0000212 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200213 .parent = &osc_sys_ck,
214 .enable_reg = OMAP3430_PRM_CLKOUT_CTRL,
215 .enable_bit = OMAP3430_CLKOUT_EN_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200216 .recalc = &followparent_recalc,
217};
218
219/* DPLLS */
220
221/* CM CLOCKS */
222
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200223static const struct clksel_rate dpll_bypass_rates[] = {
224 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
225 { .div = 0 }
Paul Walmsleyb045d082008-03-18 11:24:28 +0200226};
227
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200228static const struct clksel_rate dpll_locked_rates[] = {
229 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
230 { .div = 0 }
Paul Walmsleyb045d082008-03-18 11:24:28 +0200231};
232
233static const struct clksel_rate div16_dpll_rates[] = {
234 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
235 { .div = 2, .val = 2, .flags = RATE_IN_343X },
236 { .div = 3, .val = 3, .flags = RATE_IN_343X },
237 { .div = 4, .val = 4, .flags = RATE_IN_343X },
238 { .div = 5, .val = 5, .flags = RATE_IN_343X },
239 { .div = 6, .val = 6, .flags = RATE_IN_343X },
240 { .div = 7, .val = 7, .flags = RATE_IN_343X },
241 { .div = 8, .val = 8, .flags = RATE_IN_343X },
242 { .div = 9, .val = 9, .flags = RATE_IN_343X },
243 { .div = 10, .val = 10, .flags = RATE_IN_343X },
244 { .div = 11, .val = 11, .flags = RATE_IN_343X },
245 { .div = 12, .val = 12, .flags = RATE_IN_343X },
246 { .div = 13, .val = 13, .flags = RATE_IN_343X },
247 { .div = 14, .val = 14, .flags = RATE_IN_343X },
248 { .div = 15, .val = 15, .flags = RATE_IN_343X },
249 { .div = 16, .val = 16, .flags = RATE_IN_343X },
250 { .div = 0 }
251};
252
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200253/* DPLL1 */
254/* MPU clock source */
255/* Type: DPLL */
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300256static struct dpll_data dpll1_dd = {
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200257 .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
258 .mult_mask = OMAP3430_MPU_DPLL_MULT_MASK,
259 .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700260 .freqsel_mask = OMAP3430_MPU_DPLL_FREQSEL_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200261 .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
262 .enable_mask = OMAP3430_EN_MPU_DPLL_MASK,
Paul Walmsley542313c2008-07-03 12:24:45 +0300263 .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200264 .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT,
265 .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT,
266 .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT,
Paul Walmsley542313c2008-07-03 12:24:45 +0300267 .autoidle_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_AUTOIDLE_PLL),
268 .autoidle_mask = OMAP3430_AUTO_MPU_DPLL_MASK,
269 .idlest_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
Paul Walmsleyc1bd7aa2009-01-28 12:08:17 -0700270 .idlest_mask = OMAP3430_ST_MPU_CLK_MASK,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300271 .max_multiplier = OMAP3_MAX_DPLL_MULT,
Paul Walmsley95f538a2009-01-28 12:08:44 -0700272 .min_divider = 1,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300273 .max_divider = OMAP3_MAX_DPLL_DIV,
274 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200275};
276
277static struct clk dpll1_ck = {
278 .name = "dpll1_ck",
Russell King897dcde2008-11-04 16:35:03 +0000279 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200280 .parent = &sys_ck,
281 .dpll_data = &dpll1_dd,
Russell King44dc9d02009-01-19 15:51:11 +0000282 .flags = RATE_PROPAGATES,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300283 .round_rate = &omap2_dpll_round_rate,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700284 .set_rate = &omap3_noncore_dpll_set_rate,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700285 .clkdm_name = "dpll1_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200286 .recalc = &omap3_dpll_recalc,
287};
288
289/*
290 * This virtual clock provides the CLKOUTX2 output from the DPLL if the
291 * DPLL isn't bypassed.
292 */
293static struct clk dpll1_x2_ck = {
294 .name = "dpll1_x2_ck",
Russell King57137182008-11-04 16:48:35 +0000295 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200296 .parent = &dpll1_ck,
Russell King44dc9d02009-01-19 15:51:11 +0000297 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700298 .clkdm_name = "dpll1_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200299 .recalc = &omap3_clkoutx2_recalc,
300};
301
302/* On DPLL1, unlike other DPLLs, the divider is downstream from CLKOUTX2 */
303static const struct clksel div16_dpll1_x2m2_clksel[] = {
304 { .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
305 { .parent = NULL }
306};
307
308/*
309 * Does not exist in the TRM - needed to separate the M2 divider from
310 * bypass selection in mpu_ck
311 */
312static struct clk dpll1_x2m2_ck = {
313 .name = "dpll1_x2m2_ck",
Russell King57137182008-11-04 16:48:35 +0000314 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200315 .parent = &dpll1_x2_ck,
316 .init = &omap2_init_clksel_parent,
317 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL),
318 .clksel_mask = OMAP3430_MPU_DPLL_CLKOUT_DIV_MASK,
319 .clksel = div16_dpll1_x2m2_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000320 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700321 .clkdm_name = "dpll1_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200322 .recalc = &omap2_clksel_recalc,
323};
324
325/* DPLL2 */
326/* IVA2 clock source */
327/* Type: DPLL */
328
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300329static struct dpll_data dpll2_dd = {
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200330 .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
331 .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK,
332 .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700333 .freqsel_mask = OMAP3430_IVA2_DPLL_FREQSEL_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200334 .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
335 .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK,
Paul Walmsley542313c2008-07-03 12:24:45 +0300336 .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED) |
337 (1 << DPLL_LOW_POWER_BYPASS),
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200338 .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT,
339 .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT,
340 .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT,
Paul Walmsley542313c2008-07-03 12:24:45 +0300341 .autoidle_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL),
342 .autoidle_mask = OMAP3430_AUTO_IVA2_DPLL_MASK,
343 .idlest_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_IDLEST_PLL),
Paul Walmsleyc1bd7aa2009-01-28 12:08:17 -0700344 .idlest_mask = OMAP3430_ST_IVA2_CLK_MASK,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300345 .max_multiplier = OMAP3_MAX_DPLL_MULT,
Paul Walmsley95f538a2009-01-28 12:08:44 -0700346 .min_divider = 1,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300347 .max_divider = OMAP3_MAX_DPLL_DIV,
348 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200349};
350
351static struct clk dpll2_ck = {
352 .name = "dpll2_ck",
Russell King548d8492008-11-04 14:02:46 +0000353 .ops = &clkops_noncore_dpll_ops,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200354 .parent = &sys_ck,
355 .dpll_data = &dpll2_dd,
Russell King44dc9d02009-01-19 15:51:11 +0000356 .flags = RATE_PROPAGATES,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300357 .round_rate = &omap2_dpll_round_rate,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700358 .set_rate = &omap3_noncore_dpll_set_rate,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700359 .clkdm_name = "dpll2_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200360 .recalc = &omap3_dpll_recalc,
361};
362
363static const struct clksel div16_dpll2_m2x2_clksel[] = {
364 { .parent = &dpll2_ck, .rates = div16_dpll_rates },
365 { .parent = NULL }
366};
367
368/*
369 * The TRM is conflicted on whether IVA2 clock comes from DPLL2 CLKOUT
370 * or CLKOUTX2. CLKOUT seems most plausible.
371 */
372static struct clk dpll2_m2_ck = {
373 .name = "dpll2_m2_ck",
Russell King57137182008-11-04 16:48:35 +0000374 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200375 .parent = &dpll2_ck,
376 .init = &omap2_init_clksel_parent,
377 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
378 OMAP3430_CM_CLKSEL2_PLL),
379 .clksel_mask = OMAP3430_IVA2_DPLL_CLKOUT_DIV_MASK,
380 .clksel = div16_dpll2_m2x2_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000381 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700382 .clkdm_name = "dpll2_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200383 .recalc = &omap2_clksel_recalc,
384};
385
Paul Walmsley542313c2008-07-03 12:24:45 +0300386/*
387 * DPLL3
388 * Source clock for all interfaces and for some device fclks
389 * REVISIT: Also supports fast relock bypass - not included below
390 */
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300391static struct dpll_data dpll3_dd = {
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200392 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
393 .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK,
394 .div1_mask = OMAP3430_CORE_DPLL_DIV_MASK,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700395 .freqsel_mask = OMAP3430_CORE_DPLL_FREQSEL_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200396 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
397 .enable_mask = OMAP3430_EN_CORE_DPLL_MASK,
398 .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT,
399 .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT,
400 .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT,
Paul Walmsley542313c2008-07-03 12:24:45 +0300401 .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE),
402 .autoidle_mask = OMAP3430_AUTO_CORE_DPLL_MASK,
Paul Walmsleyc1bd7aa2009-01-28 12:08:17 -0700403 .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
404 .idlest_mask = OMAP3430_ST_CORE_CLK_MASK,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300405 .max_multiplier = OMAP3_MAX_DPLL_MULT,
Paul Walmsley95f538a2009-01-28 12:08:44 -0700406 .min_divider = 1,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300407 .max_divider = OMAP3_MAX_DPLL_DIV,
408 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200409};
410
411static struct clk dpll3_ck = {
412 .name = "dpll3_ck",
Russell King897dcde2008-11-04 16:35:03 +0000413 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200414 .parent = &sys_ck,
415 .dpll_data = &dpll3_dd,
Russell King44dc9d02009-01-19 15:51:11 +0000416 .flags = RATE_PROPAGATES,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300417 .round_rate = &omap2_dpll_round_rate,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700418 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200419 .recalc = &omap3_dpll_recalc,
420};
421
422/*
423 * This virtual clock provides the CLKOUTX2 output from the DPLL if the
424 * DPLL isn't bypassed
425 */
426static struct clk dpll3_x2_ck = {
427 .name = "dpll3_x2_ck",
Russell King57137182008-11-04 16:48:35 +0000428 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200429 .parent = &dpll3_ck,
Russell King44dc9d02009-01-19 15:51:11 +0000430 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700431 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200432 .recalc = &omap3_clkoutx2_recalc,
433};
434
Paul Walmsleyb045d082008-03-18 11:24:28 +0200435static const struct clksel_rate div31_dpll3_rates[] = {
436 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
437 { .div = 2, .val = 2, .flags = RATE_IN_343X },
438 { .div = 3, .val = 3, .flags = RATE_IN_3430ES2 },
439 { .div = 4, .val = 4, .flags = RATE_IN_3430ES2 },
440 { .div = 5, .val = 5, .flags = RATE_IN_3430ES2 },
441 { .div = 6, .val = 6, .flags = RATE_IN_3430ES2 },
442 { .div = 7, .val = 7, .flags = RATE_IN_3430ES2 },
443 { .div = 8, .val = 8, .flags = RATE_IN_3430ES2 },
444 { .div = 9, .val = 9, .flags = RATE_IN_3430ES2 },
445 { .div = 10, .val = 10, .flags = RATE_IN_3430ES2 },
446 { .div = 11, .val = 11, .flags = RATE_IN_3430ES2 },
447 { .div = 12, .val = 12, .flags = RATE_IN_3430ES2 },
448 { .div = 13, .val = 13, .flags = RATE_IN_3430ES2 },
449 { .div = 14, .val = 14, .flags = RATE_IN_3430ES2 },
450 { .div = 15, .val = 15, .flags = RATE_IN_3430ES2 },
451 { .div = 16, .val = 16, .flags = RATE_IN_3430ES2 },
452 { .div = 17, .val = 17, .flags = RATE_IN_3430ES2 },
453 { .div = 18, .val = 18, .flags = RATE_IN_3430ES2 },
454 { .div = 19, .val = 19, .flags = RATE_IN_3430ES2 },
455 { .div = 20, .val = 20, .flags = RATE_IN_3430ES2 },
456 { .div = 21, .val = 21, .flags = RATE_IN_3430ES2 },
457 { .div = 22, .val = 22, .flags = RATE_IN_3430ES2 },
458 { .div = 23, .val = 23, .flags = RATE_IN_3430ES2 },
459 { .div = 24, .val = 24, .flags = RATE_IN_3430ES2 },
460 { .div = 25, .val = 25, .flags = RATE_IN_3430ES2 },
461 { .div = 26, .val = 26, .flags = RATE_IN_3430ES2 },
462 { .div = 27, .val = 27, .flags = RATE_IN_3430ES2 },
463 { .div = 28, .val = 28, .flags = RATE_IN_3430ES2 },
464 { .div = 29, .val = 29, .flags = RATE_IN_3430ES2 },
465 { .div = 30, .val = 30, .flags = RATE_IN_3430ES2 },
466 { .div = 31, .val = 31, .flags = RATE_IN_3430ES2 },
467 { .div = 0 },
468};
469
470static const struct clksel div31_dpll3m2_clksel[] = {
471 { .parent = &dpll3_ck, .rates = div31_dpll3_rates },
472 { .parent = NULL }
473};
474
Paul Walmsley0eafd472009-01-28 12:27:42 -0700475/* DPLL3 output M2 - primary control point for CORE speed */
Paul Walmsleyb045d082008-03-18 11:24:28 +0200476static struct clk dpll3_m2_ck = {
477 .name = "dpll3_m2_ck",
Russell King57137182008-11-04 16:48:35 +0000478 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200479 .parent = &dpll3_ck,
480 .init = &omap2_init_clksel_parent,
481 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
482 .clksel_mask = OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK,
483 .clksel = div31_dpll3m2_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000484 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700485 .clkdm_name = "dpll3_clkdm",
Paul Walmsley0eafd472009-01-28 12:27:42 -0700486 .round_rate = &omap2_clksel_round_rate,
487 .set_rate = &omap3_core_dpll_m2_set_rate,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200488 .recalc = &omap2_clksel_recalc,
489};
490
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200491static const struct clksel core_ck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300492 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200493 { .parent = &dpll3_m2_ck, .rates = dpll_locked_rates },
494 { .parent = NULL }
Paul Walmsleyb045d082008-03-18 11:24:28 +0200495};
496
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200497static struct clk core_ck = {
498 .name = "core_ck",
Russell King57137182008-11-04 16:48:35 +0000499 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200500 .init = &omap2_init_clksel_parent,
501 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +0300502 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200503 .clksel = core_ck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000504 .flags = RATE_PROPAGATES,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200505 .recalc = &omap2_clksel_recalc,
506};
507
508static const struct clksel dpll3_m2x2_ck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300509 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200510 { .parent = &dpll3_x2_ck, .rates = dpll_locked_rates },
511 { .parent = NULL }
Paul Walmsleyb045d082008-03-18 11:24:28 +0200512};
513
514static struct clk dpll3_m2x2_ck = {
515 .name = "dpll3_m2x2_ck",
Russell King57137182008-11-04 16:48:35 +0000516 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200517 .init = &omap2_init_clksel_parent,
518 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +0300519 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200520 .clksel = dpll3_m2x2_ck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000521 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700522 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200523 .recalc = &omap2_clksel_recalc,
524};
525
526/* The PWRDN bit is apparently only available on 3430ES2 and above */
527static const struct clksel div16_dpll3_clksel[] = {
528 { .parent = &dpll3_ck, .rates = div16_dpll_rates },
529 { .parent = NULL }
530};
531
532/* This virtual clock is the source for dpll3_m3x2_ck */
533static struct clk dpll3_m3_ck = {
534 .name = "dpll3_m3_ck",
Russell King57137182008-11-04 16:48:35 +0000535 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200536 .parent = &dpll3_ck,
537 .init = &omap2_init_clksel_parent,
538 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
539 .clksel_mask = OMAP3430_DIV_DPLL3_MASK,
540 .clksel = div16_dpll3_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000541 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700542 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200543 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200544};
545
546/* The PWRDN bit is apparently only available on 3430ES2 and above */
547static struct clk dpll3_m3x2_ck = {
548 .name = "dpll3_m3x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000549 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200550 .parent = &dpll3_m3_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200551 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
552 .enable_bit = OMAP3430_PWRDN_EMU_CORE_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000553 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700554 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200555 .recalc = &omap3_clkoutx2_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200556};
557
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200558static const struct clksel emu_core_alwon_ck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300559 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200560 { .parent = &dpll3_m3x2_ck, .rates = dpll_locked_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +0200561 { .parent = NULL }
562};
563
564static struct clk emu_core_alwon_ck = {
565 .name = "emu_core_alwon_ck",
Russell King57137182008-11-04 16:48:35 +0000566 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200567 .parent = &dpll3_m3x2_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200568 .init = &omap2_init_clksel_parent,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200569 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +0300570 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200571 .clksel = emu_core_alwon_ck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000572 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700573 .clkdm_name = "dpll3_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200574 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200575};
576
577/* DPLL4 */
578/* Supplies 96MHz, 54Mhz TV DAC, DSS fclk, CAM sensor clock, emul trace clk */
579/* Type: DPLL */
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300580static struct dpll_data dpll4_dd = {
Paul Walmsleyb045d082008-03-18 11:24:28 +0200581 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL2),
582 .mult_mask = OMAP3430_PERIPH_DPLL_MULT_MASK,
583 .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700584 .freqsel_mask = OMAP3430_PERIPH_DPLL_FREQSEL_MASK,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200585 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
586 .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK,
Paul Walmsley542313c2008-07-03 12:24:45 +0300587 .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED),
Paul Walmsleyb045d082008-03-18 11:24:28 +0200588 .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT,
589 .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT,
590 .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT,
Paul Walmsley542313c2008-07-03 12:24:45 +0300591 .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, CM_AUTOIDLE),
592 .autoidle_mask = OMAP3430_AUTO_PERIPH_DPLL_MASK,
593 .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsleyc1bd7aa2009-01-28 12:08:17 -0700594 .idlest_mask = OMAP3430_ST_PERIPH_CLK_MASK,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300595 .max_multiplier = OMAP3_MAX_DPLL_MULT,
Paul Walmsley95f538a2009-01-28 12:08:44 -0700596 .min_divider = 1,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300597 .max_divider = OMAP3_MAX_DPLL_DIV,
598 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
Paul Walmsleyb045d082008-03-18 11:24:28 +0200599};
600
601static struct clk dpll4_ck = {
602 .name = "dpll4_ck",
Russell King548d8492008-11-04 14:02:46 +0000603 .ops = &clkops_noncore_dpll_ops,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200604 .parent = &sys_ck,
605 .dpll_data = &dpll4_dd,
Russell King44dc9d02009-01-19 15:51:11 +0000606 .flags = RATE_PROPAGATES,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300607 .round_rate = &omap2_dpll_round_rate,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700608 .set_rate = &omap3_dpll4_set_rate,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700609 .clkdm_name = "dpll4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200610 .recalc = &omap3_dpll_recalc,
611};
612
613/*
614 * This virtual clock provides the CLKOUTX2 output from the DPLL if the
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200615 * DPLL isn't bypassed --
616 * XXX does this serve any downstream clocks?
Paul Walmsleyb045d082008-03-18 11:24:28 +0200617 */
618static struct clk dpll4_x2_ck = {
619 .name = "dpll4_x2_ck",
Russell King57137182008-11-04 16:48:35 +0000620 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200621 .parent = &dpll4_ck,
Russell King44dc9d02009-01-19 15:51:11 +0000622 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700623 .clkdm_name = "dpll4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200624 .recalc = &omap3_clkoutx2_recalc,
625};
626
627static const struct clksel div16_dpll4_clksel[] = {
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200628 { .parent = &dpll4_ck, .rates = div16_dpll_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +0200629 { .parent = NULL }
630};
631
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200632/* This virtual clock is the source for dpll4_m2x2_ck */
633static struct clk dpll4_m2_ck = {
634 .name = "dpll4_m2_ck",
Russell King57137182008-11-04 16:48:35 +0000635 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200636 .parent = &dpll4_ck,
637 .init = &omap2_init_clksel_parent,
638 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3),
639 .clksel_mask = OMAP3430_DIV_96M_MASK,
640 .clksel = div16_dpll4_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000641 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700642 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200643 .recalc = &omap2_clksel_recalc,
644};
645
Paul Walmsleyb045d082008-03-18 11:24:28 +0200646/* The PWRDN bit is apparently only available on 3430ES2 and above */
647static struct clk dpll4_m2x2_ck = {
648 .name = "dpll4_m2x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000649 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200650 .parent = &dpll4_m2_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200651 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
652 .enable_bit = OMAP3430_PWRDN_96M_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000653 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700654 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200655 .recalc = &omap3_clkoutx2_recalc,
656};
657
658static const struct clksel omap_96m_alwon_fck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300659 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200660 { .parent = &dpll4_m2x2_ck, .rates = dpll_locked_rates },
661 { .parent = NULL }
Paul Walmsleyb045d082008-03-18 11:24:28 +0200662};
663
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700664/*
665 * DPLL4 generates DPLL4_M2X2_CLK which is then routed into the PRM as
666 * PRM_96M_ALWON_(F)CLK. Two clocks then emerge from the PRM:
667 * 96M_ALWON_FCLK (called "omap_96m_alwon_fck" below) and
668 * CM_96K_(F)CLK.
669 */
Paul Walmsleyb045d082008-03-18 11:24:28 +0200670static struct clk omap_96m_alwon_fck = {
671 .name = "omap_96m_alwon_fck",
Russell King57137182008-11-04 16:48:35 +0000672 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200673 .parent = &dpll4_m2x2_ck,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200674 .init = &omap2_init_clksel_parent,
675 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +0300676 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200677 .clksel = omap_96m_alwon_fck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000678 .flags = RATE_PROPAGATES,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200679 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200680};
681
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700682static struct clk cm_96m_fck = {
683 .name = "cm_96m_fck",
Russell King57137182008-11-04 16:48:35 +0000684 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200685 .parent = &omap_96m_alwon_fck,
Russell King44dc9d02009-01-19 15:51:11 +0000686 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200687 .recalc = &followparent_recalc,
688};
689
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700690static const struct clksel_rate omap_96m_dpll_rates[] = {
691 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
692 { .div = 0 }
693};
694
695static const struct clksel_rate omap_96m_sys_rates[] = {
696 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
697 { .div = 0 }
698};
699
700static const struct clksel omap_96m_fck_clksel[] = {
701 { .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
702 { .parent = &sys_ck, .rates = omap_96m_sys_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200703 { .parent = NULL }
704};
705
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700706static struct clk omap_96m_fck = {
707 .name = "omap_96m_fck",
Russell King57137182008-11-04 16:48:35 +0000708 .ops = &clkops_null,
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700709 .parent = &sys_ck,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200710 .init = &omap2_init_clksel_parent,
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700711 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
712 .clksel_mask = OMAP3430_SOURCE_96M_MASK,
713 .clksel = omap_96m_fck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000714 .flags = RATE_PROPAGATES,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200715 .recalc = &omap2_clksel_recalc,
716};
717
718/* This virtual clock is the source for dpll4_m3x2_ck */
719static struct clk dpll4_m3_ck = {
720 .name = "dpll4_m3_ck",
Russell King57137182008-11-04 16:48:35 +0000721 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200722 .parent = &dpll4_ck,
723 .init = &omap2_init_clksel_parent,
724 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
725 .clksel_mask = OMAP3430_CLKSEL_TV_MASK,
726 .clksel = div16_dpll4_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000727 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700728 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200729 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200730};
731
732/* The PWRDN bit is apparently only available on 3430ES2 and above */
733static struct clk dpll4_m3x2_ck = {
734 .name = "dpll4_m3x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000735 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200736 .parent = &dpll4_m3_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200737 .init = &omap2_init_clksel_parent,
738 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
739 .enable_bit = OMAP3430_PWRDN_TV_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000740 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700741 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200742 .recalc = &omap3_clkoutx2_recalc,
743};
744
745static const struct clksel virt_omap_54m_fck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300746 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200747 { .parent = &dpll4_m3x2_ck, .rates = dpll_locked_rates },
748 { .parent = NULL }
749};
750
751static struct clk virt_omap_54m_fck = {
752 .name = "virt_omap_54m_fck",
Russell King57137182008-11-04 16:48:35 +0000753 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200754 .parent = &dpll4_m3x2_ck,
755 .init = &omap2_init_clksel_parent,
756 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +0300757 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200758 .clksel = virt_omap_54m_fck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000759 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200760 .recalc = &omap2_clksel_recalc,
761};
762
763static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
764 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
765 { .div = 0 }
766};
767
768static const struct clksel_rate omap_54m_alt_rates[] = {
769 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
770 { .div = 0 }
771};
772
773static const struct clksel omap_54m_clksel[] = {
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200774 { .parent = &virt_omap_54m_fck, .rates = omap_54m_d4m3x2_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +0200775 { .parent = &sys_altclk, .rates = omap_54m_alt_rates },
776 { .parent = NULL }
777};
778
779static struct clk omap_54m_fck = {
780 .name = "omap_54m_fck",
Russell King57137182008-11-04 16:48:35 +0000781 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200782 .init = &omap2_init_clksel_parent,
783 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700784 .clksel_mask = OMAP3430_SOURCE_54M_MASK,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200785 .clksel = omap_54m_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000786 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200787 .recalc = &omap2_clksel_recalc,
788};
789
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700790static const struct clksel_rate omap_48m_cm96m_rates[] = {
Paul Walmsleyb045d082008-03-18 11:24:28 +0200791 { .div = 2, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
792 { .div = 0 }
793};
794
795static const struct clksel_rate omap_48m_alt_rates[] = {
796 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
797 { .div = 0 }
798};
799
800static const struct clksel omap_48m_clksel[] = {
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700801 { .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +0200802 { .parent = &sys_altclk, .rates = omap_48m_alt_rates },
803 { .parent = NULL }
804};
805
806static struct clk omap_48m_fck = {
807 .name = "omap_48m_fck",
Russell King57137182008-11-04 16:48:35 +0000808 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200809 .init = &omap2_init_clksel_parent,
810 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
Paul Walmsley9cfd9852009-01-27 19:13:02 -0700811 .clksel_mask = OMAP3430_SOURCE_48M_MASK,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200812 .clksel = omap_48m_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000813 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200814 .recalc = &omap2_clksel_recalc,
815};
816
817static struct clk omap_12m_fck = {
818 .name = "omap_12m_fck",
Russell King57137182008-11-04 16:48:35 +0000819 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200820 .parent = &omap_48m_fck,
821 .fixed_div = 4,
Russell King44dc9d02009-01-19 15:51:11 +0000822 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200823 .recalc = &omap2_fixed_divisor_recalc,
824};
825
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200826/* This virstual clock is the source for dpll4_m4x2_ck */
827static struct clk dpll4_m4_ck = {
828 .name = "dpll4_m4_ck",
Russell King57137182008-11-04 16:48:35 +0000829 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200830 .parent = &dpll4_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200831 .init = &omap2_init_clksel_parent,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200832 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
833 .clksel_mask = OMAP3430_CLKSEL_DSS1_MASK,
834 .clksel = div16_dpll4_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000835 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700836 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200837 .recalc = &omap2_clksel_recalc,
Paul Walmsleyae8578c2009-01-27 19:13:12 -0700838 .set_rate = &omap2_clksel_set_rate,
839 .round_rate = &omap2_clksel_round_rate,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200840};
841
842/* The PWRDN bit is apparently only available on 3430ES2 and above */
843static struct clk dpll4_m4x2_ck = {
844 .name = "dpll4_m4x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000845 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200846 .parent = &dpll4_m4_ck,
847 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
848 .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000849 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700850 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200851 .recalc = &omap3_clkoutx2_recalc,
852};
853
854/* This virtual clock is the source for dpll4_m5x2_ck */
855static struct clk dpll4_m5_ck = {
856 .name = "dpll4_m5_ck",
Russell King57137182008-11-04 16:48:35 +0000857 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200858 .parent = &dpll4_ck,
859 .init = &omap2_init_clksel_parent,
860 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL),
861 .clksel_mask = OMAP3430_CLKSEL_CAM_MASK,
862 .clksel = div16_dpll4_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000863 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700864 .clkdm_name = "dpll4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200865 .recalc = &omap2_clksel_recalc,
866};
867
868/* The PWRDN bit is apparently only available on 3430ES2 and above */
869static struct clk dpll4_m5x2_ck = {
870 .name = "dpll4_m5x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000871 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200872 .parent = &dpll4_m5_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200873 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
874 .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000875 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700876 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200877 .recalc = &omap3_clkoutx2_recalc,
878};
879
880/* This virtual clock is the source for dpll4_m6x2_ck */
881static struct clk dpll4_m6_ck = {
882 .name = "dpll4_m6_ck",
Russell King57137182008-11-04 16:48:35 +0000883 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200884 .parent = &dpll4_ck,
885 .init = &omap2_init_clksel_parent,
886 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
887 .clksel_mask = OMAP3430_DIV_DPLL4_MASK,
888 .clksel = div16_dpll4_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000889 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700890 .clkdm_name = "dpll4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200891 .recalc = &omap2_clksel_recalc,
892};
893
894/* The PWRDN bit is apparently only available on 3430ES2 and above */
895static struct clk dpll4_m6x2_ck = {
896 .name = "dpll4_m6x2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +0000897 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200898 .parent = &dpll4_m6_ck,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200899 .init = &omap2_init_clksel_parent,
900 .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
901 .enable_bit = OMAP3430_PWRDN_EMU_PERIPH_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +0000902 .flags = RATE_PROPAGATES | INVERT_ENABLE,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700903 .clkdm_name = "dpll4_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200904 .recalc = &omap3_clkoutx2_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200905};
906
907static struct clk emu_per_alwon_ck = {
908 .name = "emu_per_alwon_ck",
Russell King57137182008-11-04 16:48:35 +0000909 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200910 .parent = &dpll4_m6x2_ck,
Russell King44dc9d02009-01-19 15:51:11 +0000911 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700912 .clkdm_name = "dpll4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200913 .recalc = &followparent_recalc,
914};
915
916/* DPLL5 */
917/* Supplies 120MHz clock, USIM source clock */
918/* Type: DPLL */
919/* 3430ES2 only */
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300920static struct dpll_data dpll5_dd = {
Paul Walmsleyb045d082008-03-18 11:24:28 +0200921 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4),
922 .mult_mask = OMAP3430ES2_PERIPH2_DPLL_MULT_MASK,
923 .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700924 .freqsel_mask = OMAP3430ES2_PERIPH2_DPLL_FREQSEL_MASK,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200925 .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2),
926 .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK,
Paul Walmsley542313c2008-07-03 12:24:45 +0300927 .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED),
Paul Walmsleyb045d082008-03-18 11:24:28 +0200928 .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT,
929 .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT,
930 .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT,
Paul Walmsley542313c2008-07-03 12:24:45 +0300931 .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_AUTOIDLE2_PLL),
932 .autoidle_mask = OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK,
933 .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2),
Paul Walmsleyc1bd7aa2009-01-28 12:08:17 -0700934 .idlest_mask = OMAP3430ES2_ST_PERIPH2_CLK_MASK,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300935 .max_multiplier = OMAP3_MAX_DPLL_MULT,
Paul Walmsley95f538a2009-01-28 12:08:44 -0700936 .min_divider = 1,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300937 .max_divider = OMAP3_MAX_DPLL_DIV,
938 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
Paul Walmsleyb045d082008-03-18 11:24:28 +0200939};
940
941static struct clk dpll5_ck = {
942 .name = "dpll5_ck",
Russell King548d8492008-11-04 14:02:46 +0000943 .ops = &clkops_noncore_dpll_ops,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200944 .parent = &sys_ck,
945 .dpll_data = &dpll5_dd,
Russell King44dc9d02009-01-19 15:51:11 +0000946 .flags = RATE_PROPAGATES,
Paul Walmsley88b8ba92008-07-03 12:24:46 +0300947 .round_rate = &omap2_dpll_round_rate,
Paul Walmsley16c90f02009-01-27 19:12:47 -0700948 .set_rate = &omap3_noncore_dpll_set_rate,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700949 .clkdm_name = "dpll5_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200950 .recalc = &omap3_dpll_recalc,
951};
952
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200953static const struct clksel div16_dpll5_clksel[] = {
Paul Walmsleyb045d082008-03-18 11:24:28 +0200954 { .parent = &dpll5_ck, .rates = div16_dpll_rates },
955 { .parent = NULL }
956};
957
958static struct clk dpll5_m2_ck = {
959 .name = "dpll5_m2_ck",
Russell King57137182008-11-04 16:48:35 +0000960 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200961 .parent = &dpll5_ck,
962 .init = &omap2_init_clksel_parent,
963 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL5),
964 .clksel_mask = OMAP3430ES2_DIV_120M_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200965 .clksel = div16_dpll5_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000966 .flags = RATE_PROPAGATES,
Paul Walmsley46e0ccf2009-01-27 19:44:18 -0700967 .clkdm_name = "dpll5_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +0200968 .recalc = &omap2_clksel_recalc,
969};
970
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200971static const struct clksel omap_120m_fck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +0300972 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +0200973 { .parent = &dpll5_m2_ck, .rates = dpll_locked_rates },
974 { .parent = NULL }
975};
976
Paul Walmsleyb045d082008-03-18 11:24:28 +0200977static struct clk omap_120m_fck = {
978 .name = "omap_120m_fck",
Russell King57137182008-11-04 16:48:35 +0000979 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200980 .parent = &dpll5_m2_ck,
Paul Walmsley333943b2008-08-19 11:08:45 +0300981 .init = &omap2_init_clksel_parent,
982 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2),
983 .clksel_mask = OMAP3430ES2_ST_PERIPH2_CLK_MASK,
984 .clksel = omap_120m_fck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +0000985 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +0300986 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +0200987};
988
989/* CM EXTERNAL CLOCK OUTPUTS */
990
991static const struct clksel_rate clkout2_src_core_rates[] = {
992 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
993 { .div = 0 }
994};
995
996static const struct clksel_rate clkout2_src_sys_rates[] = {
997 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
998 { .div = 0 }
999};
1000
1001static const struct clksel_rate clkout2_src_96m_rates[] = {
1002 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
1003 { .div = 0 }
1004};
1005
1006static const struct clksel_rate clkout2_src_54m_rates[] = {
1007 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
1008 { .div = 0 }
1009};
1010
1011static const struct clksel clkout2_src_clksel[] = {
Paul Walmsley9cfd9852009-01-27 19:13:02 -07001012 { .parent = &core_ck, .rates = clkout2_src_core_rates },
1013 { .parent = &sys_ck, .rates = clkout2_src_sys_rates },
1014 { .parent = &cm_96m_fck, .rates = clkout2_src_96m_rates },
1015 { .parent = &omap_54m_fck, .rates = clkout2_src_54m_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +02001016 { .parent = NULL }
1017};
1018
1019static struct clk clkout2_src_ck = {
1020 .name = "clkout2_src_ck",
Russell Kingc1168dc2008-11-04 21:24:00 +00001021 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001022 .init = &omap2_init_clksel_parent,
1023 .enable_reg = OMAP3430_CM_CLKOUT_CTRL,
1024 .enable_bit = OMAP3430_CLKOUT2_EN_SHIFT,
1025 .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
1026 .clksel_mask = OMAP3430_CLKOUT2SOURCE_MASK,
1027 .clksel = clkout2_src_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001028 .flags = RATE_PROPAGATES,
Paul Walmsley15b52bc2008-05-07 19:19:07 -06001029 .clkdm_name = "core_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001030 .recalc = &omap2_clksel_recalc,
1031};
1032
1033static const struct clksel_rate sys_clkout2_rates[] = {
1034 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
1035 { .div = 2, .val = 1, .flags = RATE_IN_343X },
1036 { .div = 4, .val = 2, .flags = RATE_IN_343X },
1037 { .div = 8, .val = 3, .flags = RATE_IN_343X },
1038 { .div = 16, .val = 4, .flags = RATE_IN_343X },
1039 { .div = 0 },
1040};
1041
1042static const struct clksel sys_clkout2_clksel[] = {
1043 { .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
1044 { .parent = NULL },
1045};
1046
1047static struct clk sys_clkout2 = {
1048 .name = "sys_clkout2",
Russell King57137182008-11-04 16:48:35 +00001049 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001050 .init = &omap2_init_clksel_parent,
1051 .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
1052 .clksel_mask = OMAP3430_CLKOUT2_DIV_MASK,
1053 .clksel = sys_clkout2_clksel,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001054 .recalc = &omap2_clksel_recalc,
1055};
1056
1057/* CM OUTPUT CLOCKS */
1058
1059static struct clk corex2_fck = {
1060 .name = "corex2_fck",
Russell King57137182008-11-04 16:48:35 +00001061 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001062 .parent = &dpll3_m2x2_ck,
Russell King44dc9d02009-01-19 15:51:11 +00001063 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001064 .recalc = &followparent_recalc,
1065};
1066
1067/* DPLL power domain clock controls */
1068
Paul Walmsleyb8168d12009-01-28 12:08:14 -07001069static const struct clksel_rate div4_rates[] = {
1070 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
1071 { .div = 2, .val = 2, .flags = RATE_IN_343X },
1072 { .div = 4, .val = 4, .flags = RATE_IN_343X },
1073 { .div = 0 }
1074};
1075
1076static const struct clksel div4_core_clksel[] = {
1077 { .parent = &core_ck, .rates = div4_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +02001078 { .parent = NULL }
1079};
1080
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001081/*
1082 * REVISIT: Are these in DPLL power domain or CM power domain? docs
1083 * may be inconsistent here?
1084 */
Paul Walmsleyb045d082008-03-18 11:24:28 +02001085static struct clk dpll1_fck = {
1086 .name = "dpll1_fck",
Russell King57137182008-11-04 16:48:35 +00001087 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001088 .parent = &core_ck,
1089 .init = &omap2_init_clksel_parent,
1090 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
1091 .clksel_mask = OMAP3430_MPU_CLK_SRC_MASK,
Paul Walmsleyb8168d12009-01-28 12:08:14 -07001092 .clksel = div4_core_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001093 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001094 .recalc = &omap2_clksel_recalc,
1095};
1096
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001097/*
1098 * MPU clksel:
1099 * If DPLL1 is locked, mpu_ck derives from DPLL1; otherwise, mpu_ck
1100 * derives from the high-frequency bypass clock originating from DPLL3,
1101 * called 'dpll1_fck'
1102 */
1103static const struct clksel mpu_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +03001104 { .parent = &dpll1_fck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001105 { .parent = &dpll1_x2m2_ck, .rates = dpll_locked_rates },
1106 { .parent = NULL }
1107};
1108
1109static struct clk mpu_ck = {
1110 .name = "mpu_ck",
Russell King57137182008-11-04 16:48:35 +00001111 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001112 .parent = &dpll1_x2m2_ck,
1113 .init = &omap2_init_clksel_parent,
1114 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
1115 .clksel_mask = OMAP3430_ST_MPU_CLK_MASK,
1116 .clksel = mpu_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001117 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001118 .clkdm_name = "mpu_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001119 .recalc = &omap2_clksel_recalc,
1120};
1121
1122/* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */
1123static const struct clksel_rate arm_fck_rates[] = {
1124 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
1125 { .div = 2, .val = 1, .flags = RATE_IN_343X },
1126 { .div = 0 },
1127};
1128
1129static const struct clksel arm_fck_clksel[] = {
1130 { .parent = &mpu_ck, .rates = arm_fck_rates },
1131 { .parent = NULL }
1132};
1133
1134static struct clk arm_fck = {
1135 .name = "arm_fck",
Russell King57137182008-11-04 16:48:35 +00001136 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001137 .parent = &mpu_ck,
1138 .init = &omap2_init_clksel_parent,
1139 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
1140 .clksel_mask = OMAP3430_ST_MPU_CLK_MASK,
1141 .clksel = arm_fck_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001142 .flags = RATE_PROPAGATES,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001143 .recalc = &omap2_clksel_recalc,
1144};
1145
Paul Walmsley333943b2008-08-19 11:08:45 +03001146/* XXX What about neon_clkdm ? */
1147
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001148/*
1149 * REVISIT: This clock is never specifically defined in the 3430 TRM,
1150 * although it is referenced - so this is a guess
1151 */
1152static struct clk emu_mpu_alwon_ck = {
1153 .name = "emu_mpu_alwon_ck",
Russell King57137182008-11-04 16:48:35 +00001154 .ops = &clkops_null,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001155 .parent = &mpu_ck,
Russell King44dc9d02009-01-19 15:51:11 +00001156 .flags = RATE_PROPAGATES,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001157 .recalc = &followparent_recalc,
1158};
1159
Paul Walmsleyb045d082008-03-18 11:24:28 +02001160static struct clk dpll2_fck = {
1161 .name = "dpll2_fck",
Russell King57137182008-11-04 16:48:35 +00001162 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001163 .parent = &core_ck,
1164 .init = &omap2_init_clksel_parent,
1165 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
1166 .clksel_mask = OMAP3430_IVA2_CLK_SRC_MASK,
Paul Walmsleyb8168d12009-01-28 12:08:14 -07001167 .clksel = div4_core_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001168 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001169 .recalc = &omap2_clksel_recalc,
1170};
1171
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001172/*
1173 * IVA2 clksel:
1174 * If DPLL2 is locked, iva2_ck derives from DPLL2; otherwise, iva2_ck
1175 * derives from the high-frequency bypass clock originating from DPLL3,
1176 * called 'dpll2_fck'
1177 */
1178
1179static const struct clksel iva2_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +03001180 { .parent = &dpll2_fck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001181 { .parent = &dpll2_m2_ck, .rates = dpll_locked_rates },
1182 { .parent = NULL }
1183};
1184
1185static struct clk iva2_ck = {
1186 .name = "iva2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +00001187 .ops = &clkops_omap2_dflt_wait,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001188 .parent = &dpll2_m2_ck,
1189 .init = &omap2_init_clksel_parent,
Hiroshi DOYU31c203d2008-04-01 10:11:22 +03001190 .enable_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, CM_FCLKEN),
1191 .enable_bit = OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001192 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
1193 OMAP3430_CM_IDLEST_PLL),
1194 .clksel_mask = OMAP3430_ST_IVA2_CLK_MASK,
1195 .clksel = iva2_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001196 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001197 .clkdm_name = "iva2_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001198 .recalc = &omap2_clksel_recalc,
1199};
1200
Paul Walmsleyb045d082008-03-18 11:24:28 +02001201/* Common interface clocks */
1202
Paul Walmsleyb8168d12009-01-28 12:08:14 -07001203static const struct clksel div2_core_clksel[] = {
1204 { .parent = &core_ck, .rates = div2_rates },
1205 { .parent = NULL }
1206};
1207
Paul Walmsleyb045d082008-03-18 11:24:28 +02001208static struct clk l3_ick = {
1209 .name = "l3_ick",
Russell King57137182008-11-04 16:48:35 +00001210 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001211 .parent = &core_ck,
1212 .init = &omap2_init_clksel_parent,
1213 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1214 .clksel_mask = OMAP3430_CLKSEL_L3_MASK,
1215 .clksel = div2_core_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001216 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001217 .clkdm_name = "core_l3_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001218 .recalc = &omap2_clksel_recalc,
1219};
1220
1221static const struct clksel div2_l3_clksel[] = {
1222 { .parent = &l3_ick, .rates = div2_rates },
1223 { .parent = NULL }
1224};
1225
1226static struct clk l4_ick = {
1227 .name = "l4_ick",
Russell King57137182008-11-04 16:48:35 +00001228 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001229 .parent = &l3_ick,
1230 .init = &omap2_init_clksel_parent,
1231 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1232 .clksel_mask = OMAP3430_CLKSEL_L4_MASK,
1233 .clksel = div2_l3_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001234 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001235 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001236 .recalc = &omap2_clksel_recalc,
1237
1238};
1239
1240static const struct clksel div2_l4_clksel[] = {
1241 { .parent = &l4_ick, .rates = div2_rates },
1242 { .parent = NULL }
1243};
1244
1245static struct clk rm_ick = {
1246 .name = "rm_ick",
Russell King57137182008-11-04 16:48:35 +00001247 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001248 .parent = &l4_ick,
1249 .init = &omap2_init_clksel_parent,
1250 .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
1251 .clksel_mask = OMAP3430_CLKSEL_RM_MASK,
1252 .clksel = div2_l4_clksel,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001253 .recalc = &omap2_clksel_recalc,
1254};
1255
1256/* GFX power domain */
1257
Roman Tereshonkov3760d312008-03-13 21:35:09 +02001258/* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX instead */
Paul Walmsleyb045d082008-03-18 11:24:28 +02001259
1260static const struct clksel gfx_l3_clksel[] = {
1261 { .parent = &l3_ick, .rates = gfx_l3_rates },
1262 { .parent = NULL }
1263};
1264
Högander Jouni59559022008-08-19 11:08:45 +03001265/* Virtual parent clock for gfx_l3_ick and gfx_l3_fck */
1266static struct clk gfx_l3_ck = {
1267 .name = "gfx_l3_ck",
Russell Kingb36ee722008-11-04 17:59:52 +00001268 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001269 .parent = &l3_ick,
1270 .init = &omap2_init_clksel_parent,
1271 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
1272 .enable_bit = OMAP_EN_GFX_SHIFT,
Högander Jouni59559022008-08-19 11:08:45 +03001273 .recalc = &followparent_recalc,
1274};
1275
1276static struct clk gfx_l3_fck = {
1277 .name = "gfx_l3_fck",
Russell King57137182008-11-04 16:48:35 +00001278 .ops = &clkops_null,
Högander Jouni59559022008-08-19 11:08:45 +03001279 .parent = &gfx_l3_ck,
1280 .init = &omap2_init_clksel_parent,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001281 .clksel_reg = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
1282 .clksel_mask = OMAP_CLKSEL_GFX_MASK,
1283 .clksel = gfx_l3_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001284 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001285 .clkdm_name = "gfx_3430es1_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001286 .recalc = &omap2_clksel_recalc,
1287};
1288
1289static struct clk gfx_l3_ick = {
1290 .name = "gfx_l3_ick",
Russell King57137182008-11-04 16:48:35 +00001291 .ops = &clkops_null,
Högander Jouni59559022008-08-19 11:08:45 +03001292 .parent = &gfx_l3_ck,
Paul Walmsley333943b2008-08-19 11:08:45 +03001293 .clkdm_name = "gfx_3430es1_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001294 .recalc = &followparent_recalc,
1295};
1296
1297static struct clk gfx_cg1_ck = {
1298 .name = "gfx_cg1_ck",
Russell Kingb36ee722008-11-04 17:59:52 +00001299 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001300 .parent = &gfx_l3_fck, /* REVISIT: correct? */
Paul Walmsley333943b2008-08-19 11:08:45 +03001301 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001302 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
1303 .enable_bit = OMAP3430ES1_EN_2D_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001304 .clkdm_name = "gfx_3430es1_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001305 .recalc = &followparent_recalc,
1306};
1307
1308static struct clk gfx_cg2_ck = {
1309 .name = "gfx_cg2_ck",
Russell Kingb36ee722008-11-04 17:59:52 +00001310 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001311 .parent = &gfx_l3_fck, /* REVISIT: correct? */
Paul Walmsley333943b2008-08-19 11:08:45 +03001312 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001313 .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
1314 .enable_bit = OMAP3430ES1_EN_3D_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001315 .clkdm_name = "gfx_3430es1_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001316 .recalc = &followparent_recalc,
1317};
1318
1319/* SGX power domain - 3430ES2 only */
1320
1321static const struct clksel_rate sgx_core_rates[] = {
1322 { .div = 3, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
1323 { .div = 4, .val = 1, .flags = RATE_IN_343X },
1324 { .div = 6, .val = 2, .flags = RATE_IN_343X },
1325 { .div = 0 },
1326};
1327
1328static const struct clksel_rate sgx_96m_rates[] = {
1329 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
1330 { .div = 0 },
1331};
1332
1333static const struct clksel sgx_clksel[] = {
1334 { .parent = &core_ck, .rates = sgx_core_rates },
1335 { .parent = &cm_96m_fck, .rates = sgx_96m_rates },
1336 { .parent = NULL },
1337};
1338
1339static struct clk sgx_fck = {
1340 .name = "sgx_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001341 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001342 .init = &omap2_init_clksel_parent,
1343 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_FCLKEN),
Daniel Stone712d7c82009-01-27 19:13:05 -07001344 .enable_bit = OMAP3430ES2_CM_FCLKEN_SGX_EN_SGX_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001345 .clksel_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_CLKSEL),
1346 .clksel_mask = OMAP3430ES2_CLKSEL_SGX_MASK,
1347 .clksel = sgx_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03001348 .clkdm_name = "sgx_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001349 .recalc = &omap2_clksel_recalc,
1350};
1351
1352static struct clk sgx_ick = {
1353 .name = "sgx_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001354 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001355 .parent = &l3_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03001356 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001357 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_ICLKEN),
Daniel Stone712d7c82009-01-27 19:13:05 -07001358 .enable_bit = OMAP3430ES2_CM_ICLKEN_SGX_EN_SGX_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001359 .clkdm_name = "sgx_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001360 .recalc = &followparent_recalc,
1361};
1362
1363/* CORE power domain */
1364
1365static struct clk d2d_26m_fck = {
1366 .name = "d2d_26m_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001367 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001368 .parent = &sys_ck,
Paul Walmsley333943b2008-08-19 11:08:45 +03001369 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001370 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1371 .enable_bit = OMAP3430ES1_EN_D2D_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001372 .clkdm_name = "d2d_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001373 .recalc = &followparent_recalc,
1374};
1375
1376static const struct clksel omap343x_gpt_clksel[] = {
1377 { .parent = &omap_32k_fck, .rates = gpt_32k_rates },
1378 { .parent = &sys_ck, .rates = gpt_sys_rates },
1379 { .parent = NULL}
1380};
1381
1382static struct clk gpt10_fck = {
1383 .name = "gpt10_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001384 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001385 .parent = &sys_ck,
1386 .init = &omap2_init_clksel_parent,
1387 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1388 .enable_bit = OMAP3430_EN_GPT10_SHIFT,
1389 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1390 .clksel_mask = OMAP3430_CLKSEL_GPT10_MASK,
1391 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03001392 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001393 .recalc = &omap2_clksel_recalc,
1394};
1395
1396static struct clk gpt11_fck = {
1397 .name = "gpt11_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001398 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001399 .parent = &sys_ck,
1400 .init = &omap2_init_clksel_parent,
1401 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1402 .enable_bit = OMAP3430_EN_GPT11_SHIFT,
1403 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1404 .clksel_mask = OMAP3430_CLKSEL_GPT11_MASK,
1405 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03001406 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001407 .recalc = &omap2_clksel_recalc,
1408};
1409
1410static struct clk cpefuse_fck = {
1411 .name = "cpefuse_fck",
Russell Kingc1168dc2008-11-04 21:24:00 +00001412 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001413 .parent = &sys_ck,
1414 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
1415 .enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001416 .recalc = &followparent_recalc,
1417};
1418
1419static struct clk ts_fck = {
1420 .name = "ts_fck",
Russell Kingc1168dc2008-11-04 21:24:00 +00001421 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001422 .parent = &omap_32k_fck,
1423 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
1424 .enable_bit = OMAP3430ES2_EN_TS_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001425 .recalc = &followparent_recalc,
1426};
1427
1428static struct clk usbtll_fck = {
1429 .name = "usbtll_fck",
Russell Kingc1168dc2008-11-04 21:24:00 +00001430 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001431 .parent = &omap_120m_fck,
1432 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
1433 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001434 .recalc = &followparent_recalc,
1435};
1436
1437/* CORE 96M FCLK-derived clocks */
1438
1439static struct clk core_96m_fck = {
1440 .name = "core_96m_fck",
Russell King57137182008-11-04 16:48:35 +00001441 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001442 .parent = &omap_96m_fck,
Russell King44dc9d02009-01-19 15:51:11 +00001443 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001444 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001445 .recalc = &followparent_recalc,
1446};
1447
1448static struct clk mmchs3_fck = {
1449 .name = "mmchs_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001450 .ops = &clkops_omap2_dflt_wait,
Tony Lindgrend8874662008-12-10 17:37:16 -08001451 .id = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001452 .parent = &core_96m_fck,
1453 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1454 .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001455 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001456 .recalc = &followparent_recalc,
1457};
1458
1459static struct clk mmchs2_fck = {
1460 .name = "mmchs_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001461 .ops = &clkops_omap2_dflt_wait,
Tony Lindgrend8874662008-12-10 17:37:16 -08001462 .id = 1,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001463 .parent = &core_96m_fck,
1464 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1465 .enable_bit = OMAP3430_EN_MMC2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001466 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001467 .recalc = &followparent_recalc,
1468};
1469
1470static struct clk mspro_fck = {
1471 .name = "mspro_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001472 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001473 .parent = &core_96m_fck,
1474 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1475 .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001476 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001477 .recalc = &followparent_recalc,
1478};
1479
1480static struct clk mmchs1_fck = {
1481 .name = "mmchs_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001482 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001483 .parent = &core_96m_fck,
1484 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1485 .enable_bit = OMAP3430_EN_MMC1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001486 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001487 .recalc = &followparent_recalc,
1488};
1489
1490static struct clk i2c3_fck = {
1491 .name = "i2c_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001492 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001493 .id = 3,
1494 .parent = &core_96m_fck,
1495 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1496 .enable_bit = OMAP3430_EN_I2C3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001497 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001498 .recalc = &followparent_recalc,
1499};
1500
1501static struct clk i2c2_fck = {
1502 .name = "i2c_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001503 .ops = &clkops_omap2_dflt_wait,
Paul Walmsley333943b2008-08-19 11:08:45 +03001504 .id = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001505 .parent = &core_96m_fck,
1506 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1507 .enable_bit = OMAP3430_EN_I2C2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001508 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001509 .recalc = &followparent_recalc,
1510};
1511
1512static struct clk i2c1_fck = {
1513 .name = "i2c_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001514 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001515 .id = 1,
1516 .parent = &core_96m_fck,
1517 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1518 .enable_bit = OMAP3430_EN_I2C1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001519 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001520 .recalc = &followparent_recalc,
1521};
1522
1523/*
1524 * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
1525 * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
1526 */
1527static const struct clksel_rate common_mcbsp_96m_rates[] = {
1528 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
1529 { .div = 0 }
1530};
1531
1532static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1533 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
1534 { .div = 0 }
1535};
1536
1537static const struct clksel mcbsp_15_clksel[] = {
1538 { .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
1539 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1540 { .parent = NULL }
1541};
1542
1543static struct clk mcbsp5_fck = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03001544 .name = "mcbsp_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001545 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03001546 .id = 5,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001547 .init = &omap2_init_clksel_parent,
1548 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1549 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
1550 .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
1551 .clksel_mask = OMAP2_MCBSP5_CLKS_MASK,
1552 .clksel = mcbsp_15_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03001553 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001554 .recalc = &omap2_clksel_recalc,
1555};
1556
1557static struct clk mcbsp1_fck = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03001558 .name = "mcbsp_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001559 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03001560 .id = 1,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001561 .init = &omap2_init_clksel_parent,
1562 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1563 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
1564 .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1565 .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
1566 .clksel = mcbsp_15_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03001567 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001568 .recalc = &omap2_clksel_recalc,
1569};
1570
1571/* CORE_48M_FCK-derived clocks */
1572
1573static struct clk core_48m_fck = {
1574 .name = "core_48m_fck",
Russell King57137182008-11-04 16:48:35 +00001575 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001576 .parent = &omap_48m_fck,
Russell King44dc9d02009-01-19 15:51:11 +00001577 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001578 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001579 .recalc = &followparent_recalc,
1580};
1581
1582static struct clk mcspi4_fck = {
1583 .name = "mcspi_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001584 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001585 .id = 4,
1586 .parent = &core_48m_fck,
1587 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1588 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001589 .recalc = &followparent_recalc,
1590};
1591
1592static struct clk mcspi3_fck = {
1593 .name = "mcspi_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001594 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001595 .id = 3,
1596 .parent = &core_48m_fck,
1597 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1598 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001599 .recalc = &followparent_recalc,
1600};
1601
1602static struct clk mcspi2_fck = {
1603 .name = "mcspi_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001604 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001605 .id = 2,
1606 .parent = &core_48m_fck,
1607 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1608 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001609 .recalc = &followparent_recalc,
1610};
1611
1612static struct clk mcspi1_fck = {
1613 .name = "mcspi_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001614 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001615 .id = 1,
1616 .parent = &core_48m_fck,
1617 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1618 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001619 .recalc = &followparent_recalc,
1620};
1621
1622static struct clk uart2_fck = {
1623 .name = "uart2_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001624 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001625 .parent = &core_48m_fck,
1626 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1627 .enable_bit = OMAP3430_EN_UART2_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001628 .recalc = &followparent_recalc,
1629};
1630
1631static struct clk uart1_fck = {
1632 .name = "uart1_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001633 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001634 .parent = &core_48m_fck,
1635 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1636 .enable_bit = OMAP3430_EN_UART1_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001637 .recalc = &followparent_recalc,
1638};
1639
1640static struct clk fshostusb_fck = {
1641 .name = "fshostusb_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001642 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001643 .parent = &core_48m_fck,
1644 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1645 .enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001646 .recalc = &followparent_recalc,
1647};
1648
1649/* CORE_12M_FCK based clocks */
1650
1651static struct clk core_12m_fck = {
1652 .name = "core_12m_fck",
Russell King57137182008-11-04 16:48:35 +00001653 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001654 .parent = &omap_12m_fck,
Russell King44dc9d02009-01-19 15:51:11 +00001655 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001656 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001657 .recalc = &followparent_recalc,
1658};
1659
1660static struct clk hdq_fck = {
1661 .name = "hdq_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00001662 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001663 .parent = &core_12m_fck,
1664 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1665 .enable_bit = OMAP3430_EN_HDQ_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001666 .recalc = &followparent_recalc,
1667};
1668
1669/* DPLL3-derived clock */
1670
1671static const struct clksel_rate ssi_ssr_corex2_rates[] = {
1672 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
1673 { .div = 2, .val = 2, .flags = RATE_IN_343X },
1674 { .div = 3, .val = 3, .flags = RATE_IN_343X },
1675 { .div = 4, .val = 4, .flags = RATE_IN_343X },
1676 { .div = 6, .val = 6, .flags = RATE_IN_343X },
1677 { .div = 8, .val = 8, .flags = RATE_IN_343X },
1678 { .div = 0 }
1679};
1680
1681static const struct clksel ssi_ssr_clksel[] = {
1682 { .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
1683 { .parent = NULL }
1684};
1685
1686static struct clk ssi_ssr_fck = {
1687 .name = "ssi_ssr_fck",
Russell Kingbc51da42008-11-04 18:59:32 +00001688 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001689 .init = &omap2_init_clksel_parent,
1690 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1691 .enable_bit = OMAP3430_EN_SSI_SHIFT,
1692 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
1693 .clksel_mask = OMAP3430_CLKSEL_SSI_MASK,
1694 .clksel = ssi_ssr_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00001695 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001696 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001697 .recalc = &omap2_clksel_recalc,
1698};
1699
1700static struct clk ssi_sst_fck = {
1701 .name = "ssi_sst_fck",
Russell King57137182008-11-04 16:48:35 +00001702 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001703 .parent = &ssi_ssr_fck,
1704 .fixed_div = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001705 .recalc = &omap2_fixed_divisor_recalc,
1706};
1707
1708
1709
1710/* CORE_L3_ICK based clocks */
1711
Paul Walmsley333943b2008-08-19 11:08:45 +03001712/*
1713 * XXX must add clk_enable/clk_disable for these if standard code won't
1714 * handle it
1715 */
Paul Walmsleyb045d082008-03-18 11:24:28 +02001716static struct clk core_l3_ick = {
1717 .name = "core_l3_ick",
Russell King57137182008-11-04 16:48:35 +00001718 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001719 .parent = &l3_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03001720 .init = &omap2_init_clk_clkdm,
Russell King44dc9d02009-01-19 15:51:11 +00001721 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001722 .clkdm_name = "core_l3_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001723 .recalc = &followparent_recalc,
1724};
1725
1726static struct clk hsotgusb_ick = {
1727 .name = "hsotgusb_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001728 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001729 .parent = &core_l3_ick,
1730 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1731 .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001732 .clkdm_name = "core_l3_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001733 .recalc = &followparent_recalc,
1734};
1735
1736static struct clk sdrc_ick = {
1737 .name = "sdrc_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001738 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001739 .parent = &core_l3_ick,
1740 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1741 .enable_bit = OMAP3430_EN_SDRC_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +00001742 .flags = ENABLE_ON_INIT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001743 .clkdm_name = "core_l3_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001744 .recalc = &followparent_recalc,
1745};
1746
1747static struct clk gpmc_fck = {
1748 .name = "gpmc_fck",
Russell King57137182008-11-04 16:48:35 +00001749 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001750 .parent = &core_l3_ick,
Russell King44dc9d02009-01-19 15:51:11 +00001751 .flags = ENABLE_ON_INIT, /* huh? */
Paul Walmsley333943b2008-08-19 11:08:45 +03001752 .clkdm_name = "core_l3_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001753 .recalc = &followparent_recalc,
1754};
1755
1756/* SECURITY_L3_ICK based clocks */
1757
1758static struct clk security_l3_ick = {
1759 .name = "security_l3_ick",
Russell King57137182008-11-04 16:48:35 +00001760 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001761 .parent = &l3_ick,
Russell King44dc9d02009-01-19 15:51:11 +00001762 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001763 .recalc = &followparent_recalc,
1764};
1765
1766static struct clk pka_ick = {
1767 .name = "pka_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001768 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001769 .parent = &security_l3_ick,
1770 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1771 .enable_bit = OMAP3430_EN_PKA_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001772 .recalc = &followparent_recalc,
1773};
1774
1775/* CORE_L4_ICK based clocks */
1776
1777static struct clk core_l4_ick = {
1778 .name = "core_l4_ick",
Russell King57137182008-11-04 16:48:35 +00001779 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001780 .parent = &l4_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03001781 .init = &omap2_init_clk_clkdm,
Russell King44dc9d02009-01-19 15:51:11 +00001782 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03001783 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001784 .recalc = &followparent_recalc,
1785};
1786
1787static struct clk usbtll_ick = {
1788 .name = "usbtll_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001789 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001790 .parent = &core_l4_ick,
1791 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1792 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001793 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001794 .recalc = &followparent_recalc,
1795};
1796
1797static struct clk mmchs3_ick = {
1798 .name = "mmchs_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001799 .ops = &clkops_omap2_dflt_wait,
Tony Lindgrend8874662008-12-10 17:37:16 -08001800 .id = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001801 .parent = &core_l4_ick,
1802 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1803 .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001804 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001805 .recalc = &followparent_recalc,
1806};
1807
1808/* Intersystem Communication Registers - chassis mode only */
1809static struct clk icr_ick = {
1810 .name = "icr_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001811 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001812 .parent = &core_l4_ick,
1813 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1814 .enable_bit = OMAP3430_EN_ICR_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001815 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001816 .recalc = &followparent_recalc,
1817};
1818
1819static struct clk aes2_ick = {
1820 .name = "aes2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001821 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001822 .parent = &core_l4_ick,
1823 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1824 .enable_bit = OMAP3430_EN_AES2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001825 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001826 .recalc = &followparent_recalc,
1827};
1828
1829static struct clk sha12_ick = {
1830 .name = "sha12_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001831 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001832 .parent = &core_l4_ick,
1833 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1834 .enable_bit = OMAP3430_EN_SHA12_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001835 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001836 .recalc = &followparent_recalc,
1837};
1838
1839static struct clk des2_ick = {
1840 .name = "des2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001841 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001842 .parent = &core_l4_ick,
1843 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1844 .enable_bit = OMAP3430_EN_DES2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001845 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001846 .recalc = &followparent_recalc,
1847};
1848
1849static struct clk mmchs2_ick = {
1850 .name = "mmchs_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001851 .ops = &clkops_omap2_dflt_wait,
Tony Lindgrend8874662008-12-10 17:37:16 -08001852 .id = 1,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001853 .parent = &core_l4_ick,
1854 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1855 .enable_bit = OMAP3430_EN_MMC2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001856 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001857 .recalc = &followparent_recalc,
1858};
1859
1860static struct clk mmchs1_ick = {
1861 .name = "mmchs_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001862 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001863 .parent = &core_l4_ick,
1864 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1865 .enable_bit = OMAP3430_EN_MMC1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001866 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001867 .recalc = &followparent_recalc,
1868};
1869
1870static struct clk mspro_ick = {
1871 .name = "mspro_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001872 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001873 .parent = &core_l4_ick,
1874 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1875 .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001876 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001877 .recalc = &followparent_recalc,
1878};
1879
1880static struct clk hdq_ick = {
1881 .name = "hdq_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001882 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001883 .parent = &core_l4_ick,
1884 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1885 .enable_bit = OMAP3430_EN_HDQ_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001886 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001887 .recalc = &followparent_recalc,
1888};
1889
1890static struct clk mcspi4_ick = {
1891 .name = "mcspi_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001892 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001893 .id = 4,
1894 .parent = &core_l4_ick,
1895 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1896 .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001897 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001898 .recalc = &followparent_recalc,
1899};
1900
1901static struct clk mcspi3_ick = {
1902 .name = "mcspi_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001903 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001904 .id = 3,
1905 .parent = &core_l4_ick,
1906 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1907 .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001908 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001909 .recalc = &followparent_recalc,
1910};
1911
1912static struct clk mcspi2_ick = {
1913 .name = "mcspi_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001914 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001915 .id = 2,
1916 .parent = &core_l4_ick,
1917 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1918 .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001919 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001920 .recalc = &followparent_recalc,
1921};
1922
1923static struct clk mcspi1_ick = {
1924 .name = "mcspi_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001925 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001926 .id = 1,
1927 .parent = &core_l4_ick,
1928 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1929 .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001930 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001931 .recalc = &followparent_recalc,
1932};
1933
1934static struct clk i2c3_ick = {
1935 .name = "i2c_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001936 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001937 .id = 3,
1938 .parent = &core_l4_ick,
1939 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1940 .enable_bit = OMAP3430_EN_I2C3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001941 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001942 .recalc = &followparent_recalc,
1943};
1944
1945static struct clk i2c2_ick = {
1946 .name = "i2c_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001947 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001948 .id = 2,
1949 .parent = &core_l4_ick,
1950 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1951 .enable_bit = OMAP3430_EN_I2C2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001952 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001953 .recalc = &followparent_recalc,
1954};
1955
1956static struct clk i2c1_ick = {
1957 .name = "i2c_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001958 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001959 .id = 1,
1960 .parent = &core_l4_ick,
1961 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1962 .enable_bit = OMAP3430_EN_I2C1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001963 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001964 .recalc = &followparent_recalc,
1965};
1966
1967static struct clk uart2_ick = {
1968 .name = "uart2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001969 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001970 .parent = &core_l4_ick,
1971 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1972 .enable_bit = OMAP3430_EN_UART2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001973 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001974 .recalc = &followparent_recalc,
1975};
1976
1977static struct clk uart1_ick = {
1978 .name = "uart1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001979 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001980 .parent = &core_l4_ick,
1981 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1982 .enable_bit = OMAP3430_EN_UART1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001983 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001984 .recalc = &followparent_recalc,
1985};
1986
1987static struct clk gpt11_ick = {
1988 .name = "gpt11_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001989 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02001990 .parent = &core_l4_ick,
1991 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1992 .enable_bit = OMAP3430_EN_GPT11_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03001993 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02001994 .recalc = &followparent_recalc,
1995};
1996
1997static struct clk gpt10_ick = {
1998 .name = "gpt10_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00001999 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002000 .parent = &core_l4_ick,
2001 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2002 .enable_bit = OMAP3430_EN_GPT10_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002003 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002004 .recalc = &followparent_recalc,
2005};
2006
2007static struct clk mcbsp5_ick = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002008 .name = "mcbsp_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002009 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002010 .id = 5,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002011 .parent = &core_l4_ick,
2012 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2013 .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002014 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002015 .recalc = &followparent_recalc,
2016};
2017
2018static struct clk mcbsp1_ick = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002019 .name = "mcbsp_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002020 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002021 .id = 1,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002022 .parent = &core_l4_ick,
2023 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2024 .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002025 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002026 .recalc = &followparent_recalc,
2027};
2028
2029static struct clk fac_ick = {
2030 .name = "fac_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002031 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002032 .parent = &core_l4_ick,
2033 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2034 .enable_bit = OMAP3430ES1_EN_FAC_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002035 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002036 .recalc = &followparent_recalc,
2037};
2038
2039static struct clk mailboxes_ick = {
2040 .name = "mailboxes_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002041 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002042 .parent = &core_l4_ick,
2043 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2044 .enable_bit = OMAP3430_EN_MAILBOXES_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002045 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002046 .recalc = &followparent_recalc,
2047};
2048
2049static struct clk omapctrl_ick = {
2050 .name = "omapctrl_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002051 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002052 .parent = &core_l4_ick,
2053 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2054 .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +00002055 .flags = ENABLE_ON_INIT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002056 .recalc = &followparent_recalc,
2057};
2058
2059/* SSI_L4_ICK based clocks */
2060
2061static struct clk ssi_l4_ick = {
2062 .name = "ssi_l4_ick",
Russell King57137182008-11-04 16:48:35 +00002063 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002064 .parent = &l4_ick,
Russell King44dc9d02009-01-19 15:51:11 +00002065 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002066 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002067 .recalc = &followparent_recalc,
2068};
2069
2070static struct clk ssi_ick = {
2071 .name = "ssi_ick",
Russell Kingbc51da42008-11-04 18:59:32 +00002072 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002073 .parent = &ssi_l4_ick,
2074 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2075 .enable_bit = OMAP3430_EN_SSI_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002076 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002077 .recalc = &followparent_recalc,
2078};
2079
2080/* REVISIT: Technically the TRM claims that this is CORE_CLK based,
2081 * but l4_ick makes more sense to me */
2082
2083static const struct clksel usb_l4_clksel[] = {
2084 { .parent = &l4_ick, .rates = div2_rates },
2085 { .parent = NULL },
2086};
2087
2088static struct clk usb_l4_ick = {
2089 .name = "usb_l4_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002090 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002091 .parent = &l4_ick,
2092 .init = &omap2_init_clksel_parent,
2093 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
2094 .enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
2095 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
2096 .clksel_mask = OMAP3430ES1_CLKSEL_FSHOSTUSB_MASK,
2097 .clksel = usb_l4_clksel,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002098 .recalc = &omap2_clksel_recalc,
2099};
2100
2101/* XXX MDM_INTC_ICK, SAD2D_ICK ?? */
2102
2103/* SECURITY_L4_ICK2 based clocks */
2104
2105static struct clk security_l4_ick2 = {
2106 .name = "security_l4_ick2",
Russell King57137182008-11-04 16:48:35 +00002107 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002108 .parent = &l4_ick,
Russell King44dc9d02009-01-19 15:51:11 +00002109 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002110 .recalc = &followparent_recalc,
2111};
2112
2113static struct clk aes1_ick = {
2114 .name = "aes1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002115 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002116 .parent = &security_l4_ick2,
2117 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2118 .enable_bit = OMAP3430_EN_AES1_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002119 .recalc = &followparent_recalc,
2120};
2121
2122static struct clk rng_ick = {
2123 .name = "rng_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002124 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002125 .parent = &security_l4_ick2,
2126 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2127 .enable_bit = OMAP3430_EN_RNG_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002128 .recalc = &followparent_recalc,
2129};
2130
2131static struct clk sha11_ick = {
2132 .name = "sha11_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002133 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002134 .parent = &security_l4_ick2,
2135 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2136 .enable_bit = OMAP3430_EN_SHA11_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002137 .recalc = &followparent_recalc,
2138};
2139
2140static struct clk des1_ick = {
2141 .name = "des1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002142 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002143 .parent = &security_l4_ick2,
2144 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
2145 .enable_bit = OMAP3430_EN_DES1_SHIFT,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002146 .recalc = &followparent_recalc,
2147};
2148
2149/* DSS */
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002150static const struct clksel dss1_alwon_fck_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +03002151 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002152 { .parent = &dpll4_m4x2_ck, .rates = dpll_locked_rates },
2153 { .parent = NULL }
2154};
Paul Walmsleyb045d082008-03-18 11:24:28 +02002155
2156static struct clk dss1_alwon_fck = {
2157 .name = "dss1_alwon_fck",
Russell Kingbc51da42008-11-04 18:59:32 +00002158 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002159 .parent = &dpll4_m4x2_ck,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002160 .init = &omap2_init_clksel_parent,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002161 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2162 .enable_bit = OMAP3430_EN_DSS1_SHIFT,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002163 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +03002164 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002165 .clksel = dss1_alwon_fck_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002166 .clkdm_name = "dss_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002167 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002168};
2169
2170static struct clk dss_tv_fck = {
2171 .name = "dss_tv_fck",
Russell Kingbc51da42008-11-04 18:59:32 +00002172 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002173 .parent = &omap_54m_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002174 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002175 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2176 .enable_bit = OMAP3430_EN_TV_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002177 .clkdm_name = "dss_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002178 .recalc = &followparent_recalc,
2179};
2180
2181static struct clk dss_96m_fck = {
2182 .name = "dss_96m_fck",
Russell Kingbc51da42008-11-04 18:59:32 +00002183 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002184 .parent = &omap_96m_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002185 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002186 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2187 .enable_bit = OMAP3430_EN_TV_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002188 .clkdm_name = "dss_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002189 .recalc = &followparent_recalc,
2190};
2191
2192static struct clk dss2_alwon_fck = {
2193 .name = "dss2_alwon_fck",
Russell Kingbc51da42008-11-04 18:59:32 +00002194 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002195 .parent = &sys_ck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002196 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002197 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2198 .enable_bit = OMAP3430_EN_DSS2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002199 .clkdm_name = "dss_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002200 .recalc = &followparent_recalc,
2201};
2202
2203static struct clk dss_ick = {
2204 /* Handles both L3 and L4 clocks */
2205 .name = "dss_ick",
Russell Kingbc51da42008-11-04 18:59:32 +00002206 .ops = &clkops_omap2_dflt,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002207 .parent = &l4_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03002208 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002209 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
2210 .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002211 .clkdm_name = "dss_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002212 .recalc = &followparent_recalc,
2213};
2214
2215/* CAM */
2216
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002217static const struct clksel cam_mclk_clksel[] = {
Paul Walmsley333943b2008-08-19 11:08:45 +03002218 { .parent = &sys_ck, .rates = dpll_bypass_rates },
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002219 { .parent = &dpll4_m5x2_ck, .rates = dpll_locked_rates },
2220 { .parent = NULL }
2221};
2222
Paul Walmsleyb045d082008-03-18 11:24:28 +02002223static struct clk cam_mclk = {
2224 .name = "cam_mclk",
Russell Kingb36ee722008-11-04 17:59:52 +00002225 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002226 .parent = &dpll4_m5x2_ck,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002227 .init = &omap2_init_clksel_parent,
2228 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
Paul Walmsley542313c2008-07-03 12:24:45 +03002229 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002230 .clksel = cam_mclk_clksel,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002231 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
2232 .enable_bit = OMAP3430_EN_CAM_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002233 .clkdm_name = "cam_clkdm",
Roman Tereshonkov3760d312008-03-13 21:35:09 +02002234 .recalc = &omap2_clksel_recalc,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002235};
2236
Högander Jouni59559022008-08-19 11:08:45 +03002237static struct clk cam_ick = {
2238 /* Handles both L3 and L4 clocks */
2239 .name = "cam_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002240 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002241 .parent = &l4_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03002242 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002243 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
2244 .enable_bit = OMAP3430_EN_CAM_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002245 .clkdm_name = "cam_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002246 .recalc = &followparent_recalc,
2247};
2248
Sergio Aguirre6c8fe0b2009-01-27 19:13:09 -07002249static struct clk csi2_96m_fck = {
2250 .name = "csi2_96m_fck",
2251 .ops = &clkops_omap2_dflt_wait,
2252 .parent = &core_96m_fck,
2253 .init = &omap2_init_clk_clkdm,
2254 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
2255 .enable_bit = OMAP3430_EN_CSI2_SHIFT,
2256 .clkdm_name = "cam_clkdm",
2257 .recalc = &followparent_recalc,
2258};
2259
Paul Walmsleyb045d082008-03-18 11:24:28 +02002260/* USBHOST - 3430ES2 only */
2261
2262static struct clk usbhost_120m_fck = {
2263 .name = "usbhost_120m_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002264 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002265 .parent = &omap_120m_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002266 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002267 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
2268 .enable_bit = OMAP3430ES2_EN_USBHOST2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002269 .clkdm_name = "usbhost_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002270 .recalc = &followparent_recalc,
2271};
2272
2273static struct clk usbhost_48m_fck = {
2274 .name = "usbhost_48m_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002275 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002276 .parent = &omap_48m_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002277 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002278 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
2279 .enable_bit = OMAP3430ES2_EN_USBHOST1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002280 .clkdm_name = "usbhost_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002281 .recalc = &followparent_recalc,
2282};
2283
Högander Jouni59559022008-08-19 11:08:45 +03002284static struct clk usbhost_ick = {
2285 /* Handles both L3 and L4 clocks */
2286 .name = "usbhost_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002287 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002288 .parent = &l4_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03002289 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002290 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
2291 .enable_bit = OMAP3430ES2_EN_USBHOST_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002292 .clkdm_name = "usbhost_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002293 .recalc = &followparent_recalc,
2294};
2295
Paul Walmsleyb045d082008-03-18 11:24:28 +02002296/* WKUP */
2297
2298static const struct clksel_rate usim_96m_rates[] = {
2299 { .div = 2, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
2300 { .div = 4, .val = 4, .flags = RATE_IN_343X },
2301 { .div = 8, .val = 5, .flags = RATE_IN_343X },
2302 { .div = 10, .val = 6, .flags = RATE_IN_343X },
2303 { .div = 0 },
2304};
2305
2306static const struct clksel_rate usim_120m_rates[] = {
2307 { .div = 4, .val = 7, .flags = RATE_IN_343X | DEFAULT_RATE },
2308 { .div = 8, .val = 8, .flags = RATE_IN_343X },
2309 { .div = 16, .val = 9, .flags = RATE_IN_343X },
2310 { .div = 20, .val = 10, .flags = RATE_IN_343X },
2311 { .div = 0 },
2312};
2313
2314static const struct clksel usim_clksel[] = {
2315 { .parent = &omap_96m_fck, .rates = usim_96m_rates },
2316 { .parent = &omap_120m_fck, .rates = usim_120m_rates },
2317 { .parent = &sys_ck, .rates = div2_rates },
2318 { .parent = NULL },
2319};
2320
2321/* 3430ES2 only */
2322static struct clk usim_fck = {
2323 .name = "usim_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002324 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002325 .init = &omap2_init_clksel_parent,
2326 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2327 .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT,
2328 .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
2329 .clksel_mask = OMAP3430ES2_CLKSEL_USIMOCP_MASK,
2330 .clksel = usim_clksel,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002331 .recalc = &omap2_clksel_recalc,
2332};
2333
Paul Walmsley333943b2008-08-19 11:08:45 +03002334/* XXX should gpt1's clksel have wkup_32k_fck as the 32k opt? */
Paul Walmsleyb045d082008-03-18 11:24:28 +02002335static struct clk gpt1_fck = {
2336 .name = "gpt1_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002337 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002338 .init = &omap2_init_clksel_parent,
2339 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2340 .enable_bit = OMAP3430_EN_GPT1_SHIFT,
2341 .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
2342 .clksel_mask = OMAP3430_CLKSEL_GPT1_MASK,
2343 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002344 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002345 .recalc = &omap2_clksel_recalc,
2346};
2347
2348static struct clk wkup_32k_fck = {
2349 .name = "wkup_32k_fck",
Russell King897dcde2008-11-04 16:35:03 +00002350 .ops = &clkops_null,
Paul Walmsley333943b2008-08-19 11:08:45 +03002351 .init = &omap2_init_clk_clkdm,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002352 .parent = &omap_32k_fck,
Russell King44dc9d02009-01-19 15:51:11 +00002353 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002354 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002355 .recalc = &followparent_recalc,
2356};
2357
Jouni Hogander89db9482008-12-10 17:35:24 -08002358static struct clk gpio1_dbck = {
2359 .name = "gpio1_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002360 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002361 .parent = &wkup_32k_fck,
2362 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2363 .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002364 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002365 .recalc = &followparent_recalc,
2366};
2367
2368static struct clk wdt2_fck = {
2369 .name = "wdt2_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002370 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002371 .parent = &wkup_32k_fck,
2372 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
2373 .enable_bit = OMAP3430_EN_WDT2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002374 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002375 .recalc = &followparent_recalc,
2376};
2377
2378static struct clk wkup_l4_ick = {
2379 .name = "wkup_l4_ick",
Russell King897dcde2008-11-04 16:35:03 +00002380 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002381 .parent = &sys_ck,
Russell King44dc9d02009-01-19 15:51:11 +00002382 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002383 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002384 .recalc = &followparent_recalc,
2385};
2386
2387/* 3430ES2 only */
2388/* Never specifically named in the TRM, so we have to infer a likely name */
2389static struct clk usim_ick = {
2390 .name = "usim_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002391 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002392 .parent = &wkup_l4_ick,
2393 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2394 .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002395 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002396 .recalc = &followparent_recalc,
2397};
2398
2399static struct clk wdt2_ick = {
2400 .name = "wdt2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002401 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002402 .parent = &wkup_l4_ick,
2403 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2404 .enable_bit = OMAP3430_EN_WDT2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002405 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002406 .recalc = &followparent_recalc,
2407};
2408
2409static struct clk wdt1_ick = {
2410 .name = "wdt1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002411 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002412 .parent = &wkup_l4_ick,
2413 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2414 .enable_bit = OMAP3430_EN_WDT1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002415 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002416 .recalc = &followparent_recalc,
2417};
2418
2419static struct clk gpio1_ick = {
2420 .name = "gpio1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002421 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002422 .parent = &wkup_l4_ick,
2423 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2424 .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002425 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002426 .recalc = &followparent_recalc,
2427};
2428
2429static struct clk omap_32ksync_ick = {
2430 .name = "omap_32ksync_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002431 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002432 .parent = &wkup_l4_ick,
2433 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2434 .enable_bit = OMAP3430_EN_32KSYNC_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002435 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002436 .recalc = &followparent_recalc,
2437};
2438
Paul Walmsley333943b2008-08-19 11:08:45 +03002439/* XXX This clock no longer exists in 3430 TRM rev F */
Paul Walmsleyb045d082008-03-18 11:24:28 +02002440static struct clk gpt12_ick = {
2441 .name = "gpt12_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002442 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002443 .parent = &wkup_l4_ick,
2444 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2445 .enable_bit = OMAP3430_EN_GPT12_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002446 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002447 .recalc = &followparent_recalc,
2448};
2449
2450static struct clk gpt1_ick = {
2451 .name = "gpt1_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002452 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002453 .parent = &wkup_l4_ick,
2454 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
2455 .enable_bit = OMAP3430_EN_GPT1_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002456 .clkdm_name = "wkup_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002457 .recalc = &followparent_recalc,
2458};
2459
2460
2461
2462/* PER clock domain */
2463
2464static struct clk per_96m_fck = {
2465 .name = "per_96m_fck",
Russell King57137182008-11-04 16:48:35 +00002466 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002467 .parent = &omap_96m_alwon_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002468 .init = &omap2_init_clk_clkdm,
Russell King44dc9d02009-01-19 15:51:11 +00002469 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002470 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002471 .recalc = &followparent_recalc,
2472};
2473
2474static struct clk per_48m_fck = {
2475 .name = "per_48m_fck",
Russell King57137182008-11-04 16:48:35 +00002476 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002477 .parent = &omap_48m_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002478 .init = &omap2_init_clk_clkdm,
Russell King44dc9d02009-01-19 15:51:11 +00002479 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002480 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002481 .recalc = &followparent_recalc,
2482};
2483
2484static struct clk uart3_fck = {
2485 .name = "uart3_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002486 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002487 .parent = &per_48m_fck,
2488 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2489 .enable_bit = OMAP3430_EN_UART3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002490 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002491 .recalc = &followparent_recalc,
2492};
2493
2494static struct clk gpt2_fck = {
2495 .name = "gpt2_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002496 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002497 .init = &omap2_init_clksel_parent,
2498 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2499 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
2500 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2501 .clksel_mask = OMAP3430_CLKSEL_GPT2_MASK,
2502 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002503 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002504 .recalc = &omap2_clksel_recalc,
2505};
2506
2507static struct clk gpt3_fck = {
2508 .name = "gpt3_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002509 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002510 .init = &omap2_init_clksel_parent,
2511 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2512 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
2513 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2514 .clksel_mask = OMAP3430_CLKSEL_GPT3_MASK,
2515 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002516 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002517 .recalc = &omap2_clksel_recalc,
2518};
2519
2520static struct clk gpt4_fck = {
2521 .name = "gpt4_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002522 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002523 .init = &omap2_init_clksel_parent,
2524 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2525 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
2526 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2527 .clksel_mask = OMAP3430_CLKSEL_GPT4_MASK,
2528 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002529 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002530 .recalc = &omap2_clksel_recalc,
2531};
2532
2533static struct clk gpt5_fck = {
2534 .name = "gpt5_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002535 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002536 .init = &omap2_init_clksel_parent,
2537 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2538 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
2539 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2540 .clksel_mask = OMAP3430_CLKSEL_GPT5_MASK,
2541 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002542 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002543 .recalc = &omap2_clksel_recalc,
2544};
2545
2546static struct clk gpt6_fck = {
2547 .name = "gpt6_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002548 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002549 .init = &omap2_init_clksel_parent,
2550 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2551 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
2552 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2553 .clksel_mask = OMAP3430_CLKSEL_GPT6_MASK,
2554 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002555 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002556 .recalc = &omap2_clksel_recalc,
2557};
2558
2559static struct clk gpt7_fck = {
2560 .name = "gpt7_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002561 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002562 .init = &omap2_init_clksel_parent,
2563 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2564 .enable_bit = OMAP3430_EN_GPT7_SHIFT,
2565 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2566 .clksel_mask = OMAP3430_CLKSEL_GPT7_MASK,
2567 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002568 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002569 .recalc = &omap2_clksel_recalc,
2570};
2571
2572static struct clk gpt8_fck = {
2573 .name = "gpt8_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002574 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002575 .init = &omap2_init_clksel_parent,
2576 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2577 .enable_bit = OMAP3430_EN_GPT8_SHIFT,
2578 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2579 .clksel_mask = OMAP3430_CLKSEL_GPT8_MASK,
2580 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002581 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002582 .recalc = &omap2_clksel_recalc,
2583};
2584
2585static struct clk gpt9_fck = {
2586 .name = "gpt9_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002587 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002588 .init = &omap2_init_clksel_parent,
2589 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2590 .enable_bit = OMAP3430_EN_GPT9_SHIFT,
2591 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
2592 .clksel_mask = OMAP3430_CLKSEL_GPT9_MASK,
2593 .clksel = omap343x_gpt_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002594 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002595 .recalc = &omap2_clksel_recalc,
2596};
2597
2598static struct clk per_32k_alwon_fck = {
2599 .name = "per_32k_alwon_fck",
Russell King897dcde2008-11-04 16:35:03 +00002600 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002601 .parent = &omap_32k_fck,
Paul Walmsley333943b2008-08-19 11:08:45 +03002602 .clkdm_name = "per_clkdm",
Russell King44dc9d02009-01-19 15:51:11 +00002603 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002604 .recalc = &followparent_recalc,
2605};
2606
Jouni Hogander89db9482008-12-10 17:35:24 -08002607static struct clk gpio6_dbck = {
2608 .name = "gpio6_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002609 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002610 .parent = &per_32k_alwon_fck,
2611 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
Jouni Höganderc3aa044a2008-03-28 14:57:50 +02002612 .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002613 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002614 .recalc = &followparent_recalc,
2615};
2616
Jouni Hogander89db9482008-12-10 17:35:24 -08002617static struct clk gpio5_dbck = {
2618 .name = "gpio5_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002619 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002620 .parent = &per_32k_alwon_fck,
2621 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
Jouni Höganderc3aa044a2008-03-28 14:57:50 +02002622 .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002623 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002624 .recalc = &followparent_recalc,
2625};
2626
Jouni Hogander89db9482008-12-10 17:35:24 -08002627static struct clk gpio4_dbck = {
2628 .name = "gpio4_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002629 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002630 .parent = &per_32k_alwon_fck,
2631 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
Jouni Höganderc3aa044a2008-03-28 14:57:50 +02002632 .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002633 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002634 .recalc = &followparent_recalc,
2635};
2636
Jouni Hogander89db9482008-12-10 17:35:24 -08002637static struct clk gpio3_dbck = {
2638 .name = "gpio3_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002639 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002640 .parent = &per_32k_alwon_fck,
2641 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
Jouni Höganderc3aa044a2008-03-28 14:57:50 +02002642 .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002643 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002644 .recalc = &followparent_recalc,
2645};
2646
Jouni Hogander89db9482008-12-10 17:35:24 -08002647static struct clk gpio2_dbck = {
2648 .name = "gpio2_dbck",
Russell Kingb36ee722008-11-04 17:59:52 +00002649 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002650 .parent = &per_32k_alwon_fck,
2651 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
Jouni Höganderc3aa044a2008-03-28 14:57:50 +02002652 .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002653 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002654 .recalc = &followparent_recalc,
2655};
2656
2657static struct clk wdt3_fck = {
2658 .name = "wdt3_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002659 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002660 .parent = &per_32k_alwon_fck,
2661 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2662 .enable_bit = OMAP3430_EN_WDT3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002663 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002664 .recalc = &followparent_recalc,
2665};
2666
2667static struct clk per_l4_ick = {
2668 .name = "per_l4_ick",
Russell King57137182008-11-04 16:48:35 +00002669 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002670 .parent = &l4_ick,
Russell King44dc9d02009-01-19 15:51:11 +00002671 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002672 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002673 .recalc = &followparent_recalc,
2674};
2675
2676static struct clk gpio6_ick = {
2677 .name = "gpio6_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002678 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002679 .parent = &per_l4_ick,
2680 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2681 .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002682 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002683 .recalc = &followparent_recalc,
2684};
2685
2686static struct clk gpio5_ick = {
2687 .name = "gpio5_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002688 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002689 .parent = &per_l4_ick,
2690 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2691 .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002692 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002693 .recalc = &followparent_recalc,
2694};
2695
2696static struct clk gpio4_ick = {
2697 .name = "gpio4_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002698 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002699 .parent = &per_l4_ick,
2700 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2701 .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002702 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002703 .recalc = &followparent_recalc,
2704};
2705
2706static struct clk gpio3_ick = {
2707 .name = "gpio3_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002708 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002709 .parent = &per_l4_ick,
2710 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2711 .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002712 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002713 .recalc = &followparent_recalc,
2714};
2715
2716static struct clk gpio2_ick = {
2717 .name = "gpio2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002718 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002719 .parent = &per_l4_ick,
2720 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2721 .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002722 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002723 .recalc = &followparent_recalc,
2724};
2725
2726static struct clk wdt3_ick = {
2727 .name = "wdt3_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002728 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002729 .parent = &per_l4_ick,
2730 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2731 .enable_bit = OMAP3430_EN_WDT3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002732 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002733 .recalc = &followparent_recalc,
2734};
2735
2736static struct clk uart3_ick = {
2737 .name = "uart3_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002738 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002739 .parent = &per_l4_ick,
2740 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2741 .enable_bit = OMAP3430_EN_UART3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002742 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002743 .recalc = &followparent_recalc,
2744};
2745
2746static struct clk gpt9_ick = {
2747 .name = "gpt9_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002748 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002749 .parent = &per_l4_ick,
2750 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2751 .enable_bit = OMAP3430_EN_GPT9_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002752 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002753 .recalc = &followparent_recalc,
2754};
2755
2756static struct clk gpt8_ick = {
2757 .name = "gpt8_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002758 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002759 .parent = &per_l4_ick,
2760 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2761 .enable_bit = OMAP3430_EN_GPT8_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002762 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002763 .recalc = &followparent_recalc,
2764};
2765
2766static struct clk gpt7_ick = {
2767 .name = "gpt7_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002768 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002769 .parent = &per_l4_ick,
2770 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2771 .enable_bit = OMAP3430_EN_GPT7_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002772 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002773 .recalc = &followparent_recalc,
2774};
2775
2776static struct clk gpt6_ick = {
2777 .name = "gpt6_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002778 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002779 .parent = &per_l4_ick,
2780 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2781 .enable_bit = OMAP3430_EN_GPT6_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002782 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002783 .recalc = &followparent_recalc,
2784};
2785
2786static struct clk gpt5_ick = {
2787 .name = "gpt5_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002788 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002789 .parent = &per_l4_ick,
2790 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2791 .enable_bit = OMAP3430_EN_GPT5_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002792 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002793 .recalc = &followparent_recalc,
2794};
2795
2796static struct clk gpt4_ick = {
2797 .name = "gpt4_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002798 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002799 .parent = &per_l4_ick,
2800 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2801 .enable_bit = OMAP3430_EN_GPT4_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002802 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002803 .recalc = &followparent_recalc,
2804};
2805
2806static struct clk gpt3_ick = {
2807 .name = "gpt3_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002808 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002809 .parent = &per_l4_ick,
2810 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2811 .enable_bit = OMAP3430_EN_GPT3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002812 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002813 .recalc = &followparent_recalc,
2814};
2815
2816static struct clk gpt2_ick = {
2817 .name = "gpt2_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002818 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002819 .parent = &per_l4_ick,
2820 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2821 .enable_bit = OMAP3430_EN_GPT2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002822 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002823 .recalc = &followparent_recalc,
2824};
2825
2826static struct clk mcbsp2_ick = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002827 .name = "mcbsp_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002828 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002829 .id = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002830 .parent = &per_l4_ick,
2831 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2832 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002833 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002834 .recalc = &followparent_recalc,
2835};
2836
2837static struct clk mcbsp3_ick = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002838 .name = "mcbsp_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002839 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002840 .id = 3,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002841 .parent = &per_l4_ick,
2842 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2843 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002844 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002845 .recalc = &followparent_recalc,
2846};
2847
2848static struct clk mcbsp4_ick = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002849 .name = "mcbsp_ick",
Russell Kingb36ee722008-11-04 17:59:52 +00002850 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002851 .id = 4,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002852 .parent = &per_l4_ick,
2853 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
2854 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
Paul Walmsley333943b2008-08-19 11:08:45 +03002855 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002856 .recalc = &followparent_recalc,
2857};
2858
2859static const struct clksel mcbsp_234_clksel[] = {
Paul Walmsley9cfd9852009-01-27 19:13:02 -07002860 { .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
2861 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
Paul Walmsleyb045d082008-03-18 11:24:28 +02002862 { .parent = NULL }
2863};
2864
2865static struct clk mcbsp2_fck = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002866 .name = "mcbsp_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002867 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002868 .id = 2,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002869 .init = &omap2_init_clksel_parent,
2870 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2871 .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
2872 .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
2873 .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
2874 .clksel = mcbsp_234_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002875 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002876 .recalc = &omap2_clksel_recalc,
2877};
2878
2879static struct clk mcbsp3_fck = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002880 .name = "mcbsp_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002881 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002882 .id = 3,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002883 .init = &omap2_init_clksel_parent,
2884 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2885 .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
2886 .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
2887 .clksel_mask = OMAP2_MCBSP3_CLKS_MASK,
2888 .clksel = mcbsp_234_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002889 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002890 .recalc = &omap2_clksel_recalc,
2891};
2892
2893static struct clk mcbsp4_fck = {
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002894 .name = "mcbsp_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00002895 .ops = &clkops_omap2_dflt_wait,
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002896 .id = 4,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002897 .init = &omap2_init_clksel_parent,
2898 .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
2899 .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
2900 .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
2901 .clksel_mask = OMAP2_MCBSP4_CLKS_MASK,
2902 .clksel = mcbsp_234_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03002903 .clkdm_name = "per_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002904 .recalc = &omap2_clksel_recalc,
2905};
2906
2907/* EMU clocks */
2908
2909/* More information: ARM Cortex-A8 Technical Reference Manual, sect 10.1 */
2910
2911static const struct clksel_rate emu_src_sys_rates[] = {
2912 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
2913 { .div = 0 },
2914};
2915
2916static const struct clksel_rate emu_src_core_rates[] = {
2917 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
2918 { .div = 0 },
2919};
2920
2921static const struct clksel_rate emu_src_per_rates[] = {
2922 { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
2923 { .div = 0 },
2924};
2925
2926static const struct clksel_rate emu_src_mpu_rates[] = {
2927 { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
2928 { .div = 0 },
2929};
2930
2931static const struct clksel emu_src_clksel[] = {
2932 { .parent = &sys_ck, .rates = emu_src_sys_rates },
2933 { .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
2934 { .parent = &emu_per_alwon_ck, .rates = emu_src_per_rates },
2935 { .parent = &emu_mpu_alwon_ck, .rates = emu_src_mpu_rates },
2936 { .parent = NULL },
2937};
2938
2939/*
2940 * Like the clkout_src clocks, emu_src_clk is a virtual clock, existing only
2941 * to switch the source of some of the EMU clocks.
2942 * XXX Are there CLKEN bits for these EMU clks?
2943 */
2944static struct clk emu_src_ck = {
2945 .name = "emu_src_ck",
Russell King897dcde2008-11-04 16:35:03 +00002946 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002947 .init = &omap2_init_clksel_parent,
2948 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2949 .clksel_mask = OMAP3430_MUX_CTRL_MASK,
2950 .clksel = emu_src_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00002951 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002952 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002953 .recalc = &omap2_clksel_recalc,
2954};
2955
2956static const struct clksel_rate pclk_emu_rates[] = {
2957 { .div = 2, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
2958 { .div = 3, .val = 3, .flags = RATE_IN_343X },
2959 { .div = 4, .val = 4, .flags = RATE_IN_343X },
2960 { .div = 6, .val = 6, .flags = RATE_IN_343X },
2961 { .div = 0 },
2962};
2963
2964static const struct clksel pclk_emu_clksel[] = {
2965 { .parent = &emu_src_ck, .rates = pclk_emu_rates },
2966 { .parent = NULL },
2967};
2968
2969static struct clk pclk_fck = {
2970 .name = "pclk_fck",
Russell King897dcde2008-11-04 16:35:03 +00002971 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002972 .init = &omap2_init_clksel_parent,
2973 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2974 .clksel_mask = OMAP3430_CLKSEL_PCLK_MASK,
2975 .clksel = pclk_emu_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00002976 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03002977 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02002978 .recalc = &omap2_clksel_recalc,
2979};
2980
2981static const struct clksel_rate pclkx2_emu_rates[] = {
2982 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
2983 { .div = 2, .val = 2, .flags = RATE_IN_343X },
2984 { .div = 3, .val = 3, .flags = RATE_IN_343X },
2985 { .div = 0 },
2986};
2987
2988static const struct clksel pclkx2_emu_clksel[] = {
2989 { .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
2990 { .parent = NULL },
2991};
2992
2993static struct clk pclkx2_fck = {
2994 .name = "pclkx2_fck",
Russell King897dcde2008-11-04 16:35:03 +00002995 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02002996 .init = &omap2_init_clksel_parent,
2997 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
2998 .clksel_mask = OMAP3430_CLKSEL_PCLKX2_MASK,
2999 .clksel = pclkx2_emu_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00003000 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03003001 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02003002 .recalc = &omap2_clksel_recalc,
3003};
3004
3005static const struct clksel atclk_emu_clksel[] = {
3006 { .parent = &emu_src_ck, .rates = div2_rates },
3007 { .parent = NULL },
3008};
3009
3010static struct clk atclk_fck = {
3011 .name = "atclk_fck",
Russell King897dcde2008-11-04 16:35:03 +00003012 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003013 .init = &omap2_init_clksel_parent,
3014 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
3015 .clksel_mask = OMAP3430_CLKSEL_ATCLK_MASK,
3016 .clksel = atclk_emu_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00003017 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03003018 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02003019 .recalc = &omap2_clksel_recalc,
3020};
3021
3022static struct clk traceclk_src_fck = {
3023 .name = "traceclk_src_fck",
Russell King897dcde2008-11-04 16:35:03 +00003024 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003025 .init = &omap2_init_clksel_parent,
3026 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
3027 .clksel_mask = OMAP3430_TRACE_MUX_CTRL_MASK,
3028 .clksel = emu_src_clksel,
Russell King44dc9d02009-01-19 15:51:11 +00003029 .flags = RATE_PROPAGATES,
Paul Walmsley333943b2008-08-19 11:08:45 +03003030 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02003031 .recalc = &omap2_clksel_recalc,
3032};
3033
3034static const struct clksel_rate traceclk_rates[] = {
3035 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
3036 { .div = 2, .val = 2, .flags = RATE_IN_343X },
3037 { .div = 4, .val = 4, .flags = RATE_IN_343X },
3038 { .div = 0 },
3039};
3040
3041static const struct clksel traceclk_clksel[] = {
3042 { .parent = &traceclk_src_fck, .rates = traceclk_rates },
3043 { .parent = NULL },
3044};
3045
3046static struct clk traceclk_fck = {
3047 .name = "traceclk_fck",
Russell King897dcde2008-11-04 16:35:03 +00003048 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003049 .init = &omap2_init_clksel_parent,
3050 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
3051 .clksel_mask = OMAP3430_CLKSEL_TRACECLK_MASK,
3052 .clksel = traceclk_clksel,
Paul Walmsley333943b2008-08-19 11:08:45 +03003053 .clkdm_name = "emu_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02003054 .recalc = &omap2_clksel_recalc,
3055};
3056
3057/* SR clocks */
3058
3059/* SmartReflex fclk (VDD1) */
3060static struct clk sr1_fck = {
3061 .name = "sr1_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00003062 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003063 .parent = &sys_ck,
3064 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
3065 .enable_bit = OMAP3430_EN_SR1_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +00003066 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003067 .recalc = &followparent_recalc,
3068};
3069
3070/* SmartReflex fclk (VDD2) */
3071static struct clk sr2_fck = {
3072 .name = "sr2_fck",
Russell Kingb36ee722008-11-04 17:59:52 +00003073 .ops = &clkops_omap2_dflt_wait,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003074 .parent = &sys_ck,
3075 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
3076 .enable_bit = OMAP3430_EN_SR2_SHIFT,
Russell King44dc9d02009-01-19 15:51:11 +00003077 .flags = RATE_PROPAGATES,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003078 .recalc = &followparent_recalc,
3079};
3080
3081static struct clk sr_l4_ick = {
3082 .name = "sr_l4_ick",
Russell King897dcde2008-11-04 16:35:03 +00003083 .ops = &clkops_null, /* RMK: missing? */
Paul Walmsleyb045d082008-03-18 11:24:28 +02003084 .parent = &l4_ick,
Paul Walmsley333943b2008-08-19 11:08:45 +03003085 .clkdm_name = "core_l4_clkdm",
Paul Walmsleyb045d082008-03-18 11:24:28 +02003086 .recalc = &followparent_recalc,
3087};
3088
3089/* SECURE_32K_FCK clocks */
3090
Paul Walmsley333943b2008-08-19 11:08:45 +03003091/* XXX This clock no longer exists in 3430 TRM rev F */
Paul Walmsleyb045d082008-03-18 11:24:28 +02003092static struct clk gpt12_fck = {
3093 .name = "gpt12_fck",
Russell King897dcde2008-11-04 16:35:03 +00003094 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003095 .parent = &secure_32k_fck,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003096 .recalc = &followparent_recalc,
3097};
3098
3099static struct clk wdt1_fck = {
3100 .name = "wdt1_fck",
Russell King897dcde2008-11-04 16:35:03 +00003101 .ops = &clkops_null,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003102 .parent = &secure_32k_fck,
Paul Walmsleyb045d082008-03-18 11:24:28 +02003103 .recalc = &followparent_recalc,
3104};
3105
Paul Walmsleyb045d082008-03-18 11:24:28 +02003106#endif