Blame view

arch/arm/mach-omap2/clock2420_data.c 59.8 KB
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1
  /*
8c810e7e1   Paul Walmsley   OMAP2xxx: clock d...
2
   * OMAP2420 clock data
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
3
   *
8c810e7e1   Paul Walmsley   OMAP2xxx: clock d...
4
5
   * Copyright (C) 2005-2009 Texas Instruments, Inc.
   * Copyright (C) 2004-2011 Nokia Corporation
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
6
   *
8c810e7e1   Paul Walmsley   OMAP2xxx: clock d...
7
8
9
   * Contacts:
   * Richard Woodruff <r-woodruff2@ti.com>
   * Paul Walmsley
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
10
11
12
13
14
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
d8a944582   Paul Walmsley   OMAP2 clock: conv...
15
16
  #include <linux/kernel.h>
  #include <linux/clk.h>
93340a229   Paul Walmsley   OMAP2/3/4 clock: ...
17
  #include <linux/list.h>
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
18

d8a944582   Paul Walmsley   OMAP2 clock: conv...
19
  #include <plat/clkdev_omap.h>
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
20

d8a944582   Paul Walmsley   OMAP2 clock: conv...
21
22
23
  #include "clock.h"
  #include "clock2xxx.h"
  #include "opp2xxx.h"
59fb659b0   Paul Walmsley   OMAP2/3: PRCM: sp...
24
25
  #include "cm2xxx_3xxx.h"
  #include "prm2xxx_3xxx.h"
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
26
27
28
  #include "prm-regbits-24xx.h"
  #include "cm-regbits-24xx.h"
  #include "sdrc.h"
4814ced51   Paul Walmsley   OMAP: control: mo...
29
  #include "control.h"
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
30

81b34fbec   Paul Walmsley   OMAP2 clock: spli...
31
32
33
34
  #define OMAP_CM_REGADDR                 OMAP2420_CM_REGADDR
  
  /*
   * 2420 clock tree.
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
35
   *
8c810e7e1   Paul Walmsley   OMAP2xxx: clock d...
36
37
38
   * NOTE:In many cases here we are assigning a 'default' parent. In
   *	many cases the parent is selectable. The set parent calls will
   *	also switch sources.
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
39
40
41
42
43
   *
   *	Several sources are given initial rates which may be wrong, this will
   *	be fixed up in the init func.
   *
   *	Things are broadly separated below by clock domains. It is
8c810e7e1   Paul Walmsley   OMAP2xxx: clock d...
44
   *	noteworthy that most peripherals have dependencies on multiple clock
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
45
46
47
   *	domains. Many get their interface clocks from the L4 domain, but get
   *	functional clocks from fixed sources or other core domain derived
   *	clocks.
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
48
   */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
49
50
51
52
  
  /* Base external input clocks */
  static struct clk func_32k_ck = {
  	.name		= "func_32k_ck",
897dcded6   Russell King   [ARM] omap: provi...
53
  	.ops		= &clkops_null,
3f9cfd3a4   Paul Walmsley   OMAP2xxx: clock: ...
54
  	.rate		= 32768,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
55
  	.clkdm_name	= "wkup_clkdm",
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
56
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
57

f248076c0   Paul Walmsley   OMAP2/3 GPTIMER: ...
58
59
60
61
  static struct clk secure_32k_ck = {
  	.name		= "secure_32k_ck",
  	.ops		= &clkops_null,
  	.rate		= 32768,
f248076c0   Paul Walmsley   OMAP2/3 GPTIMER: ...
62
63
  	.clkdm_name	= "wkup_clkdm",
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
64
65
66
  /* Typical 12/13MHz in standalone mode, will be 26Mhz in chassis mode */
  static struct clk osc_ck = {		/* (*12, *13, 19.2, *26, 38.4)MHz */
  	.name		= "osc_ck",
548d84957   Russell King   [ARM] omap: intro...
67
  	.ops		= &clkops_oscck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
68
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
69
  	.recalc		= &omap2_osc_clk_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
70
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
71
  /* Without modem likely 12MHz, with modem likely 13MHz */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
72
73
  static struct clk sys_ck = {		/* (*12, *13, 19.2, 26, 38.4)MHz */
  	.name		= "sys_ck",		/* ~ ref_clk also */
897dcded6   Russell King   [ARM] omap: provi...
74
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
75
  	.parent		= &osc_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
76
  	.clkdm_name	= "wkup_clkdm",
44da0a510   Paul Walmsley   OMAP2xxx clock: m...
77
  	.recalc		= &omap2xxx_sys_clk_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
78
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
79

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
80
81
  static struct clk alt_ck = {		/* Typical 54M or 48M, may not exist */
  	.name		= "alt_ck",
897dcded6   Russell King   [ARM] omap: provi...
82
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
83
  	.rate		= 54000000,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
84
  	.clkdm_name	= "wkup_clkdm",
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
85
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
86

1bccb345b   Paul Walmsley   OMAP2420: clock: ...
87
88
89
90
91
  /* Optional external clock input for McBSP CLKS */
  static struct clk mcbsp_clks = {
  	.name		= "mcbsp_clks",
  	.ops		= &clkops_null,
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
92
93
94
95
96
  /*
   * Analog domain root source clocks
   */
  
  /* dpll_ck, is broken out in to special cases through clksel */
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
97
98
99
  /* REVISIT: Rate changes on dpll_ck trigger a full set change.	...
   * deal with this
   */
88b8ba905   Paul Walmsley   ARM: OMAP2: Clock...
100
  static struct dpll_data dpll_dd = {
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
101
102
103
  	.mult_div1_reg		= OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  	.mult_mask		= OMAP24XX_DPLL_MULT_MASK,
  	.div1_mask		= OMAP24XX_DPLL_DIV_MASK,
c0bf31320   Russell King   [ARM] omap: add s...
104
105
106
107
  	.clk_bypass		= &sys_ck,
  	.clk_ref		= &sys_ck,
  	.control_reg		= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  	.enable_mask		= OMAP24XX_EN_DPLL_MASK,
93340a229   Paul Walmsley   OMAP2/3/4 clock: ...
108
  	.max_multiplier		= 1023,
95f538ac3   Paul Walmsley   [ARM] OMAP3 clock...
109
  	.min_divider		= 1,
88b8ba905   Paul Walmsley   ARM: OMAP2: Clock...
110
  	.max_divider		= 16,
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
111
  };
88b8ba905   Paul Walmsley   ARM: OMAP2: Clock...
112
113
114
115
  /*
   * XXX Cannot add round_rate here yet, as this is still a composite clock,
   * not just a DPLL
   */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
116
117
  static struct clk dpll_ck = {
  	.name		= "dpll_ck",
0fd0c21be   Paul Walmsley   OMAP2: clock: add...
118
  	.ops		= &clkops_omap2xxx_dpll_ops,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
119
  	.parent		= &sys_ck,		/* Can be func_32k also */
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
120
  	.dpll_data	= &dpll_dd,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
121
  	.clkdm_name	= "wkup_clkdm",
88b8ba905   Paul Walmsley   ARM: OMAP2: Clock...
122
123
  	.recalc		= &omap2_dpllcore_recalc,
  	.set_rate	= &omap2_reprogram_dpllcore,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
124
125
126
127
  };
  
  static struct clk apll96_ck = {
  	.name		= "apll96_ck",
06b16939a   Paul Walmsley   OMAP2 clock: APLL...
128
  	.ops		= &clkops_apll96,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
129
130
  	.parent		= &sys_ck,
  	.rate		= 96000000,
51c195416   Paul Walmsley   OMAP clock: drop ...
131
  	.flags		= ENABLE_ON_INIT,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
132
  	.clkdm_name	= "wkup_clkdm",
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
133
134
  	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  	.enable_bit	= OMAP24XX_EN_96M_PLL_SHIFT,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
135
136
137
138
  };
  
  static struct clk apll54_ck = {
  	.name		= "apll54_ck",
06b16939a   Paul Walmsley   OMAP2 clock: APLL...
139
  	.ops		= &clkops_apll54,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
140
141
  	.parent		= &sys_ck,
  	.rate		= 54000000,
51c195416   Paul Walmsley   OMAP clock: drop ...
142
  	.flags		= ENABLE_ON_INIT,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
143
  	.clkdm_name	= "wkup_clkdm",
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
144
145
  	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  	.enable_bit	= OMAP24XX_EN_54M_PLL_SHIFT,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
146
147
148
149
150
  };
  
  /*
   * PRCM digital base sources
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
151
152
153
154
  
  /* func_54m_ck */
  
  static const struct clksel_rate func_54m_apll54_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
155
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
156
157
158
159
  	{ .div = 0 },
  };
  
  static const struct clksel_rate func_54m_alt_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
160
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
161
162
163
164
165
166
167
168
  	{ .div = 0 },
  };
  
  static const struct clksel func_54m_clksel[] = {
  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
  	{ .parent = NULL },
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
169
170
  static struct clk func_54m_ck = {
  	.name		= "func_54m_ck",
57137181e   Russell King   [ARM] omap: kill ...
171
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
172
  	.parent		= &apll54_ck,	/* can also be alt_clk */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
173
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
174
175
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
f38ca10a7   Paul Walmsley   OMAP2 PRCM: conve...
176
  	.clksel_mask	= OMAP24XX_54M_SOURCE_MASK,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
177
178
  	.clksel		= func_54m_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
179
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
180

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
181
182
  static struct clk core_ck = {
  	.name		= "core_ck",
897dcded6   Russell King   [ARM] omap: provi...
183
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
184
  	.parent		= &dpll_ck,		/* can also be 32k */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
185
  	.clkdm_name	= "wkup_clkdm",
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
186
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
187
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
188

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
189
190
  static struct clk func_96m_ck = {
  	.name		= "func_96m_ck",
57137181e   Russell King   [ARM] omap: kill ...
191
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
192
  	.parent		= &apll96_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
193
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
194
  	.recalc		= &followparent_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
195
196
197
198
199
  };
  
  /* func_48m_ck */
  
  static const struct clksel_rate func_48m_apll96_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
200
  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
201
202
203
204
  	{ .div = 0 },
  };
  
  static const struct clksel_rate func_48m_alt_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
205
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
206
207
208
209
210
211
212
  	{ .div = 0 },
  };
  
  static const struct clksel func_48m_clksel[] = {
  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
213
214
215
216
  };
  
  static struct clk func_48m_ck = {
  	.name		= "func_48m_ck",
57137181e   Russell King   [ARM] omap: kill ...
217
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
218
  	.parent		= &apll96_ck,	 /* 96M or Alt */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
219
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
220
221
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
f38ca10a7   Paul Walmsley   OMAP2 PRCM: conve...
222
  	.clksel_mask	= OMAP24XX_48M_SOURCE_MASK,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
223
224
225
226
  	.clksel		= func_48m_clksel,
  	.recalc		= &omap2_clksel_recalc,
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
227
228
229
230
  };
  
  static struct clk func_12m_ck = {
  	.name		= "func_12m_ck",
57137181e   Russell King   [ARM] omap: kill ...
231
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
232
  	.parent		= &func_48m_ck,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
233
  	.fixed_div	= 4,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
234
  	.clkdm_name	= "wkup_clkdm",
e9b98f604   Paul Walmsley   OMAP clock: make ...
235
  	.recalc		= &omap_fixed_divisor_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
236
237
238
239
240
  };
  
  /* Secure timer, only available in secure mode */
  static struct clk wdt1_osc_ck = {
  	.name		= "ck_wdt1_osc",
897dcded6   Russell King   [ARM] omap: provi...
241
  	.ops		= &clkops_null, /* RMK: missing? */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
242
  	.parent		= &osc_ck,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
243
244
245
246
247
248
249
250
251
252
253
254
  	.recalc		= &followparent_recalc,
  };
  
  /*
   * The common_clkout* clksel_rate structs are common to
   * sys_clkout, sys_clkout_src, sys_clkout2, and sys_clkout2_src.
   * sys_clkout2_* are 2420-only, so the
   * clksel_rate flags fields are inaccurate for those clocks. This is
   * harmless since access to those clocks are gated by the struct clk
   * flags fields, which mark them as 2420-only.
   */
  static const struct clksel_rate common_clkout_src_core_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
255
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
256
257
258
259
  	{ .div = 0 }
  };
  
  static const struct clksel_rate common_clkout_src_sys_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
260
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
261
262
263
264
  	{ .div = 0 }
  };
  
  static const struct clksel_rate common_clkout_src_96m_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
265
  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
266
267
268
269
  	{ .div = 0 }
  };
  
  static const struct clksel_rate common_clkout_src_54m_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
270
  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
271
272
273
274
275
276
277
278
279
280
281
282
283
  	{ .div = 0 }
  };
  
  static const struct clksel common_clkout_src_clksel[] = {
  	{ .parent = &core_ck,	  .rates = common_clkout_src_core_rates },
  	{ .parent = &sys_ck,	  .rates = common_clkout_src_sys_rates },
  	{ .parent = &func_96m_ck, .rates = common_clkout_src_96m_rates },
  	{ .parent = &func_54m_ck, .rates = common_clkout_src_54m_rates },
  	{ .parent = NULL }
  };
  
  static struct clk sys_clkout_src = {
  	.name		= "sys_clkout_src",
c1168dc31   Russell King   [ARM] omap: don't...
284
  	.ops		= &clkops_omap2_dflt,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
285
  	.parent		= &func_54m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
286
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
287
  	.enable_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
288
289
  	.enable_bit	= OMAP24XX_CLKOUT_EN_SHIFT,
  	.init		= &omap2_init_clksel_parent,
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
290
  	.clksel_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
291
292
293
294
295
296
297
298
  	.clksel_mask	= OMAP24XX_CLKOUT_SOURCE_MASK,
  	.clksel		= common_clkout_src_clksel,
  	.recalc		= &omap2_clksel_recalc,
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
  };
  
  static const struct clksel_rate common_clkout_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
299
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
300
301
302
303
304
305
306
307
308
309
  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
  	{ .div = 8, .val = 3, .flags = RATE_IN_24XX },
  	{ .div = 16, .val = 4, .flags = RATE_IN_24XX },
  	{ .div = 0 },
  };
  
  static const struct clksel sys_clkout_clksel[] = {
  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
310
311
312
313
  };
  
  static struct clk sys_clkout = {
  	.name		= "sys_clkout",
57137181e   Russell King   [ARM] omap: kill ...
314
  	.ops		= &clkops_null,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
315
  	.parent		= &sys_clkout_src,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
316
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
317
  	.clksel_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
318
319
320
321
322
323
324
325
326
327
  	.clksel_mask	= OMAP24XX_CLKOUT_DIV_MASK,
  	.clksel		= sys_clkout_clksel,
  	.recalc		= &omap2_clksel_recalc,
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
  };
  
  /* In 2430, new in 2420 ES2 */
  static struct clk sys_clkout2_src = {
  	.name		= "sys_clkout2_src",
c1168dc31   Russell King   [ARM] omap: don't...
328
  	.ops		= &clkops_omap2_dflt,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
329
  	.parent		= &func_54m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
330
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
331
  	.enable_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
332
333
  	.enable_bit	= OMAP2420_CLKOUT2_EN_SHIFT,
  	.init		= &omap2_init_clksel_parent,
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
334
  	.clksel_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
335
336
  	.clksel_mask	= OMAP2420_CLKOUT2_SOURCE_MASK,
  	.clksel		= common_clkout_src_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
337
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
338
339
340
341
342
343
344
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
  };
  
  static const struct clksel sys_clkout2_clksel[] = {
  	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates },
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
345
346
347
348
349
  };
  
  /* In 2430, new in 2420 ES2 */
  static struct clk sys_clkout2 = {
  	.name		= "sys_clkout2",
57137181e   Russell King   [ARM] omap: kill ...
350
  	.ops		= &clkops_null,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
351
  	.parent		= &sys_clkout2_src,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
352
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
353
  	.clksel_reg	= OMAP2420_PRCM_CLKOUT_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
354
355
  	.clksel_mask	= OMAP2420_CLKOUT2_DIV_MASK,
  	.clksel		= sys_clkout2_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
356
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
357
358
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
359
  };
b824efae1   Tony Lindgren   [ARM] 3426/1: ARM...
360
361
  static struct clk emul_ck = {
  	.name		= "emul_ck",
c1168dc31   Russell King   [ARM] omap: don't...
362
  	.ops		= &clkops_omap2_dflt,
b824efae1   Tony Lindgren   [ARM] 3426/1: ARM...
363
  	.parent		= &func_54m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
364
  	.clkdm_name	= "wkup_clkdm",
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
365
  	.enable_reg	= OMAP2420_PRCM_CLKEMUL_CTRL,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
366
367
  	.enable_bit	= OMAP24XX_EMULATION_EN_SHIFT,
  	.recalc		= &followparent_recalc,
b824efae1   Tony Lindgren   [ARM] 3426/1: ARM...
368
369
  
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
370

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
371
372
373
374
375
376
377
378
379
380
  /*
   * MPU clock domain
   *	Clocks:
   *		MPU_FCLK, MPU_ICLK
   *		INT_M_FCLK, INT_M_I_CLK
   *
   * - Individual clocks are hardware managed.
   * - Base divider comes from: CM_CLKSEL_MPU
   *
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
381
  static const struct clksel_rate mpu_core_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
382
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
383
384
385
386
387
388
389
390
391
392
393
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
  	{ .div = 6, .val = 6, .flags = RATE_IN_242X },
  	{ .div = 8, .val = 8, .flags = RATE_IN_242X },
  	{ .div = 0 },
  };
  
  static const struct clksel mpu_clksel[] = {
  	{ .parent = &core_ck, .rates = mpu_core_rates },
  	{ .parent = NULL }
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
394
395
  static struct clk mpu_ck = {	/* Control cpu */
  	.name		= "mpu_ck",
897dcded6   Russell King   [ARM] omap: provi...
396
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
397
  	.parent		= &core_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
398
  	.clkdm_name	= "mpu_clkdm",
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
399
400
401
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP24XX_CLKSEL_MPU_MASK,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
402
  	.clksel		= mpu_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
403
404
  	.recalc		= &omap2_clksel_recalc,
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
405

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
406
  /*
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
407
   * DSP (2420-UMA+IVA1) clock domain
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
408
   * Clocks:
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
409
   *	2420: UMA_FCLK, UMA_ICLK, IVA_MPU, IVA_COP
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
410
411
412
413
414
   *
   * Won't be too specific here. The core clock comes into this block
   * it is divided then tee'ed. One branch goes directly to xyz enable
   * controls. The other branch gets further divided by 2 then possibly
   * routed into a synchronizer and out of clocks abc.
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
415
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
416
  static const struct clksel_rate dsp_fck_core_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
417
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
  	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
  	{ .div = 6, .val = 6, .flags = RATE_IN_242X },
  	{ .div = 8, .val = 8, .flags = RATE_IN_242X },
  	{ .div = 12, .val = 12, .flags = RATE_IN_242X },
  	{ .div = 0 },
  };
  
  static const struct clksel dsp_fck_clksel[] = {
  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
  	{ .parent = NULL }
  };
  
  static struct clk dsp_fck = {
  	.name		= "dsp_fck",
b36ee7242   Russell King   [ARM] omap: add d...
434
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
435
  	.parent		= &core_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
436
  	.clkdm_name	= "dsp_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
437
438
439
440
441
  	.enable_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP24XX_CLKSEL_DSP_MASK,
  	.clksel		= dsp_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
442
443
  	.recalc		= &omap2_clksel_recalc,
  };
224113969   Paul Walmsley   OMAP2xxx: clock: ...
444
445
  static const struct clksel dsp_ick_clksel[] = {
  	{ .parent = &dsp_fck, .rates = dsp_ick_rates },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
446
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
447
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
448
449
  static struct clk dsp_ick = {
  	.name		= "dsp_ick",	 /* apparently ipi and isp */
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
450
  	.ops		= &clkops_omap2_iclk_dflt_wait,
224113969   Paul Walmsley   OMAP2xxx: clock: ...
451
452
  	.parent		= &dsp_fck,
  	.clkdm_name	= "dsp_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
453
454
  	.enable_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP2420_EN_DSP_IPI_SHIFT,	      /* for ipi */
224113969   Paul Walmsley   OMAP2xxx: clock: ...
455
456
457
458
  	.clksel_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP24XX_CLKSEL_DSP_IF_MASK,
  	.clksel		= dsp_ick_clksel,
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
459
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
460
461
462
463
464
  /*
   * The IVA1 is an ARM7 core on the 2420 that has nothing to do with
   * the C54x, but which is contained in the DSP powerdomain.  Does not
   * exist on later OMAPs.
   */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
465
466
  static struct clk iva1_ifck = {
  	.name		= "iva1_ifck",
b36ee7242   Russell King   [ARM] omap: add d...
467
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
468
  	.parent		= &core_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
469
  	.clkdm_name	= "iva1_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
470
471
472
473
474
  	.enable_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP2420_EN_IVA_COP_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP2420_CLKSEL_IVA_MASK,
  	.clksel		= dsp_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
475
476
477
478
479
480
  	.recalc		= &omap2_clksel_recalc,
  };
  
  /* IVA1 mpu/int/i/f clocks are /2 of parent */
  static struct clk iva1_mpu_int_ifck = {
  	.name		= "iva1_mpu_int_ifck",
b36ee7242   Russell King   [ARM] omap: add d...
481
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
482
  	.parent		= &iva1_ifck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
483
  	.clkdm_name	= "iva1_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
484
485
486
  	.enable_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP2420_EN_IVA_MPU_SHIFT,
  	.fixed_div	= 2,
e9b98f604   Paul Walmsley   OMAP clock: make ...
487
  	.recalc		= &omap_fixed_divisor_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
  };
  
  /*
   * L3 clock domain
   * L3 clocks are used for both interface and functional clocks to
   * multiple entities. Some of these clocks are completely managed
   * by hardware, and some others allow software control. Hardware
   * managed ones general are based on directly CLK_REQ signals and
   * various auto idle settings. The functional spec sets many of these
   * as 'tie-high' for their enables.
   *
   * I-CLOCKS:
   *	L3-Interconnect, SMS, GPMC, SDRC, OCM_RAM, OCM_ROM, SDMA
   *	CAM, HS-USB.
   * F-CLOCK
   *	SSI.
   *
   * GPMC memories and SDRC have timing and clock sensitive registers which
   * may very well need notification when the clock changes. Currently for low
   * operating points, these are taken care of in sleep.S.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
509
510
511
  static const struct clksel_rate core_l3_core_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
512
  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
513
514
515
516
517
518
519
520
521
522
523
  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
  	{ .div = 8, .val = 8, .flags = RATE_IN_242X },
  	{ .div = 12, .val = 12, .flags = RATE_IN_242X },
  	{ .div = 16, .val = 16, .flags = RATE_IN_242X },
  	{ .div = 0 }
  };
  
  static const struct clksel core_l3_clksel[] = {
  	{ .parent = &core_ck, .rates = core_l3_core_rates },
  	{ .parent = NULL }
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
524
525
  static struct clk core_l3_ck = {	/* Used for ick and fck, interconnect */
  	.name		= "core_l3_ck",
897dcded6   Russell King   [ARM] omap: provi...
526
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
527
  	.parent		= &core_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
528
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
529
530
531
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_L3_MASK,
  	.clksel		= core_l3_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
532
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
533
534
535
536
537
  };
  
  /* usb_l4_ick */
  static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
538
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
539
540
541
542
543
544
545
  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
  	{ .div = 0 }
  };
  
  static const struct clksel usb_l4_ick_clksel[] = {
  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
  	{ .parent = NULL },
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
546
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
547
  /* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
548
549
  static struct clk usb_l4_ick = {	/* FS-USB interface clock */
  	.name		= "usb_l4_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
550
  	.ops		= &clkops_omap2_iclk_dflt_wait,
fde0fd494   Tony Lindgren   ARM: OMAP: 3/4 Fi...
551
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
552
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
553
554
555
556
557
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  	.enable_bit	= OMAP24XX_EN_USB_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_USB_MASK,
  	.clksel		= usb_l4_ick_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
558
559
560
561
  	.recalc		= &omap2_clksel_recalc,
  };
  
  /*
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
562
563
564
565
566
567
568
   * L4 clock management domain
   *
   * This domain contains lots of interface clocks from the L4 interface, some
   * functional clocks.	Fixed APLL functional source clocks are managed in
   * this domain.
   */
  static const struct clksel_rate l4_core_l3_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
569
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
570
571
572
573
574
575
576
577
578
579
580
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
  	{ .div = 0 }
  };
  
  static const struct clksel l4_clksel[] = {
  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
  	{ .parent = NULL }
  };
  
  static struct clk l4_ck = {		/* used both as an ick and fck */
  	.name		= "l4_ck",
897dcded6   Russell King   [ARM] omap: provi...
581
  	.ops		= &clkops_null,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
582
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
583
584
585
586
587
  	.clkdm_name	= "core_l4_clkdm",
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_L4_MASK,
  	.clksel		= l4_clksel,
  	.recalc		= &omap2_clksel_recalc,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
588
589
590
  };
  
  /*
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
591
592
593
   * SSI is in L3 management domain, its direct parent is core not l3,
   * many core power domain entities are grouped into the L3 clock
   * domain.
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
594
   * SSI_SSR_FCLK, SSI_SST_FCLK, SSI_L4_ICLK
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
595
596
597
   *
   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
598
599
  static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
600
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
601
602
  	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
603
604
605
606
607
608
609
610
611
  	{ .div = 6, .val = 6, .flags = RATE_IN_242X },
  	{ .div = 8, .val = 8, .flags = RATE_IN_242X },
  	{ .div = 0 }
  };
  
  static const struct clksel ssi_ssr_sst_fck_clksel[] = {
  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
  	{ .parent = NULL }
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
612
613
  static struct clk ssi_ssr_sst_fck = {
  	.name		= "ssi_fck",
b36ee7242   Russell King   [ARM] omap: add d...
614
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
615
  	.parent		= &core_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
616
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
617
618
619
620
621
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
  	.enable_bit	= OMAP24XX_EN_SSI_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_SSI_MASK,
  	.clksel		= ssi_ssr_sst_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
622
623
  	.recalc		= &omap2_clksel_recalc,
  };
9299fd85a   Paul Walmsley   [ARM] OMAP24xx cl...
624
625
626
627
628
629
  /*
   * Presumably this is the same as SSI_ICLK.
   * TRM contradicts itself on what clockdomain SSI_ICLK is in
   */
  static struct clk ssi_l4_ick = {
  	.name		= "ssi_l4_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
630
  	.ops		= &clkops_omap2_iclk_dflt_wait,
9299fd85a   Paul Walmsley   [ARM] OMAP24xx cl...
631
632
633
634
635
636
  	.parent		= &l4_ck,
  	.clkdm_name	= "core_l4_clkdm",
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  	.enable_bit	= OMAP24XX_EN_SSI_SHIFT,
  	.recalc		= &followparent_recalc,
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
637

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
638
639
640
641
642
643
644
645
646
647
648
  /*
   * GFX clock domain
   *	Clocks:
   * GFX_FCLK, GFX_ICLK
   * GFX_CG1(2d), GFX_CG2(3d)
   *
   * GFX_FCLK runs from L3, and is divided by (1,2,3,4)
   * The 2d and 3d clocks run at a hardware determined
   * divided value of fclk.
   *
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
649
650
651
652
653
654
  
  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
  static const struct clksel gfx_fck_clksel[] = {
  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
  	{ .parent = NULL },
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
655
656
  static struct clk gfx_3d_fck = {
  	.name		= "gfx_3d_fck",
b36ee7242   Russell King   [ARM] omap: add d...
657
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
658
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
659
  	.clkdm_name	= "gfx_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
660
661
662
663
664
  	.enable_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_EN_3D_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP_CLKSEL_GFX_MASK,
  	.clksel		= gfx_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
665
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
666
667
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
668
669
670
671
  };
  
  static struct clk gfx_2d_fck = {
  	.name		= "gfx_2d_fck",
b36ee7242   Russell King   [ARM] omap: add d...
672
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
673
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
674
  	.clkdm_name	= "gfx_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
675
676
677
678
679
  	.enable_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_EN_2D_SHIFT,
  	.clksel_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
  	.clksel_mask	= OMAP_CLKSEL_GFX_MASK,
  	.clksel		= gfx_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
680
681
  	.recalc		= &omap2_clksel_recalc,
  };
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
682
  /* This interface clock does not have a CM_AUTOIDLE bit */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
683
684
  static struct clk gfx_ick = {
  	.name		= "gfx_ick",		/* From l3 */
b36ee7242   Russell King   [ARM] omap: add d...
685
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
686
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
687
  	.clkdm_name	= "gfx_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
688
689
690
  	.enable_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP_EN_GFX_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
691
692
693
  };
  
  /*
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
694
695
696
697
698
699
700
   * DSS clock domain
   * CLOCKs:
   * DSS_L4_ICLK, DSS_L3_ICLK,
   * DSS_CLK1, DSS_CLK2, DSS_54MHz_CLK
   *
   * DSS is both initiator and target.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
701
702
703
  /* XXX Add RATE_NOT_VALIDATED */
  
  static const struct clksel_rate dss1_fck_sys_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
704
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
705
706
707
708
709
710
711
712
713
714
715
716
717
  	{ .div = 0 }
  };
  
  static const struct clksel_rate dss1_fck_core_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
  	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
  	{ .div = 5, .val = 5, .flags = RATE_IN_24XX },
  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
  	{ .div = 8, .val = 8, .flags = RATE_IN_24XX },
  	{ .div = 9, .val = 9, .flags = RATE_IN_24XX },
  	{ .div = 12, .val = 12, .flags = RATE_IN_24XX },
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
718
  	{ .div = 16, .val = 16, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
719
720
721
722
723
724
725
726
  	{ .div = 0 }
  };
  
  static const struct clksel dss1_fck_clksel[] = {
  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
  	{ .parent = NULL },
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
727
728
  static struct clk dss_ick = {		/* Enables both L3,L4 ICLK's */
  	.name		= "dss_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
729
  	.ops		= &clkops_omap2_iclk_dflt,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
730
  	.parent		= &l4_ck,	/* really both l3 and l4 */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
731
  	.clkdm_name	= "dss_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
732
733
734
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_DSS1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
735
736
737
738
  };
  
  static struct clk dss1_fck = {
  	.name		= "dss1_fck",
bc51da4ee   Russell King   [ARM] omap: elimi...
739
  	.ops		= &clkops_omap2_dflt,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
740
  	.parent		= &core_ck,		/* Core or sys */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
741
  	.clkdm_name	= "dss_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
742
743
744
745
746
747
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_DSS1_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_DSS1_MASK,
  	.clksel		= dss1_fck_clksel,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
748
  	.recalc		= &omap2_clksel_recalc,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
749
750
751
  };
  
  static const struct clksel_rate dss2_fck_sys_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
752
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
753
754
755
756
  	{ .div = 0 }
  };
  
  static const struct clksel_rate dss2_fck_48m_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
757
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
758
759
760
761
762
763
764
  	{ .div = 0 }
  };
  
  static const struct clksel dss2_fck_clksel[] = {
  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
765
766
767
768
  };
  
  static struct clk dss2_fck = {		/* Alt clk used in power management */
  	.name		= "dss2_fck",
bc51da4ee   Russell King   [ARM] omap: elimi...
769
  	.ops		= &clkops_omap2_dflt,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
770
  	.parent		= &sys_ck,		/* fixed at sys_ck or 48MHz */
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
771
  	.clkdm_name	= "dss_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
772
773
774
775
776
777
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_DSS2_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_DSS2_MASK,
  	.clksel		= dss2_fck_clksel,
d4521f673   Paul Walmsley   OMAP2xxx clock: f...
778
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
779
780
781
782
  };
  
  static struct clk dss_54m_fck = {	/* Alt clk used in power management */
  	.name		= "dss_54m_fck",	/* 54m tv clk */
b36ee7242   Russell King   [ARM] omap: add d...
783
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
784
  	.parent		= &func_54m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
785
  	.clkdm_name	= "dss_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
786
787
788
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_TV_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
789
  };
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
790
791
792
793
794
795
796
  static struct clk wu_l4_ick = {
  	.name		= "wu_l4_ick",
  	.ops		= &clkops_null,
  	.parent		= &sys_ck,
  	.clkdm_name	= "wkup_clkdm",
  	.recalc		= &followparent_recalc,
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
797
798
799
800
801
802
  /*
   * CORE power domain ICLK & FCLK defines.
   * Many of the these can have more than one possible parent. Entries
   * here will likely have an L4 interface parent, and may have multiple
   * functional clock parents.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
803
  static const struct clksel_rate gpt_alt_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
804
  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
805
806
807
808
809
810
811
812
813
  	{ .div = 0 }
  };
  
  static const struct clksel omap24xx_gpt_clksel[] = {
  	{ .parent = &func_32k_ck, .rates = gpt_32k_rates },
  	{ .parent = &sys_ck,	  .rates = gpt_sys_rates },
  	{ .parent = &alt_ck,	  .rates = gpt_alt_rates },
  	{ .parent = NULL },
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
814
815
  static struct clk gpt1_ick = {
  	.name		= "gpt1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
816
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
817
818
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
819
820
821
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_GPT1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
822
823
824
825
  };
  
  static struct clk gpt1_fck = {
  	.name		= "gpt1_fck",
b36ee7242   Russell King   [ARM] omap: add d...
826
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
827
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
828
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
829
830
831
832
833
834
835
836
837
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_EN_GPT1_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT1_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
  	.round_rate	= &omap2_clksel_round_rate,
  	.set_rate	= &omap2_clksel_set_rate
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
838
839
840
841
  };
  
  static struct clk gpt2_ick = {
  	.name		= "gpt2_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
842
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
843
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
844
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
845
846
847
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
848
849
850
851
  };
  
  static struct clk gpt2_fck = {
  	.name		= "gpt2_fck",
b36ee7242   Russell King   [ARM] omap: add d...
852
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
853
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
854
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
855
856
857
858
859
860
861
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT2_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT2_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
862
863
864
865
  };
  
  static struct clk gpt3_ick = {
  	.name		= "gpt3_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
866
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
867
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
868
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
869
870
871
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT3_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
872
873
874
875
  };
  
  static struct clk gpt3_fck = {
  	.name		= "gpt3_fck",
b36ee7242   Russell King   [ARM] omap: add d...
876
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
877
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
878
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
879
880
881
882
883
884
885
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT3_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT3_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
886
887
888
889
  };
  
  static struct clk gpt4_ick = {
  	.name		= "gpt4_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
890
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
891
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
892
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
893
894
895
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT4_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
896
897
898
899
  };
  
  static struct clk gpt4_fck = {
  	.name		= "gpt4_fck",
b36ee7242   Russell King   [ARM] omap: add d...
900
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
901
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
902
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
903
904
905
906
907
908
909
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT4_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT4_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
910
911
912
913
  };
  
  static struct clk gpt5_ick = {
  	.name		= "gpt5_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
914
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
915
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
916
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
917
918
919
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT5_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
920
921
922
923
  };
  
  static struct clk gpt5_fck = {
  	.name		= "gpt5_fck",
b36ee7242   Russell King   [ARM] omap: add d...
924
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
925
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
926
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
927
928
929
930
931
932
933
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT5_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT5_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
934
935
936
937
  };
  
  static struct clk gpt6_ick = {
  	.name		= "gpt6_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
938
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
939
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
940
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
941
942
943
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT6_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
944
945
946
947
  };
  
  static struct clk gpt6_fck = {
  	.name		= "gpt6_fck",
b36ee7242   Russell King   [ARM] omap: add d...
948
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
949
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
950
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
951
952
953
954
955
956
957
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT6_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT6_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
958
959
960
961
  };
  
  static struct clk gpt7_ick = {
  	.name		= "gpt7_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
962
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
963
  	.parent		= &l4_ck,
a4fc92748   Paul Walmsley   OMAP2xxx: clock: ...
964
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
965
966
967
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT7_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
968
969
970
971
  };
  
  static struct clk gpt7_fck = {
  	.name		= "gpt7_fck",
b36ee7242   Russell King   [ARM] omap: add d...
972
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
973
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
974
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
975
976
977
978
979
980
981
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT7_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT7_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
982
983
984
985
  };
  
  static struct clk gpt8_ick = {
  	.name		= "gpt8_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
986
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
987
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
988
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
989
990
991
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT8_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
992
993
994
995
  };
  
  static struct clk gpt8_fck = {
  	.name		= "gpt8_fck",
b36ee7242   Russell King   [ARM] omap: add d...
996
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
997
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
998
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
999
1000
1001
1002
1003
1004
1005
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT8_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT8_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1006
1007
1008
1009
  };
  
  static struct clk gpt9_ick = {
  	.name		= "gpt9_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1010
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1011
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1012
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1013
1014
1015
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT9_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1016
1017
1018
1019
  };
  
  static struct clk gpt9_fck = {
  	.name		= "gpt9_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1020
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1021
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1022
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1023
1024
1025
1026
1027
1028
1029
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT9_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT9_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1030
1031
1032
1033
  };
  
  static struct clk gpt10_ick = {
  	.name		= "gpt10_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1034
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1035
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1036
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1037
1038
1039
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT10_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1040
1041
1042
1043
  };
  
  static struct clk gpt10_fck = {
  	.name		= "gpt10_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1044
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1045
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1046
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1047
1048
1049
1050
1051
1052
1053
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT10_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT10_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1054
1055
1056
1057
  };
  
  static struct clk gpt11_ick = {
  	.name		= "gpt11_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1058
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1059
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1060
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1061
1062
1063
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT11_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1064
1065
1066
1067
  };
  
  static struct clk gpt11_fck = {
  	.name		= "gpt11_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1068
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1069
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1070
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1071
1072
1073
1074
1075
1076
1077
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT11_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT11_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1078
1079
1080
1081
  };
  
  static struct clk gpt12_ick = {
  	.name		= "gpt12_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1082
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1083
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1084
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1085
1086
1087
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT12_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1088
1089
1090
1091
  };
  
  static struct clk gpt12_fck = {
  	.name		= "gpt12_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1092
  	.ops		= &clkops_omap2_dflt_wait,
f248076c0   Paul Walmsley   OMAP2/3 GPTIMER: ...
1093
  	.parent		= &secure_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1094
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1095
1096
1097
1098
1099
1100
1101
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_GPT12_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
  	.clksel_mask	= OMAP24XX_CLKSEL_GPT12_MASK,
  	.clksel		= omap24xx_gpt_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1102
1103
1104
  };
  
  static struct clk mcbsp1_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1105
  	.name		= "mcbsp1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1106
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1107
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1108
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1109
1110
1111
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCBSP1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1112
  };
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
  static const struct clksel_rate common_mcbsp_96m_rates[] = {
  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
  	{ .div = 0 }
  };
  
  static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
  	{ .div = 0 }
  };
  
  static const struct clksel mcbsp_fck_clksel[] = {
  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
  	{ .parent = NULL }
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1128
  static struct clk mcbsp1_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1129
  	.name		= "mcbsp1_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1130
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1131
  	.parent		= &func_96m_ck,
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1132
  	.init		= &omap2_init_clksel_parent,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1133
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1134
1135
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCBSP1_SHIFT,
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1136
1137
1138
1139
  	.clksel_reg	= OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
  	.clksel_mask	= OMAP2_MCBSP1_CLKS_MASK,
  	.clksel		= mcbsp_fck_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1140
1141
1142
  };
  
  static struct clk mcbsp2_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1143
  	.name		= "mcbsp2_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1144
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1145
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1146
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1147
1148
1149
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCBSP2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1150
1151
1152
  };
  
  static struct clk mcbsp2_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1153
  	.name		= "mcbsp2_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1154
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1155
  	.parent		= &func_96m_ck,
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1156
  	.init		= &omap2_init_clksel_parent,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1157
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1158
1159
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCBSP2_SHIFT,
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1160
1161
1162
1163
  	.clksel_reg	= OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
  	.clksel_mask	= OMAP2_MCBSP2_CLKS_MASK,
  	.clksel		= mcbsp_fck_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1164
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1165
  static struct clk mcspi1_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1166
  	.name		= "mcspi1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1167
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1168
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1169
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1170
1171
1172
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCSPI1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1173
1174
1175
  };
  
  static struct clk mcspi1_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1176
  	.name		= "mcspi1_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1177
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1178
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1179
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1180
1181
1182
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCSPI1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1183
1184
1185
  };
  
  static struct clk mcspi2_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1186
  	.name		= "mcspi2_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1187
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1188
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1189
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1190
1191
1192
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCSPI2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1193
1194
1195
  };
  
  static struct clk mcspi2_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1196
  	.name		= "mcspi2_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1197
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1198
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1199
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1200
1201
1202
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_MCSPI2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1203
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1204
1205
  static struct clk uart1_ick = {
  	.name		= "uart1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1206
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1207
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1208
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1209
1210
1211
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_UART1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1212
1213
1214
1215
  };
  
  static struct clk uart1_fck = {
  	.name		= "uart1_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1216
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1217
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1218
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1219
1220
1221
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_UART1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1222
1223
1224
1225
  };
  
  static struct clk uart2_ick = {
  	.name		= "uart2_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1226
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1227
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1228
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1229
1230
1231
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_UART2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1232
1233
1234
1235
  };
  
  static struct clk uart2_fck = {
  	.name		= "uart2_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1236
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1237
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1238
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1239
1240
1241
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_UART2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1242
1243
1244
1245
  };
  
  static struct clk uart3_ick = {
  	.name		= "uart3_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1246
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1247
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1248
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1249
1250
1251
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  	.enable_bit	= OMAP24XX_EN_UART3_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1252
1253
1254
1255
  };
  
  static struct clk uart3_fck = {
  	.name		= "uart3_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1256
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1257
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1258
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1259
1260
1261
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
  	.enable_bit	= OMAP24XX_EN_UART3_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1262
1263
1264
1265
  };
  
  static struct clk gpios_ick = {
  	.name		= "gpios_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1266
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1267
1268
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1269
1270
1271
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_GPIOS_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1272
1273
1274
1275
  };
  
  static struct clk gpios_fck = {
  	.name		= "gpios_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1276
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1277
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1278
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1279
1280
1281
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_EN_GPIOS_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1282
1283
1284
1285
  };
  
  static struct clk mpu_wdt_ick = {
  	.name		= "mpu_wdt_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1286
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1287
1288
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1289
1290
1291
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_MPU_WDT_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1292
1293
1294
1295
  };
  
  static struct clk mpu_wdt_fck = {
  	.name		= "mpu_wdt_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1296
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1297
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1298
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1299
1300
1301
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  	.enable_bit	= OMAP24XX_EN_MPU_WDT_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1302
1303
1304
1305
  };
  
  static struct clk sync_32k_ick = {
  	.name		= "sync_32k_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1306
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1307
1308
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
8ad8ff654   Russell King   [ARM] omap: conve...
1309
  	.flags		= ENABLE_ON_INIT,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1310
1311
1312
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_32KSYNC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1313
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1314

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1315
1316
  static struct clk wdt1_ick = {
  	.name		= "wdt1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1317
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1318
1319
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1320
1321
1322
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_WDT1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1323
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1324

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1325
1326
  static struct clk omapctrl_ick = {
  	.name		= "omapctrl_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1327
  	.ops		= &clkops_omap2_iclk_dflt_wait,
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1328
1329
  	.parent		= &wu_l4_ick,
  	.clkdm_name	= "wkup_clkdm",
8ad8ff654   Russell King   [ARM] omap: conve...
1330
  	.flags		= ENABLE_ON_INIT,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1331
1332
1333
  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  	.enable_bit	= OMAP24XX_EN_OMAPCTRL_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1334
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1335

046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1336
1337
  static struct clk cam_ick = {
  	.name		= "cam_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1338
  	.ops		= &clkops_omap2_iclk_dflt,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1339
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1340
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1341
1342
1343
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_CAM_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1344
  };
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1345
1346
1347
1348
1349
  /*
   * cam_fck controls both CAM_MCLK and CAM_FCLK.  It should probably be
   * split into two separate clocks, since the parent clocks are different
   * and the clockdomains are also different.
   */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1350
1351
  static struct clk cam_fck = {
  	.name		= "cam_fck",
bc51da4ee   Russell King   [ARM] omap: elimi...
1352
  	.ops		= &clkops_omap2_dflt,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1353
  	.parent		= &func_96m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1354
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1355
1356
1357
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_CAM_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1358
1359
1360
1361
  };
  
  static struct clk mailboxes_ick = {
  	.name		= "mailboxes_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1362
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1363
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1364
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1365
1366
1367
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MAILBOXES_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1368
1369
1370
1371
  };
  
  static struct clk wdt4_ick = {
  	.name		= "wdt4_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1372
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1373
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1374
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1375
1376
1377
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_WDT4_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1378
1379
1380
1381
  };
  
  static struct clk wdt4_fck = {
  	.name		= "wdt4_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1382
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1383
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1384
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1385
1386
1387
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_WDT4_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1388
1389
1390
1391
  };
  
  static struct clk wdt3_ick = {
  	.name		= "wdt3_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1392
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1393
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1394
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1395
1396
1397
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_WDT3_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1398
1399
1400
1401
  };
  
  static struct clk wdt3_fck = {
  	.name		= "wdt3_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1402
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1403
  	.parent		= &func_32k_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1404
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1405
1406
1407
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_WDT3_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1408
1409
1410
1411
  };
  
  static struct clk mspro_ick = {
  	.name		= "mspro_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1412
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1413
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1414
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1415
1416
1417
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_MSPRO_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1418
1419
1420
1421
  };
  
  static struct clk mspro_fck = {
  	.name		= "mspro_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1422
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1423
  	.parent		= &func_96m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1424
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1425
1426
1427
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_MSPRO_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1428
1429
1430
1431
  };
  
  static struct clk mmc_ick = {
  	.name		= "mmc_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1432
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1433
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1434
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1435
1436
1437
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_MMC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1438
1439
1440
1441
  };
  
  static struct clk mmc_fck = {
  	.name		= "mmc_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1442
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1443
  	.parent		= &func_96m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1444
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1445
1446
1447
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_MMC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1448
1449
1450
1451
  };
  
  static struct clk fac_ick = {
  	.name		= "fac_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1452
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1453
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1454
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1455
1456
1457
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_FAC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1458
1459
1460
1461
  };
  
  static struct clk fac_fck = {
  	.name		= "fac_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1462
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1463
  	.parent		= &func_12m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1464
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1465
1466
1467
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_FAC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1468
1469
1470
1471
  };
  
  static struct clk eac_ick = {
  	.name		= "eac_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1472
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1473
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1474
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1475
1476
1477
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_EAC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1478
1479
1480
1481
  };
  
  static struct clk eac_fck = {
  	.name		= "eac_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1482
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1483
  	.parent		= &func_96m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1484
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1485
1486
1487
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_EAC_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1488
1489
1490
1491
  };
  
  static struct clk hdq_ick = {
  	.name		= "hdq_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1492
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1493
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1494
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1495
1496
1497
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP24XX_EN_HDQ_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1498
1499
1500
1501
  };
  
  static struct clk hdq_fck = {
  	.name		= "hdq_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1502
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1503
  	.parent		= &func_12m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1504
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1505
1506
1507
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP24XX_EN_HDQ_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1508
1509
1510
  };
  
  static struct clk i2c2_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1511
  	.name		= "i2c2_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1512
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1513
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1514
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1515
1516
1517
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_I2C2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1518
1519
1520
  };
  
  static struct clk i2c2_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1521
  	.name		= "i2c2_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1522
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1523
  	.parent		= &func_12m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1524
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1525
1526
1527
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_I2C2_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1528
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1529
  static struct clk i2c1_ick = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1530
  	.name		= "i2c1_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1531
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1532
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1533
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1534
1535
1536
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_I2C1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1537
1538
1539
  };
  
  static struct clk i2c1_fck = {
b92c170d0   Paul Walmsley   OMAP clock: drop ...
1540
  	.name		= "i2c1_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1541
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1542
  	.parent		= &func_12m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1543
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1544
1545
1546
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_I2C1_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1547
  };
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1548
1549
1550
1551
  /*
   * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
   * accesses derived from this data.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1552
1553
  static struct clk gpmc_fck = {
  	.name		= "gpmc_fck",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1554
  	.ops		= &clkops_omap2_iclk_idle_only,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1555
  	.parent		= &core_l3_ck,
8ad8ff654   Russell King   [ARM] omap: conve...
1556
  	.flags		= ENABLE_ON_INIT,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1557
  	.clkdm_name	= "core_l3_clkdm",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1558
1559
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
  	.enable_bit	= OMAP24XX_AUTO_GPMC_SHIFT,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1560
1561
1562
1563
1564
  	.recalc		= &followparent_recalc,
  };
  
  static struct clk sdma_fck = {
  	.name		= "sdma_fck",
897dcded6   Russell King   [ARM] omap: provi...
1565
  	.ops		= &clkops_null, /* RMK: missing? */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1566
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1567
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1568
1569
  	.recalc		= &followparent_recalc,
  };
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1570
1571
1572
1573
  /*
   * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
   * accesses derived from this data.
   */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1574
1575
  static struct clk sdma_ick = {
  	.name		= "sdma_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1576
  	.ops		= &clkops_omap2_iclk_idle_only,
a1fed577d   Paul Walmsley   OMAP2xxx: clock: ...
1577
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1578
  	.clkdm_name	= "core_l3_clkdm",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1579
1580
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
  	.enable_bit	= OMAP24XX_AUTO_SDMA_SHIFT,
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1581
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1582
  };
a56d9ea86   Paul Walmsley   OMAP2420: clock: ...
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
  /*
   * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
   * accesses derived from this data.
   */
  static struct clk sdrc_ick = {
  	.name		= "sdrc_ick",
  	.ops		= &clkops_omap2_iclk_idle_only,
  	.parent		= &core_l3_ck,
  	.flags		= ENABLE_ON_INIT,
  	.clkdm_name	= "core_l3_clkdm",
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
  	.enable_bit	= OMAP24XX_AUTO_SDRC_SHIFT,
  	.recalc		= &followparent_recalc,
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1597
1598
  static struct clk vlynq_ick = {
  	.name		= "vlynq_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1599
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1600
  	.parent		= &core_l3_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1601
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1602
1603
1604
1605
1606
1607
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  	.enable_bit	= OMAP2420_EN_VLYNQ_SHIFT,
  	.recalc		= &followparent_recalc,
  };
  
  static const struct clksel_rate vlynq_fck_96m_rates[] = {
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
1608
  	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
  	{ .div = 0 }
  };
  
  static const struct clksel_rate vlynq_fck_core_rates[] = {
  	{ .div = 1, .val = 1, .flags = RATE_IN_242X },
  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
  	{ .div = 3, .val = 3, .flags = RATE_IN_242X },
  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
  	{ .div = 6, .val = 6, .flags = RATE_IN_242X },
  	{ .div = 8, .val = 8, .flags = RATE_IN_242X },
  	{ .div = 9, .val = 9, .flags = RATE_IN_242X },
  	{ .div = 12, .val = 12, .flags = RATE_IN_242X },
d74b49497   Paul Walmsley   OMAP2+ clock: rem...
1621
  	{ .div = 16, .val = 16, .flags = RATE_IN_242X },
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1622
1623
1624
1625
1626
1627
1628
1629
  	{ .div = 18, .val = 18, .flags = RATE_IN_242X },
  	{ .div = 0 }
  };
  
  static const struct clksel vlynq_fck_clksel[] = {
  	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
  	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
  	{ .parent = NULL }
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1630
1631
1632
1633
  };
  
  static struct clk vlynq_fck = {
  	.name		= "vlynq_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1634
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1635
  	.parent		= &func_96m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1636
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1637
1638
1639
1640
1641
1642
1643
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  	.enable_bit	= OMAP2420_EN_VLYNQ_SHIFT,
  	.init		= &omap2_init_clksel_parent,
  	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
  	.clksel_mask	= OMAP2420_CLKSEL_VLYNQ_MASK,
  	.clksel		= vlynq_fck_clksel,
  	.recalc		= &omap2_clksel_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1644
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1645
1646
  static struct clk des_ick = {
  	.name		= "des_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1647
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1648
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1649
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1650
1651
1652
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
  	.enable_bit	= OMAP24XX_EN_DES_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1653
1654
1655
1656
  };
  
  static struct clk sha_ick = {
  	.name		= "sha_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1657
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1658
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1659
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1660
1661
1662
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
  	.enable_bit	= OMAP24XX_EN_SHA_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1663
1664
1665
1666
  };
  
  static struct clk rng_ick = {
  	.name		= "rng_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1667
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1668
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1669
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1670
1671
1672
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
  	.enable_bit	= OMAP24XX_EN_RNG_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1673
1674
1675
1676
  };
  
  static struct clk aes_ick = {
  	.name		= "aes_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1677
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1678
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1679
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1680
1681
1682
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
  	.enable_bit	= OMAP24XX_EN_AES_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1683
1684
1685
1686
  };
  
  static struct clk pka_ick = {
  	.name		= "pka_ick",
6ae690da1   Paul Walmsley   OMAP2420: clock: ...
1687
  	.ops		= &clkops_omap2_iclk_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1688
  	.parent		= &l4_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1689
  	.clkdm_name	= "core_l4_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1690
1691
1692
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
  	.enable_bit	= OMAP24XX_EN_PKA_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1693
1694
1695
1696
  };
  
  static struct clk usb_fck = {
  	.name		= "usb_fck",
b36ee7242   Russell King   [ARM] omap: add d...
1697
  	.ops		= &clkops_omap2_dflt_wait,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1698
  	.parent		= &func_48m_ck,
d1b03f615   Paul Walmsley   ARM: OMAP2: Clock...
1699
  	.clkdm_name	= "core_l3_clkdm",
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1700
1701
1702
  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
  	.enable_bit	= OMAP24XX_EN_USB_SHIFT,
  	.recalc		= &followparent_recalc,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1703
  };
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
  /*
   * This clock is a composite clock which does entire set changes then
   * forces a rebalance. It keys on the MPU speed, but it really could
   * be any key speed part of a set in the rate table.
   *
   * to really change a set, you need memory table sets which get changed
   * in sram, pre-notifiers & post notifiers, changing the top set, without
   * having low level display recalc's won't work... this is why dpm notifiers
   * work, isr's off, walk a list of clocks already _off_ and not messing with
   * the bus.
   *
   * This clock should have no parent. It embodies the entire upper level
   * active set. A parent will mess up some of the init also.
   */
  static struct clk virt_prcm_set = {
  	.name		= "virt_prcm_set",
897dcded6   Russell King   [ARM] omap: provi...
1720
  	.ops		= &clkops_null,
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1721
  	.parent		= &mpu_ck,	/* Indexed by mpu speed, no parent */
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1722
  	.recalc		= &omap2_table_mpu_recalc,	/* sets are keyed on mpu rate */
046d6b28e   Tony Lindgren   [ARM] 3146/1: OMA...
1723
1724
1725
  	.set_rate	= &omap2_select_table_rate,
  	.round_rate	= &omap2_round_to_table_rate,
  };
e32744b02   Paul Walmsley   ARM: OMAP: Add re...
1726

d8a944582   Paul Walmsley   OMAP2 clock: conv...
1727
1728
1729
1730
  
  /*
   * clkdev integration
   */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1731
  static struct omap_clk omap2420_clks[] = {
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1732
  	/* external root sources */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1733
1734
1735
1736
1737
  	CLK(NULL,	"func_32k_ck",	&func_32k_ck,	CK_242X),
  	CLK(NULL,	"secure_32k_ck", &secure_32k_ck, CK_242X),
  	CLK(NULL,	"osc_ck",	&osc_ck,	CK_242X),
  	CLK(NULL,	"sys_ck",	&sys_ck,	CK_242X),
  	CLK(NULL,	"alt_ck",	&alt_ck,	CK_242X),
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1738
1739
1740
  	CLK("omap-mcbsp.1",	"pad_fck",	&mcbsp_clks,	CK_242X),
  	CLK("omap-mcbsp.2",	"pad_fck",	&mcbsp_clks,	CK_242X),
  	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1741
  	/* internal analog sources */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1742
1743
1744
  	CLK(NULL,	"dpll_ck",	&dpll_ck,	CK_242X),
  	CLK(NULL,	"apll96_ck",	&apll96_ck,	CK_242X),
  	CLK(NULL,	"apll54_ck",	&apll54_ck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1745
  	/* internal prcm root sources */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1746
1747
  	CLK(NULL,	"func_54m_ck",	&func_54m_ck,	CK_242X),
  	CLK(NULL,	"core_ck",	&core_ck,	CK_242X),
1bccb345b   Paul Walmsley   OMAP2420: clock: ...
1748
1749
  	CLK("omap-mcbsp.1",	"prcm_fck",	&func_96m_ck,	CK_242X),
  	CLK("omap-mcbsp.2",	"prcm_fck",	&func_96m_ck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1750
1751
1752
1753
1754
1755
  	CLK(NULL,	"func_96m_ck",	&func_96m_ck,	CK_242X),
  	CLK(NULL,	"func_48m_ck",	&func_48m_ck,	CK_242X),
  	CLK(NULL,	"func_12m_ck",	&func_12m_ck,	CK_242X),
  	CLK(NULL,	"ck_wdt1_osc",	&wdt1_osc_ck,	CK_242X),
  	CLK(NULL,	"sys_clkout_src", &sys_clkout_src, CK_242X),
  	CLK(NULL,	"sys_clkout",	&sys_clkout,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1756
1757
1758
1759
  	CLK(NULL,	"sys_clkout2_src", &sys_clkout2_src, CK_242X),
  	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_242X),
  	CLK(NULL,	"emul_ck",	&emul_ck,	CK_242X),
  	/* mpu domain clocks */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1760
  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1761
  	/* dsp domain clocks */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1762
  	CLK(NULL,	"dsp_fck",	&dsp_fck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1763
  	CLK(NULL,	"dsp_ick",	&dsp_ick,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1764
1765
1766
  	CLK(NULL,	"iva1_ifck",	&iva1_ifck,	CK_242X),
  	CLK(NULL,	"iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X),
  	/* GFX domain clocks */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1767
1768
1769
  	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck,	CK_242X),
  	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck,	CK_242X),
  	CLK(NULL,	"gfx_ick",	&gfx_ick,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1770
  	/* DSS domain clocks */
8b9cb3a8f   Senthilvadivu Guruswamy   OMAP2, 3: DSS2: M...
1771
  	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1772
1773
1774
  	CLK(NULL,	"dss1_fck",		&dss1_fck,	CK_242X),
  	CLK(NULL,	"dss2_fck",	&dss2_fck,	CK_242X),
  	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1775
  	/* L3 domain clocks */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1776
1777
1778
  	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_242X),
  	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_242X),
  	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1779
  	/* L4 domain clocks */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1780
1781
  	CLK(NULL,	"l4_ck",	&l4_ck,		CK_242X),
  	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick,	CK_242X),
19c1c0ce9   Paul Walmsley   OMAP2xxx: clock: ...
1782
  	CLK(NULL,	"wu_l4_ick",	&wu_l4_ick,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1783
  	/* virtual meta-group clock */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1784
  	CLK(NULL,	"virt_prcm_set", &virt_prcm_set, CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1785
  	/* general l4 interface ck, multi-parent functional clk */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
  	CLK(NULL,	"gpt1_ick",	&gpt1_ick,	CK_242X),
  	CLK(NULL,	"gpt1_fck",	&gpt1_fck,	CK_242X),
  	CLK(NULL,	"gpt2_ick",	&gpt2_ick,	CK_242X),
  	CLK(NULL,	"gpt2_fck",	&gpt2_fck,	CK_242X),
  	CLK(NULL,	"gpt3_ick",	&gpt3_ick,	CK_242X),
  	CLK(NULL,	"gpt3_fck",	&gpt3_fck,	CK_242X),
  	CLK(NULL,	"gpt4_ick",	&gpt4_ick,	CK_242X),
  	CLK(NULL,	"gpt4_fck",	&gpt4_fck,	CK_242X),
  	CLK(NULL,	"gpt5_ick",	&gpt5_ick,	CK_242X),
  	CLK(NULL,	"gpt5_fck",	&gpt5_fck,	CK_242X),
  	CLK(NULL,	"gpt6_ick",	&gpt6_ick,	CK_242X),
  	CLK(NULL,	"gpt6_fck",	&gpt6_fck,	CK_242X),
  	CLK(NULL,	"gpt7_ick",	&gpt7_ick,	CK_242X),
  	CLK(NULL,	"gpt7_fck",	&gpt7_fck,	CK_242X),
  	CLK(NULL,	"gpt8_ick",	&gpt8_ick,	CK_242X),
  	CLK(NULL,	"gpt8_fck",	&gpt8_fck,	CK_242X),
  	CLK(NULL,	"gpt9_ick",	&gpt9_ick,	CK_242X),
  	CLK(NULL,	"gpt9_fck",	&gpt9_fck,	CK_242X),
  	CLK(NULL,	"gpt10_ick",	&gpt10_ick,	CK_242X),
  	CLK(NULL,	"gpt10_fck",	&gpt10_fck,	CK_242X),
  	CLK(NULL,	"gpt11_ick",	&gpt11_ick,	CK_242X),
  	CLK(NULL,	"gpt11_fck",	&gpt11_fck,	CK_242X),
  	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_242X),
  	CLK(NULL,	"gpt12_fck",	&gpt12_fck,	CK_242X),
  	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1811
  	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1812
  	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1813
  	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1814
  	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1815
  	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1816
  	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1817
  	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1818
1819
1820
1821
1822
1823
1824
1825
1826
  	CLK(NULL,	"uart1_ick",	&uart1_ick,	CK_242X),
  	CLK(NULL,	"uart1_fck",	&uart1_fck,	CK_242X),
  	CLK(NULL,	"uart2_ick",	&uart2_ick,	CK_242X),
  	CLK(NULL,	"uart2_fck",	&uart2_fck,	CK_242X),
  	CLK(NULL,	"uart3_ick",	&uart3_ick,	CK_242X),
  	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_242X),
  	CLK(NULL,	"gpios_ick",	&gpios_ick,	CK_242X),
  	CLK(NULL,	"gpios_fck",	&gpios_fck,	CK_242X),
  	CLK("omap_wdt",	"ick",		&mpu_wdt_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1827
  	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1828
1829
1830
1831
1832
1833
1834
1835
  	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick,	CK_242X),
  	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_242X),
  	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick,	CK_242X),
  	CLK("omap24xxcam", "fck",	&cam_fck,	CK_242X),
  	CLK("omap24xxcam", "ick",	&cam_ick,	CK_242X),
  	CLK(NULL,	"mailboxes_ick", &mailboxes_ick,	CK_242X),
  	CLK(NULL,	"wdt4_ick",	&wdt4_ick,	CK_242X),
  	CLK(NULL,	"wdt4_fck",	&wdt4_fck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1836
1837
  	CLK(NULL,	"wdt3_ick",	&wdt3_ick,	CK_242X),
  	CLK(NULL,	"wdt3_fck",	&wdt3_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1838
1839
  	CLK(NULL,	"mspro_ick",	&mspro_ick,	CK_242X),
  	CLK(NULL,	"mspro_fck",	&mspro_fck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1840
1841
  	CLK("mmci-omap.0", "ick",	&mmc_ick,	CK_242X),
  	CLK("mmci-omap.0", "fck",	&mmc_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1842
1843
  	CLK(NULL,	"fac_ick",	&fac_ick,	CK_242X),
  	CLK(NULL,	"fac_fck",	&fac_fck,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1844
1845
  	CLK(NULL,	"eac_ick",	&eac_ick,	CK_242X),
  	CLK(NULL,	"eac_fck",	&eac_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1846
  	CLK("omap_hdq.0", "ick",	&hdq_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1847
  	CLK("omap_hdq.0", "fck",	&hdq_fck,	CK_242X),
f7bb0d9ab   Benoit Cousson   I2C: i2c-omap: Ch...
1848
  	CLK("omap_i2c.1", "ick",	&i2c1_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1849
  	CLK(NULL,	"i2c1_fck",	&i2c1_fck,	CK_242X),
f7bb0d9ab   Benoit Cousson   I2C: i2c-omap: Ch...
1850
  	CLK("omap_i2c.2", "ick",	&i2c2_ick,	CK_242X),
bf1e0776c   Benoit Cousson   OMAP: omap_device...
1851
  	CLK(NULL,	"i2c2_fck",	&i2c2_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1852
1853
1854
  	CLK(NULL,	"gpmc_fck",	&gpmc_fck,	CK_242X),
  	CLK(NULL,	"sdma_fck",	&sdma_fck,	CK_242X),
  	CLK(NULL,	"sdma_ick",	&sdma_ick,	CK_242X),
a56d9ea86   Paul Walmsley   OMAP2420: clock: ...
1855
  	CLK(NULL,	"sdrc_ick",	&sdrc_ick,	CK_242X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1856
1857
  	CLK(NULL,	"vlynq_ick",	&vlynq_ick,	CK_242X),
  	CLK(NULL,	"vlynq_fck",	&vlynq_fck,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1858
  	CLK(NULL,	"des_ick",	&des_ick,	CK_242X),
ee5500c45   Dmitry Kasatkin   crypto: omap - Up...
1859
  	CLK("omap-sham",	"ick",	&sha_ick,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1860
  	CLK("omap_rng",	"ick",		&rng_ick,	CK_242X),
82a0c149b   Dmitry Kasatkin   omap: crypto: upd...
1861
  	CLK("omap-aes",	"ick",	&aes_ick,	CK_242X),
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1862
1863
  	CLK(NULL,	"pka_ick",	&pka_ick,	CK_242X),
  	CLK(NULL,	"usb_fck",	&usb_fck,	CK_242X),
05ac10dd6   Felipe Balbi   usb: musb: trivia...
1864
  	CLK("musb-hdrc",	"fck",	&osc_ck,	CK_242X),
318c3e15c   Tarun Kanti DebBarma   ARM: OMAP2+: dmti...
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
  	CLK("omap_timer.1",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.2",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.3",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.4",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.5",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.6",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.7",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.8",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.9",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.10",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.11",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.12",	"32k_ck",	&func_32k_ck,	CK_243X),
  	CLK("omap_timer.1",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.2",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.3",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.4",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.5",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.6",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.7",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.8",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.9",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.10",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.11",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.12",	"sys_ck",	&sys_ck,	CK_243X),
  	CLK("omap_timer.1",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.2",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.3",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.4",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.5",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.6",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.7",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.8",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.9",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.10",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.11",	"alt_ck",	&alt_ck,	CK_243X),
  	CLK("omap_timer.12",	"alt_ck",	&alt_ck,	CK_243X),
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1901
1902
1903
1904
1905
  };
  
  /*
   * init code
   */
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1906
  int __init omap2420_clk_init(void)
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1907
1908
1909
1910
  {
  	const struct prcm_config *prcm;
  	struct omap_clk *c;
  	u32 clkrate;
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1911
1912
1913
1914
1915
  
  	prcm_clksrc_ctrl = OMAP2420_PRCM_CLKSRC_CTRL;
  	cm_idlest_pll = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST);
  	cpu_mask = RATE_IN_242X;
  	rate_table = omap2420_rate_table;
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1916
1917
  
  	clk_init(&omap2_clk_functions);
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1918
1919
  	for (c = omap2420_clks; c < omap2420_clks + ARRAY_SIZE(omap2420_clks);
  	     c++)
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1920
1921
1922
1923
  		clk_preinit(c->lk.clk);
  
  	osc_ck.rate = omap2_osc_clk_recalc(&osc_ck);
  	propagate_rate(&osc_ck);
44da0a510   Paul Walmsley   OMAP2xxx clock: m...
1924
  	sys_ck.rate = omap2xxx_sys_clk_recalc(&sys_ck);
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1925
  	propagate_rate(&sys_ck);
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1926
1927
1928
1929
1930
1931
  	for (c = omap2420_clks; c < omap2420_clks + ARRAY_SIZE(omap2420_clks);
  	     c++) {
  		clkdev_add(&c->lk);
  		clk_register(c->lk.clk);
  		omap2_init_clk_clkdm(c->lk.clk);
  	}
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1932

c6461f5c5   Paul Walmsley   OMAP2+: clock: di...
1933
1934
  	/* Disable autoidle on all clocks; let the PM code enable it later */
  	omap_clk_disable_autoidle_all();
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
  	/* Check the MPU rate set by bootloader */
  	clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
  	for (prcm = rate_table; prcm->mpu_speed; prcm++) {
  		if (!(prcm->flags & cpu_mask))
  			continue;
  		if (prcm->xtal_speed != sys_ck.rate)
  			continue;
  		if (prcm->dpll_speed <= clkrate)
  			break;
  	}
  	curr_prcm_set = prcm;
  
  	recalculate_root_clocks();
81b34fbec   Paul Walmsley   OMAP2 clock: spli...
1948
1949
1950
1951
  	pr_info("Clocking rate (Crystal/DPLL/MPU): %ld.%01ld/%ld/%ld MHz
  ",
  		(sys_ck.rate / 1000000), (sys_ck.rate / 100000) % 10,
  		(dpll_ck.rate / 1000000), (mpu_ck.rate / 1000000)) ;
d8a944582   Paul Walmsley   OMAP2 clock: conv...
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
  
  	/*
  	 * Only enable those clocks we will need, let the drivers
  	 * enable other clocks as necessary
  	 */
  	clk_enable_init_clocks();
  
  	/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */
  	vclk = clk_get(NULL, "virt_prcm_set");
  	sclk = clk_get(NULL, "sys_ck");
  	dclk = clk_get(NULL, "dpll_ck");
  
  	return 0;
  }
6b8858a97   Paul Walmsley   ARM: OMAP2: Chang...
1966