All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC 0/3] Use clknames to reference parent/bypass/ref clks
@ 2011-01-19 14:14 Rajendra Nayak
  2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
  2011-02-16 12:22 ` [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak
  0 siblings, 2 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-19 14:14 UTC (permalink / raw)
  To: linux-omap; +Cc: paul, khilman, Rajendra Nayak

This RFC series adds support to allow clock
framework to reference clk parents, reference
clocks and bypass clocks (for DPLL's) by names
along with the current support to reference
them by pointers.

Referencing through clk pointers makes it difficult
to support different revs of a single chip when
seperate clk nodes, one for each rev have to be modelled,
and especially when these are non-leaf nodes.
A case for this exists in the current series as well.

The series is boot tested on 3430sdp and fixes the
multiple WARN's otherwise seen like the one below

[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: at arch/arm/mach-omap2/clkt_clksel.c:194 omap2_clksel_recalc+0xd4/0xe4()
[    0.000000] clock: Could not find fieldval 0 for clock dpll2_fck parent core_ck
[    0.000000] Modules linked in:
[    0.000000] [<c006208c>] (unwind_backtrace+0x0/0xe4) from [<c0092bfc>] (warn_slowpath_common+0x4c/0x64)
[    0.000000] [<c0092bfc>] (warn_slowpath_common+0x4c/0x64) from [<c0092c94>] (warn_slowpath_fmt+0x2c/0x3c)
[    0.000000] [<c0092c94>] (warn_slowpath_fmt+0x2c/0x3c) from [<c0073dc4>] (omap2_clksel_recalc+0xd4/0xe4)
[    0.000000] [<c0073dc4>] (omap2_clksel_recalc+0xd4/0xe4) from [<c0077e1c>] (propagate_rate+0x24/0x50)
[    0.000000] [<c0077e1c>] (propagate_rate+0x24/0x50) from [<c0077e28>] (propagate_rate+0x30/0x50)
[    0.000000] ---[ end trace 1b75b31a2719ed1d ]---

Rajendra Nayak (3):
  OMAP: clocks: Use clk names instead of clk pointers
  OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2
  OMAP4: clocks: Remove unused clksel definitions

 arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++-------
 arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++--------
 arch/arm/mach-omap2/clock3xxx_data.c    |  183 +++++++++++++++++--------------
 arch/arm/mach-omap2/clock44xx_data.c    |  145 +++++++++++-------------
 arch/arm/mach-omap2/cm-regbits-34xx.h   |    2 +
 arch/arm/plat-omap/clock.c              |   48 +++++++-
 arch/arm/plat-omap/include/plat/clock.h |   11 ++-
 7 files changed, 308 insertions(+), 255 deletions(-)


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-19 14:14 [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak
@ 2011-01-19 14:14 ` Rajendra Nayak
  2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
                     ` (2 more replies)
  2011-02-16 12:22 ` [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak
  1 sibling, 3 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-19 14:14 UTC (permalink / raw)
  To: linux-omap; +Cc: paul, khilman, Rajendra Nayak

There are various instances of clk pointers being
embedded within structures in the clock framework
to refer to clk parents, reference clocks, bypass
clocks etc.
The right way to reference these is by their name
and not by embedding direct pointers to these clks.

Hence make provision to be able to provide clock
names to refer to parents and bypass/ref clks and
populate the clk pointers at runtime.

This requires the const qualifier to be dropped for
struct clksel within struct clk and hence needs 
clksel struct definitions to be changed in all
clock*_data.c files.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
---
 arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++++---------
 arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++++----------
 arch/arm/mach-omap2/clock3xxx_data.c    |  144 +++++++++++++++---------------
 arch/arm/mach-omap2/clock44xx_data.c    |  136 +++++++++++++++---------------
 arch/arm/plat-omap/clock.c              |   48 +++++++++--
 arch/arm/plat-omap/include/plat/clock.h |   11 ++-
 6 files changed, 277 insertions(+), 236 deletions(-)

diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index 0a992bc..5662e51 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -161,17 +161,17 @@ static struct clk apll54_ck = {
 
 /* func_54m_ck */
 
-static const struct clksel_rate func_54m_apll54_rates[] = {
+static struct clksel_rate func_54m_apll54_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate func_54m_alt_rates[] = {
+static struct clksel_rate func_54m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel func_54m_clksel[] = {
+static struct clksel func_54m_clksel[] = {
 	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
 	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
 	{ .parent = NULL },
@@ -207,17 +207,17 @@ static struct clk func_96m_ck = {
 
 /* func_48m_ck */
 
-static const struct clksel_rate func_48m_apll96_rates[] = {
+static struct clksel_rate func_48m_apll96_rates[] = {
 	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate func_48m_alt_rates[] = {
+static struct clksel_rate func_48m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel func_48m_clksel[] = {
+static struct clksel func_48m_clksel[] = {
 	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
 	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
 	{ .parent = NULL }
@@ -262,27 +262,27 @@ static struct clk wdt1_osc_ck = {
  * 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[] = {
+static struct clksel_rate common_clkout_src_core_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_sys_rates[] = {
+static struct clksel_rate common_clkout_src_sys_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_96m_rates[] = {
+static struct clksel_rate common_clkout_src_96m_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_54m_rates[] = {
+static struct clksel_rate common_clkout_src_54m_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel common_clkout_src_clksel[] = {
+static 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 },
@@ -306,7 +306,7 @@ static struct clk sys_clkout_src = {
 	.set_rate	= &omap2_clksel_set_rate
 };
 
-static const struct clksel_rate common_clkout_rates[] = {
+static struct clksel_rate common_clkout_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
@@ -315,7 +315,7 @@ static const struct clksel_rate common_clkout_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel sys_clkout_clksel[] = {
+static struct clksel sys_clkout_clksel[] = {
 	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
 	{ .parent = NULL }
 };
@@ -350,7 +350,7 @@ static struct clk sys_clkout2_src = {
 	.set_rate	= &omap2_clksel_set_rate
 };
 
-static const struct clksel sys_clkout2_clksel[] = {
+static struct clksel sys_clkout2_clksel[] = {
 	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates },
 	{ .parent = NULL }
 };
@@ -390,7 +390,7 @@ static struct clk emul_ck = {
  * - Base divider comes from: CM_CLKSEL_MPU
  *
  */
-static const struct clksel_rate mpu_core_rates[] = {
+static struct clksel_rate mpu_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
@@ -399,7 +399,7 @@ static const struct clksel_rate mpu_core_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel mpu_clksel[] = {
+static struct clksel mpu_clksel[] = {
 	{ .parent = &core_ck, .rates = mpu_core_rates },
 	{ .parent = NULL }
 };
@@ -426,7 +426,7 @@ static struct clk mpu_ck = {	/* Control cpu */
  * controls. The other branch gets further divided by 2 then possibly
  * routed into a synchronizer and out of clocks abc.
  */
-static const struct clksel_rate dsp_fck_core_rates[] = {
+static struct clksel_rate dsp_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 },
@@ -437,7 +437,7 @@ static const struct clksel_rate dsp_fck_core_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel dsp_fck_clksel[] = {
+static struct clksel dsp_fck_clksel[] = {
 	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
 	{ .parent = NULL }
 };
@@ -456,13 +456,13 @@ static struct clk dsp_fck = {
 };
 
 /* DSP interface clock */
-static const struct clksel_rate dsp_irate_ick_rates[] = {
+static struct clksel_rate dsp_irate_ick_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel dsp_irate_ick_clksel[] = {
+static struct clksel dsp_irate_ick_clksel[] = {
 	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
 	{ .parent = NULL }
 };
@@ -536,7 +536,7 @@ static struct clk iva1_mpu_int_ifck = {
  * may very well need notification when the clock changes. Currently for low
  * operating points, these are taken care of in sleep.S.
  */
-static const struct clksel_rate core_l3_core_rates[] = {
+static struct clksel_rate core_l3_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
 	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
@@ -547,7 +547,7 @@ static const struct clksel_rate core_l3_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel core_l3_clksel[] = {
+static struct clksel core_l3_clksel[] = {
 	{ .parent = &core_ck, .rates = core_l3_core_rates },
 	{ .parent = NULL }
 };
@@ -564,14 +564,14 @@ static struct clk core_l3_ck = {	/* Used for ick and fck, interconnect */
 };
 
 /* usb_l4_ick */
-static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
+static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel usb_l4_ick_clksel[] = {
+static struct clksel usb_l4_ick_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
 	{ .parent = NULL },
 };
@@ -597,13 +597,13 @@ static struct clk usb_l4_ick = {	/* FS-USB interface clock */
  * functional clocks.	Fixed APLL functional source clocks are managed in
  * this domain.
  */
-static const struct clksel_rate l4_core_l3_rates[] = {
+static struct clksel_rate l4_core_l3_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel l4_clksel[] = {
+static struct clksel l4_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
 	{ .parent = NULL }
 };
@@ -627,7 +627,7 @@ static struct clk l4_ck = {		/* used both as an ick and fck */
  *
  * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
  */
-static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
+static struct clksel_rate ssi_ssr_sst_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 },
@@ -637,7 +637,7 @@ static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel ssi_ssr_sst_fck_clksel[] = {
+static struct clksel ssi_ssr_sst_fck_clksel[] = {
 	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
 	{ .parent = NULL }
 };
@@ -683,7 +683,7 @@ static struct clk ssi_l4_ick = {
  */
 
 /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
-static const struct clksel gfx_fck_clksel[] = {
+static struct clksel gfx_fck_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
 	{ .parent = NULL },
 };
@@ -736,12 +736,12 @@ static struct clk gfx_ick = {
  */
 /* XXX Add RATE_NOT_VALIDATED */
 
-static const struct clksel_rate dss1_fck_sys_rates[] = {
+static struct clksel_rate dss1_fck_sys_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate dss1_fck_core_rates[] = {
+static 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 },
@@ -755,7 +755,7 @@ static const struct clksel_rate dss1_fck_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel dss1_fck_clksel[] = {
+static struct clksel dss1_fck_clksel[] = {
 	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
 	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
 	{ .parent = NULL },
@@ -785,17 +785,17 @@ static struct clk dss1_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate dss2_fck_sys_rates[] = {
+static struct clksel_rate dss2_fck_sys_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate dss2_fck_48m_rates[] = {
+static struct clksel_rate dss2_fck_48m_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel dss2_fck_clksel[] = {
+static struct clksel dss2_fck_clksel[] = {
 	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
 	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
 	{ .parent = NULL }
@@ -831,12 +831,12 @@ static struct clk dss_54m_fck = {	/* Alt clk used in power management */
  * here will likely have an L4 interface parent, and may have multiple
  * functional clock parents.
  */
-static const struct clksel_rate gpt_alt_rates[] = {
+static struct clksel_rate gpt_alt_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel omap24xx_gpt_clksel[] = {
+static 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 },
@@ -1142,17 +1142,17 @@ static struct clk mcbsp1_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate common_mcbsp_96m_rates[] = {
+static 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[] = {
+static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel mcbsp_fck_clksel[] = {
+static struct clksel mcbsp_fck_clksel[] = {
 	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
 	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
 	{ .parent = NULL }
@@ -1618,12 +1618,12 @@ static struct clk vlynq_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate vlynq_fck_96m_rates[] = {
+static struct clksel_rate vlynq_fck_96m_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate vlynq_fck_core_rates[] = {
+static 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 },
@@ -1637,7 +1637,7 @@ static const struct clksel_rate vlynq_fck_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel vlynq_fck_clksel[] = {
+static struct clksel vlynq_fck_clksel[] = {
 	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
 	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
 	{ .parent = NULL }
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
index c047dcd..6f08a57 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -161,17 +161,17 @@ static struct clk apll54_ck = {
 
 /* func_54m_ck */
 
-static const struct clksel_rate func_54m_apll54_rates[] = {
+static struct clksel_rate func_54m_apll54_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate func_54m_alt_rates[] = {
+static struct clksel_rate func_54m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel func_54m_clksel[] = {
+static struct clksel func_54m_clksel[] = {
 	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
 	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
 	{ .parent = NULL },
@@ -198,17 +198,17 @@ static struct clk core_ck = {
 };
 
 /* func_96m_ck */
-static const struct clksel_rate func_96m_apll96_rates[] = {
+static struct clksel_rate func_96m_apll96_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate func_96m_alt_rates[] = {
+static struct clksel_rate func_96m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
 	{ .div = 0 },
 };
 
-static const struct clksel func_96m_clksel[] = {
+static struct clksel func_96m_clksel[] = {
 	{ .parent = &apll96_ck,	.rates = func_96m_apll96_rates },
 	{ .parent = &alt_ck,	.rates = func_96m_alt_rates },
 	{ .parent = NULL }
@@ -228,17 +228,17 @@ static struct clk func_96m_ck = {
 
 /* func_48m_ck */
 
-static const struct clksel_rate func_48m_apll96_rates[] = {
+static struct clksel_rate func_48m_apll96_rates[] = {
 	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate func_48m_alt_rates[] = {
+static struct clksel_rate func_48m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel func_48m_clksel[] = {
+static struct clksel func_48m_clksel[] = {
 	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
 	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
 	{ .parent = NULL }
@@ -283,27 +283,27 @@ static struct clk wdt1_osc_ck = {
  * 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[] = {
+static struct clksel_rate common_clkout_src_core_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_sys_rates[] = {
+static struct clksel_rate common_clkout_src_sys_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_96m_rates[] = {
+static struct clksel_rate common_clkout_src_96m_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_clkout_src_54m_rates[] = {
+static struct clksel_rate common_clkout_src_54m_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel common_clkout_src_clksel[] = {
+static 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 },
@@ -327,7 +327,7 @@ static struct clk sys_clkout_src = {
 	.set_rate	= &omap2_clksel_set_rate
 };
 
-static const struct clksel_rate common_clkout_rates[] = {
+static struct clksel_rate common_clkout_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
@@ -336,7 +336,7 @@ static const struct clksel_rate common_clkout_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel sys_clkout_clksel[] = {
+static struct clksel sys_clkout_clksel[] = {
 	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
 	{ .parent = NULL }
 };
@@ -375,13 +375,13 @@ static struct clk emul_ck = {
  * - Base divider comes from: CM_CLKSEL_MPU
  *
  */
-static const struct clksel_rate mpu_core_rates[] = {
+static struct clksel_rate mpu_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 },
 };
 
-static const struct clksel mpu_clksel[] = {
+static struct clksel mpu_clksel[] = {
 	{ .parent = &core_ck, .rates = mpu_core_rates },
 	{ .parent = NULL }
 };
@@ -408,7 +408,7 @@ static struct clk mpu_ck = {	/* Control cpu */
  * controls. The other branch gets further divided by 2 then possibly
  * routed into a synchronizer and out of clocks abc.
  */
-static const struct clksel_rate dsp_fck_core_rates[] = {
+static struct clksel_rate dsp_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 },
@@ -416,7 +416,7 @@ static const struct clksel_rate dsp_fck_core_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel dsp_fck_clksel[] = {
+static struct clksel dsp_fck_clksel[] = {
 	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
 	{ .parent = NULL }
 };
@@ -435,14 +435,14 @@ static struct clk dsp_fck = {
 };
 
 /* DSP interface clock */
-static const struct clksel_rate dsp_irate_ick_rates[] = {
+static struct clksel_rate dsp_irate_ick_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_243X },
 	{ .div = 0 },
 };
 
-static const struct clksel dsp_irate_ick_clksel[] = {
+static struct clksel dsp_irate_ick_clksel[] = {
 	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
 	{ .parent = NULL }
 };
@@ -486,14 +486,14 @@ static struct clk iva2_1_ick = {
  * may very well need notification when the clock changes. Currently for low
  * operating points, these are taken care of in sleep.S.
  */
-static const struct clksel_rate core_l3_core_rates[] = {
+static struct clksel_rate core_l3_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
 	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel core_l3_clksel[] = {
+static struct clksel core_l3_clksel[] = {
 	{ .parent = &core_ck, .rates = core_l3_core_rates },
 	{ .parent = NULL }
 };
@@ -510,14 +510,14 @@ static struct clk core_l3_ck = {	/* Used for ick and fck, interconnect */
 };
 
 /* usb_l4_ick */
-static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
+static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel usb_l4_ick_clksel[] = {
+static struct clksel usb_l4_ick_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
 	{ .parent = NULL },
 };
@@ -543,13 +543,13 @@ static struct clk usb_l4_ick = {	/* FS-USB interface clock */
  * functional clocks.	Fixed APLL functional source clocks are managed in
  * this domain.
  */
-static const struct clksel_rate l4_core_l3_rates[] = {
+static struct clksel_rate l4_core_l3_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel l4_clksel[] = {
+static struct clksel l4_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
 	{ .parent = NULL }
 };
@@ -573,7 +573,7 @@ static struct clk l4_ck = {		/* used both as an ick and fck */
  *
  * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
  */
-static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
+static struct clksel_rate ssi_ssr_sst_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 },
@@ -582,7 +582,7 @@ static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel ssi_ssr_sst_fck_clksel[] = {
+static struct clksel ssi_ssr_sst_fck_clksel[] = {
 	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
 	{ .parent = NULL }
 };
@@ -628,7 +628,7 @@ static struct clk ssi_l4_ick = {
  */
 
 /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
-static const struct clksel gfx_fck_clksel[] = {
+static struct clksel gfx_fck_clksel[] = {
 	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
 	{ .parent = NULL },
 };
@@ -678,7 +678,7 @@ static struct clk gfx_ick = {
  *		MDM_ICLK
  * These clocks are usable in chassis mode only.
  */
-static const struct clksel_rate mdm_ick_core_rates[] = {
+static struct clksel_rate mdm_ick_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
 	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
 	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
@@ -686,7 +686,7 @@ static const struct clksel_rate mdm_ick_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel mdm_ick_clksel[] = {
+static struct clksel mdm_ick_clksel[] = {
 	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
 	{ .parent = NULL }
 };
@@ -724,12 +724,12 @@ static struct clk mdm_osc_ck = {
  */
 /* XXX Add RATE_NOT_VALIDATED */
 
-static const struct clksel_rate dss1_fck_sys_rates[] = {
+static struct clksel_rate dss1_fck_sys_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate dss1_fck_core_rates[] = {
+static 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 },
@@ -743,7 +743,7 @@ static const struct clksel_rate dss1_fck_core_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel dss1_fck_clksel[] = {
+static struct clksel dss1_fck_clksel[] = {
 	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
 	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
 	{ .parent = NULL },
@@ -773,17 +773,17 @@ static struct clk dss1_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate dss2_fck_sys_rates[] = {
+static struct clksel_rate dss2_fck_sys_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate dss2_fck_48m_rates[] = {
+static struct clksel_rate dss2_fck_48m_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel dss2_fck_clksel[] = {
+static struct clksel dss2_fck_clksel[] = {
 	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
 	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
 	{ .parent = NULL }
@@ -819,12 +819,12 @@ static struct clk dss_54m_fck = {	/* Alt clk used in power management */
  * here will likely have an L4 interface parent, and may have multiple
  * functional clock parents.
  */
-static const struct clksel_rate gpt_alt_rates[] = {
+static struct clksel_rate gpt_alt_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel omap24xx_gpt_clksel[] = {
+static 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 },
@@ -1130,17 +1130,17 @@ static struct clk mcbsp1_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate common_mcbsp_96m_rates[] = {
+static 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[] = {
+static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 	{ .div = 0 }
 };
 
-static const struct clksel mcbsp_fck_clksel[] = {
+static struct clksel mcbsp_fck_clksel[] = {
 	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
 	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
 	{ .parent = NULL }
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
index 403a4a1..9c87adb 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -109,37 +109,37 @@ static struct clk virt_38_4m_ck = {
 	.rate		= 38400000,
 };
 
-static const struct clksel_rate osc_sys_12m_rates[] = {
+static struct clksel_rate osc_sys_12m_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate osc_sys_13m_rates[] = {
+static struct clksel_rate osc_sys_13m_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate osc_sys_16_8m_rates[] = {
+static struct clksel_rate osc_sys_16_8m_rates[] = {
 	{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate osc_sys_19_2m_rates[] = {
+static struct clksel_rate osc_sys_19_2m_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate osc_sys_26m_rates[] = {
+static struct clksel_rate osc_sys_26m_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate osc_sys_38_4m_rates[] = {
+static struct clksel_rate osc_sys_38_4m_rates[] = {
 	{ .div = 1, .val = 4, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel osc_sys_clksel[] = {
+static struct clksel osc_sys_clksel[] = {
 	{ .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
 	{ .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
 	{ .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
@@ -162,13 +162,13 @@ static struct clk osc_sys_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate div2_rates[] = {
+static struct clksel_rate div2_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel sys_clksel[] = {
+static struct clksel sys_clksel[] = {
 	{ .parent = &osc_sys_ck, .rates = div2_rates },
 	{ .parent = NULL }
 };
@@ -212,7 +212,7 @@ static struct clk sys_clkout1 = {
 
 /* CM CLOCKS */
 
-static const struct clksel_rate div16_dpll_rates[] = {
+static struct clksel_rate div16_dpll_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
@@ -232,7 +232,7 @@ static const struct clksel_rate div16_dpll_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel_rate dpll4_rates[] = {
+static struct clksel_rate dpll4_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
@@ -318,7 +318,7 @@ static struct clk dpll1_x2_ck = {
 };
 
 /* On DPLL1, unlike other DPLLs, the divider is downstream from CLKOUTX2 */
-static const struct clksel div16_dpll1_x2m2_clksel[] = {
+static struct clksel div16_dpll1_x2m2_clksel[] = {
 	{ .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
 	{ .parent = NULL }
 };
@@ -378,7 +378,7 @@ static struct clk dpll2_ck = {
 	.recalc		= &omap3_dpll_recalc,
 };
 
-static const struct clksel div16_dpll2_m2x2_clksel[] = {
+static struct clksel div16_dpll2_m2x2_clksel[] = {
 	{ .parent = &dpll2_ck, .rates = div16_dpll_rates },
 	{ .parent = NULL }
 };
@@ -449,7 +449,7 @@ static struct clk dpll3_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel_rate div31_dpll3_rates[] = {
+static struct clksel_rate div31_dpll3_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
@@ -484,7 +484,7 @@ static const struct clksel_rate div31_dpll3_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel div31_dpll3m2_clksel[] = {
+static struct clksel div31_dpll3m2_clksel[] = {
 	{ .parent = &dpll3_ck, .rates = div31_dpll3_rates },
 	{ .parent = NULL }
 };
@@ -520,7 +520,7 @@ static struct clk dpll3_m2x2_ck = {
 };
 
 /* The PWRDN bit is apparently only available on 3430ES2 and above */
-static const struct clksel div16_dpll3_clksel[] = {
+static struct clksel div16_dpll3_clksel[] = {
 	{ .parent = &dpll3_ck, .rates = div16_dpll_rates },
 	{ .parent = NULL }
 };
@@ -635,7 +635,7 @@ static struct clk dpll4_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel dpll4_clksel[] = {
+static struct clksel dpll4_clksel[] = {
 	{ .parent = &dpll4_ck, .rates = dpll4_rates },
 	{ .parent = NULL }
 };
@@ -680,23 +680,23 @@ static struct clk omap_192m_alwon_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate omap_96m_alwon_fck_rates[] = {
+static struct clksel_rate omap_96m_alwon_fck_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_36XX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_36XX },
 	{ .div = 0 }
 };
 
-static const struct clksel omap_96m_alwon_fck_clksel[] = {
+static struct clksel omap_96m_alwon_fck_clksel[] = {
 	{ .parent = &omap_192m_alwon_fck, .rates = omap_96m_alwon_fck_rates },
 	{ .parent = NULL }
 };
 
-static const struct clksel_rate omap_96m_dpll_rates[] = {
+static struct clksel_rate omap_96m_dpll_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate omap_96m_sys_rates[] = {
+static struct clksel_rate omap_96m_sys_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
@@ -726,7 +726,7 @@ static struct clk cm_96m_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel omap_96m_fck_clksel[] = {
+static struct clksel omap_96m_fck_clksel[] = {
 	{ .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
 	{ .parent = &sys_ck,	 .rates = omap_96m_sys_rates },
 	{ .parent = NULL }
@@ -768,17 +768,17 @@ static struct clk dpll4_m3x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
+static struct clksel_rate omap_54m_d4m3x2_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate omap_54m_alt_rates[] = {
+static struct clksel_rate omap_54m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel omap_54m_clksel[] = {
+static struct clksel omap_54m_clksel[] = {
 	{ .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
 	{ .parent = &sys_altclk,    .rates = omap_54m_alt_rates },
 	{ .parent = NULL }
@@ -794,17 +794,17 @@ static struct clk omap_54m_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate omap_48m_cm96m_rates[] = {
+static struct clksel_rate omap_48m_cm96m_rates[] = {
 	{ .div = 2, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate omap_48m_alt_rates[] = {
+static struct clksel_rate omap_48m_alt_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel omap_48m_clksel[] = {
+static struct clksel omap_48m_clksel[] = {
 	{ .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
 	{ .parent = &sys_altclk, .rates = omap_48m_alt_rates },
 	{ .parent = NULL }
@@ -953,7 +953,7 @@ static struct clk dpll5_ck = {
 	.recalc		= &omap3_dpll_recalc,
 };
 
-static const struct clksel div16_dpll5_clksel[] = {
+static struct clksel div16_dpll5_clksel[] = {
 	{ .parent = &dpll5_ck, .rates = div16_dpll_rates },
 	{ .parent = NULL }
 };
@@ -972,27 +972,27 @@ static struct clk dpll5_m2_ck = {
 
 /* CM EXTERNAL CLOCK OUTPUTS */
 
-static const struct clksel_rate clkout2_src_core_rates[] = {
+static struct clksel_rate clkout2_src_core_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate clkout2_src_sys_rates[] = {
+static struct clksel_rate clkout2_src_sys_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate clkout2_src_96m_rates[] = {
+static struct clksel_rate clkout2_src_96m_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate clkout2_src_54m_rates[] = {
+static struct clksel_rate clkout2_src_54m_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel clkout2_src_clksel[] = {
+static struct clksel clkout2_src_clksel[] = {
 	{ .parent = &core_ck,		.rates = clkout2_src_core_rates },
 	{ .parent = &sys_ck,		.rates = clkout2_src_sys_rates },
 	{ .parent = &cm_96m_fck,	.rates = clkout2_src_96m_rates },
@@ -1013,7 +1013,7 @@ static struct clk clkout2_src_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate sys_clkout2_rates[] = {
+static struct clksel_rate sys_clkout2_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 4, .val = 2, .flags = RATE_IN_3XXX },
@@ -1022,7 +1022,7 @@ static const struct clksel_rate sys_clkout2_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel sys_clkout2_clksel[] = {
+static struct clksel sys_clkout2_clksel[] = {
 	{ .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
 	{ .parent = NULL },
 };
@@ -1050,14 +1050,14 @@ static struct clk corex2_fck = {
 
 /* DPLL power domain clock controls */
 
-static const struct clksel_rate div4_rates[] = {
+static struct clksel_rate div4_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel div4_core_clksel[] = {
+static struct clksel div4_core_clksel[] = {
 	{ .parent = &core_ck, .rates = div4_rates },
 	{ .parent = NULL }
 };
@@ -1086,13 +1086,13 @@ static struct clk mpu_ck = {
 };
 
 /* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */
-static const struct clksel_rate arm_fck_rates[] = {
+static struct clksel_rate arm_fck_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel arm_fck_clksel[] = {
+static struct clksel arm_fck_clksel[] = {
 	{ .parent = &mpu_ck, .rates = arm_fck_rates },
 	{ .parent = NULL }
 };
@@ -1145,7 +1145,7 @@ static struct clk iva2_ck = {
 
 /* Common interface clocks */
 
-static const struct clksel div2_core_clksel[] = {
+static struct clksel div2_core_clksel[] = {
 	{ .parent = &core_ck, .rates = div2_rates },
 	{ .parent = NULL }
 };
@@ -1162,7 +1162,7 @@ static struct clk l3_ick = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel div2_l3_clksel[] = {
+static struct clksel div2_l3_clksel[] = {
 	{ .parent = &l3_ick, .rates = div2_rates },
 	{ .parent = NULL }
 };
@@ -1180,7 +1180,7 @@ static struct clk l4_ick = {
 
 };
 
-static const struct clksel div2_l4_clksel[] = {
+static struct clksel div2_l4_clksel[] = {
 	{ .parent = &l4_ick, .rates = div2_rates },
 	{ .parent = NULL }
 };
@@ -1200,7 +1200,7 @@ static struct clk rm_ick = {
 
 /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX instead */
 
-static const struct clksel gfx_l3_clksel[] = {
+static struct clksel gfx_l3_clksel[] = {
 	{ .parent = &l3_ick, .rates = gfx_l3_rates },
 	{ .parent = NULL }
 };
@@ -1257,7 +1257,7 @@ static struct clk gfx_cg2_ck = {
 
 /* SGX power domain - 3430ES2 only */
 
-static const struct clksel_rate sgx_core_rates[] = {
+static struct clksel_rate sgx_core_rates[] = {
 	{ .div = 2, .val = 5, .flags = RATE_IN_36XX },
 	{ .div = 3, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 4, .val = 1, .flags = RATE_IN_3XXX },
@@ -1265,23 +1265,23 @@ static const struct clksel_rate sgx_core_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel_rate sgx_192m_rates[] = {
+static struct clksel_rate sgx_192m_rates[] = {
 	{ .div = 1,  .val = 4, .flags = RATE_IN_36XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate sgx_corex2_rates[] = {
+static struct clksel_rate sgx_corex2_rates[] = {
 	{ .div = 3, .val = 6, .flags = RATE_IN_36XX },
 	{ .div = 5, .val = 7, .flags = RATE_IN_36XX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate sgx_96m_rates[] = {
+static struct clksel_rate sgx_96m_rates[] = {
 	{ .div = 1,  .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel sgx_clksel[] = {
+static struct clksel sgx_clksel[] = {
 	{ .parent = &core_ck,	 .rates = sgx_core_rates },
 	{ .parent = &cm_96m_fck, .rates = sgx_96m_rates },
 	{ .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates },
@@ -1356,7 +1356,7 @@ static struct clk mad2d_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel omap343x_gpt_clksel[] = {
+static struct clksel omap343x_gpt_clksel[] = {
 	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
 	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
 	{ .parent = NULL}
@@ -1501,17 +1501,17 @@ static struct clk i2c1_fck = {
  * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
  * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
  */
-static const struct clksel_rate common_mcbsp_96m_rates[] = {
+static struct clksel_rate common_mcbsp_96m_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
+static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 }
 };
 
-static const struct clksel mcbsp_15_clksel[] = {
+static struct clksel mcbsp_15_clksel[] = {
 	{ .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
 	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
 	{ .parent = NULL }
@@ -1643,7 +1643,7 @@ static struct clk hdq_fck = {
 
 /* DPLL3-derived clock */
 
-static const struct clksel_rate ssi_ssr_corex2_rates[] = {
+static struct clksel_rate ssi_ssr_corex2_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
@@ -1653,7 +1653,7 @@ static const struct clksel_rate ssi_ssr_corex2_rates[] = {
 	{ .div = 0 }
 };
 
-static const struct clksel ssi_ssr_clksel[] = {
+static struct clksel ssi_ssr_clksel[] = {
 	{ .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
 	{ .parent = NULL }
 };
@@ -2078,7 +2078,7 @@ static struct clk ssi_ick_3430es2 = {
 /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
  * but l4_ick makes more sense to me */
 
-static const struct clksel usb_l4_clksel[] = {
+static struct clksel usb_l4_clksel[] = {
 	{ .parent = &l4_ick, .rates = div2_rates },
 	{ .parent = NULL },
 };
@@ -2282,7 +2282,7 @@ static struct clk usbhost_ick = {
 
 /* WKUP */
 
-static const struct clksel_rate usim_96m_rates[] = {
+static struct clksel_rate usim_96m_rates[] = {
 	{ .div = 2,  .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 4,  .val = 4, .flags = RATE_IN_3XXX },
 	{ .div = 8,  .val = 5, .flags = RATE_IN_3XXX },
@@ -2290,7 +2290,7 @@ static const struct clksel_rate usim_96m_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel_rate usim_120m_rates[] = {
+static struct clksel_rate usim_120m_rates[] = {
 	{ .div = 4,  .val = 7,	.flags = RATE_IN_3XXX },
 	{ .div = 8,  .val = 8,	.flags = RATE_IN_3XXX },
 	{ .div = 16, .val = 9,	.flags = RATE_IN_3XXX },
@@ -2298,7 +2298,7 @@ static const struct clksel_rate usim_120m_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel usim_clksel[] = {
+static struct clksel usim_clksel[] = {
 	{ .parent = &omap_96m_fck,	.rates = usim_96m_rates },
 	{ .parent = &dpll5_m2_ck,	.rates = usim_120m_rates },
 	{ .parent = &sys_ck,		.rates = div2_rates },
@@ -2851,7 +2851,7 @@ static struct clk mcbsp4_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel mcbsp_234_clksel[] = {
+static struct clksel mcbsp_234_clksel[] = {
 	{ .parent = &per_96m_fck,  .rates = common_mcbsp_96m_rates },
 	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
 	{ .parent = NULL }
@@ -2900,27 +2900,27 @@ static struct clk mcbsp4_fck = {
 
 /* More information: ARM Cortex-A8 Technical Reference Manual, sect 10.1 */
 
-static const struct clksel_rate emu_src_sys_rates[] = {
+static struct clksel_rate emu_src_sys_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate emu_src_core_rates[] = {
+static struct clksel_rate emu_src_core_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate emu_src_per_rates[] = {
+static struct clksel_rate emu_src_per_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate emu_src_mpu_rates[] = {
+static struct clksel_rate emu_src_mpu_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel emu_src_clksel[] = {
+static struct clksel emu_src_clksel[] = {
 	{ .parent = &sys_ck,		.rates = emu_src_sys_rates },
 	{ .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
 	{ .parent = &emu_per_alwon_ck,	.rates = emu_src_per_rates },
@@ -2944,7 +2944,7 @@ static struct clk emu_src_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate pclk_emu_rates[] = {
+static struct clksel_rate pclk_emu_rates[] = {
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
@@ -2952,7 +2952,7 @@ static const struct clksel_rate pclk_emu_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel pclk_emu_clksel[] = {
+static struct clksel pclk_emu_clksel[] = {
 	{ .parent = &emu_src_ck, .rates = pclk_emu_rates },
 	{ .parent = NULL },
 };
@@ -2968,14 +2968,14 @@ static struct clk pclk_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate pclkx2_emu_rates[] = {
+static struct clksel_rate pclkx2_emu_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel pclkx2_emu_clksel[] = {
+static struct clksel pclkx2_emu_clksel[] = {
 	{ .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
 	{ .parent = NULL },
 };
@@ -2991,7 +2991,7 @@ static struct clk pclkx2_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel atclk_emu_clksel[] = {
+static struct clksel atclk_emu_clksel[] = {
 	{ .parent = &emu_src_ck, .rates = div2_rates },
 	{ .parent = NULL },
 };
@@ -3018,14 +3018,14 @@ static struct clk traceclk_src_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel_rate traceclk_rates[] = {
+static struct clksel_rate traceclk_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
 	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
 	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
 	{ .div = 0 },
 };
 
-static const struct clksel traceclk_clksel[] = {
+static struct clksel traceclk_clksel[] = {
 	{ .parent = &traceclk_src_fck, .rates = traceclk_rates },
 	{ .parent = NULL },
 };
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
index e8cb32f..b02bfae 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -127,47 +127,47 @@ static struct clk virt_38400000_ck = {
 	.rate		= 38400000,
 };
 
-static const struct clksel_rate div_1_0_rates[] = {
+static struct clksel_rate div_1_0_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_1_rates[] = {
+static struct clksel_rate div_1_1_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_2_rates[] = {
+static struct clksel_rate div_1_2_rates[] = {
 	{ .div = 1, .val = 2, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_3_rates[] = {
+static struct clksel_rate div_1_3_rates[] = {
 	{ .div = 1, .val = 3, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_4_rates[] = {
+static struct clksel_rate div_1_4_rates[] = {
 	{ .div = 1, .val = 4, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_5_rates[] = {
+static struct clksel_rate div_1_5_rates[] = {
 	{ .div = 1, .val = 5, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_6_rates[] = {
+static struct clksel_rate div_1_6_rates[] = {
 	{ .div = 1, .val = 6, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel_rate div_1_7_rates[] = {
+static struct clksel_rate div_1_7_rates[] = {
 	{ .div = 1, .val = 7, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel sys_clkin_sel[] = {
+static struct clksel sys_clkin_sel[] = {
 	{ .parent = &virt_12000000_ck, .rates = div_1_1_rates },
 	{ .parent = &virt_13000000_ck, .rates = div_1_2_rates },
 	{ .parent = &virt_16800000_ck, .rates = div_1_3_rates },
@@ -221,7 +221,7 @@ static struct clk xclk60motg_ck = {
 
 /* Module clocks and DPLL outputs */
 
-static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
+static struct clksel abe_dpll_bypass_clk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -283,7 +283,7 @@ static struct clk dpll_abe_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel_rate div31_1to31_rates[] = {
+static struct clksel_rate div31_1to31_rates[] = {
 	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 2, .val = 2, .flags = RATE_IN_4430 },
 	{ .div = 3, .val = 3, .flags = RATE_IN_4430 },
@@ -318,7 +318,7 @@ static const struct clksel_rate div31_1to31_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel dpll_abe_m2x2_div[] = {
+static struct clksel dpll_abe_m2x2_div[] = {
 	{ .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -343,14 +343,14 @@ static struct clk abe_24m_fclk = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel_rate div3_1to4_rates[] = {
+static struct clksel_rate div3_1to4_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel abe_clk_div[] = {
+static struct clksel abe_clk_div[] = {
 	{ .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
 	{ .parent = NULL },
 };
@@ -367,13 +367,13 @@ static struct clk abe_clk = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel_rate div2_1to2_rates[] = {
+static struct clksel_rate div2_1to2_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel aess_fclk_div[] = {
+static struct clksel aess_fclk_div[] = {
 	{ .parent = &abe_clk, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -402,7 +402,7 @@ static struct clk dpll_abe_m3x2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel core_hsd_byp_clk_mux_sel[] = {
+static struct clksel core_hsd_byp_clk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -455,7 +455,7 @@ static struct clk dpll_core_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel dpll_core_m6x2_div[] = {
+static struct clksel dpll_core_m6x2_div[] = {
 	{ .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -472,7 +472,7 @@ static struct clk dpll_core_m6x2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel dbgclk_mux_sel[] = {
+static struct clksel dbgclk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -485,7 +485,7 @@ static struct clk dbgclk_mux_ck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel dpll_core_m2_div[] = {
+static struct clksel dpll_core_m2_div[] = {
 	{ .parent = &dpll_core_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -522,7 +522,7 @@ static struct clk dpll_core_m5x2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel div_core_div[] = {
+static struct clksel div_core_div[] = {
 	{ .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -539,7 +539,7 @@ static struct clk div_core_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel_rate div4_1to8_rates[] = {
+static struct clksel_rate div4_1to8_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
@@ -547,7 +547,7 @@ static const struct clksel_rate div4_1to8_rates[] = {
 	{ .div = 0 },
 };
 
-static const struct clksel div_iva_hs_clk_div[] = {
+static struct clksel div_iva_hs_clk_div[] = {
 	{ .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
 	{ .parent = NULL },
 };
@@ -596,7 +596,7 @@ static struct clk dll_clk_div_ck = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel dpll_abe_m2_div[] = {
+static struct clksel dpll_abe_m2_div[] = {
 	{ .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -639,7 +639,7 @@ static struct clk dpll_core_m7x2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
+static struct clksel iva_hsd_byp_clk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -694,7 +694,7 @@ static struct clk dpll_iva_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel dpll_iva_m4x2_div[] = {
+static struct clksel dpll_iva_m4x2_div[] = {
 	{ .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -754,7 +754,7 @@ static struct clk dpll_mpu_ck = {
 	.set_rate	= &omap3_noncore_dpll_set_rate,
 };
 
-static const struct clksel dpll_mpu_m2_div[] = {
+static struct clksel dpll_mpu_m2_div[] = {
 	{ .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -779,7 +779,7 @@ static struct clk per_hs_clk_div_ck = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel per_hsd_byp_clk_mux_sel[] = {
+static struct clksel per_hsd_byp_clk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -827,7 +827,7 @@ static struct clk dpll_per_ck = {
 	.set_rate	= &omap3_noncore_dpll_set_rate,
 };
 
-static const struct clksel dpll_per_m2_div[] = {
+static struct clksel dpll_per_m2_div[] = {
 	{ .parent = &dpll_per_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -851,7 +851,7 @@ static struct clk dpll_per_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel dpll_per_m2x2_div[] = {
+static struct clksel dpll_per_m2x2_div[] = {
 	{ .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -969,7 +969,7 @@ static struct clk dpll_unipro_x2_ck = {
 	.recalc		= &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel dpll_unipro_m2x2_div[] = {
+static struct clksel dpll_unipro_m2x2_div[] = {
 	{ .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -1033,7 +1033,7 @@ static struct clk dpll_usb_clkdcoldo_ck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel dpll_usb_m2_div[] = {
+static struct clksel dpll_usb_m2_div[] = {
 	{ .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
 	{ .parent = NULL },
 };
@@ -1050,7 +1050,7 @@ static struct clk dpll_usb_m2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel ducati_clk_mux_sel[] = {
+static struct clksel ducati_clk_mux_sel[] = {
 	{ .parent = &div_core_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -1091,13 +1091,13 @@ static struct clk func_24mc_fclk = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel_rate div2_4to8_rates[] = {
+static struct clksel_rate div2_4to8_rates[] = {
 	{ .div = 4, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel func_48m_fclk_div[] = {
+static struct clksel func_48m_fclk_div[] = {
 	{ .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
 	{ .parent = NULL },
 };
@@ -1122,13 +1122,13 @@ static struct clk func_48mc_fclk = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel_rate div2_2to4_rates[] = {
+static struct clksel_rate div2_2to4_rates[] = {
 	{ .div = 2, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 4, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel func_64m_fclk_div[] = {
+static struct clksel func_64m_fclk_div[] = {
 	{ .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
 	{ .parent = NULL },
 };
@@ -1145,7 +1145,7 @@ static struct clk func_64m_fclk = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel func_96m_fclk_div[] = {
+static struct clksel func_96m_fclk_div[] = {
 	{ .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
 	{ .parent = NULL },
 };
@@ -1162,7 +1162,7 @@ static struct clk func_96m_fclk = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel hsmmc6_fclk_sel[] = {
+static struct clksel hsmmc6_fclk_sel[] = {
 	{ .parent = &func_64m_fclk, .rates = div_1_0_rates },
 	{ .parent = &func_96m_fclk, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -1175,13 +1175,13 @@ static struct clk hsmmc6_fclk = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate div2_1to8_rates[] = {
+static struct clksel_rate div2_1to8_rates[] = {
 	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel init_60m_fclk_div[] = {
+static struct clksel init_60m_fclk_div[] = {
 	{ .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
 	{ .parent = NULL },
 };
@@ -1198,7 +1198,7 @@ static struct clk init_60m_fclk = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel l3_div_div[] = {
+static struct clksel l3_div_div[] = {
 	{ .parent = &div_core_ck, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -1215,7 +1215,7 @@ static struct clk l3_div_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel l4_div_div[] = {
+static struct clksel l4_div_div[] = {
 	{ .parent = &l3_div_ck, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -1240,7 +1240,7 @@ static struct clk lp_clk_div_ck = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel l4_wkup_clk_mux_sel[] = {
+static struct clksel l4_wkup_clk_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -1257,7 +1257,7 @@ static struct clk l4_wkup_clk_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel per_abe_nc_fclk_div[] = {
+static struct clksel per_abe_nc_fclk_div[] = {
 	{ .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -1274,7 +1274,7 @@ static struct clk per_abe_nc_fclk = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel mcasp2_fclk_sel[] = {
+static struct clksel mcasp2_fclk_sel[] = {
 	{ .parent = &func_96m_fclk, .rates = div_1_0_rates },
 	{ .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -1309,7 +1309,7 @@ static struct clk per_abe_24m_fclk = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static const struct clksel pmd_stm_clock_mux_sel[] = {
+static struct clksel pmd_stm_clock_mux_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
 	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
@@ -1330,7 +1330,7 @@ static struct clk pmd_trace_clk_mux_ck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel syc_clk_div_div[] = {
+static struct clksel syc_clk_div_div[] = {
 	{ .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
 	{ .parent = NULL },
 };
@@ -1399,7 +1399,7 @@ static struct clk des3des_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel dmic_sync_mux_sel[] = {
+static struct clksel dmic_sync_mux_sel[] = {
 	{ .parent = &abe_24m_fclk, .rates = div_1_0_rates },
 	{ .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
 	{ .parent = &func_24m_clk, .rates = div_1_2_rates },
@@ -1417,7 +1417,7 @@ static struct clk dmic_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel func_dmic_abe_gfclk_sel[] = {
+static struct clksel func_dmic_abe_gfclk_sel[] = {
 	{ .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
@@ -1531,7 +1531,7 @@ static struct clk emif2_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel fdif_fclk_div[] = {
+static struct clksel fdif_fclk_div[] = {
 	{ .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
 	{ .parent = NULL },
 };
@@ -1692,7 +1692,7 @@ static struct clk gpmc_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel sgx_clk_mux_sel[] = {
+static struct clksel sgx_clk_mux_sel[] = {
 	{ .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -1723,7 +1723,7 @@ static struct clk hdq1w_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel hsi_fclk_div[] = {
+static struct clksel hsi_fclk_div[] = {
 	{ .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
 	{ .parent = NULL },
 };
@@ -1867,7 +1867,7 @@ static struct clk mcasp_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel func_mcasp_abe_gfclk_sel[] = {
+static struct clksel func_mcasp_abe_gfclk_sel[] = {
 	{ .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
@@ -1900,7 +1900,7 @@ static struct clk mcbsp1_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel func_mcbsp1_gfclk_sel[] = {
+static struct clksel func_mcbsp1_gfclk_sel[] = {
 	{ .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
@@ -1933,7 +1933,7 @@ static struct clk mcbsp2_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel func_mcbsp2_gfclk_sel[] = {
+static struct clksel func_mcbsp2_gfclk_sel[] = {
 	{ .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
@@ -1966,7 +1966,7 @@ static struct clk mcbsp3_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel func_mcbsp3_gfclk_sel[] = {
+static struct clksel func_mcbsp3_gfclk_sel[] = {
 	{ .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
@@ -1999,7 +1999,7 @@ static struct clk mcbsp4_sync_mux_ck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
-static const struct clksel per_mcbsp4_gfclk_sel[] = {
+static struct clksel per_mcbsp4_gfclk_sel[] = {
 	{ .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
 	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -2401,7 +2401,7 @@ static struct clk timer4_fck = {
 	.clkdm_name	= "l4_per_clkdm",
 };
 
-static const struct clksel timer5_sync_mux_sel[] = {
+static struct clksel timer5_sync_mux_sel[] = {
 	{ .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
 	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -2532,7 +2532,7 @@ static struct clk usb_host_fs_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel utmi_p1_gfclk_sel[] = {
+static struct clksel utmi_p1_gfclk_sel[] = {
 	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
 	{ .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -2559,7 +2559,7 @@ static struct clk usb_host_hs_utmi_p1_clk = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel utmi_p2_gfclk_sel[] = {
+static struct clksel utmi_p2_gfclk_sel[] = {
 	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
 	{ .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -2656,7 +2656,7 @@ static struct clk usb_host_hs_fck = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel otg_60m_gfclk_sel[] = {
+static struct clksel otg_60m_gfclk_sel[] = {
 	{ .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
 	{ .parent = &xclk60motg_ck, .rates = div_1_1_rates },
 	{ .parent = NULL },
@@ -2743,13 +2743,13 @@ static struct clk usb_tll_hs_ick = {
 	.recalc		= &followparent_recalc,
 };
 
-static const struct clksel_rate div2_14to18_rates[] = {
+static struct clksel_rate div2_14to18_rates[] = {
 	{ .div = 14, .val = 0, .flags = RATE_IN_4430 },
 	{ .div = 18, .val = 1, .flags = RATE_IN_4430 },
 	{ .div = 0 },
 };
 
-static const struct clksel usim_fclk_div[] = {
+static struct clksel usim_fclk_div[] = {
 	{ .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
 	{ .parent = NULL },
 };
@@ -2807,7 +2807,7 @@ static struct clk wd_timer3_fck = {
 };
 
 /* Remaining optional clocks */
-static const struct clksel stm_clk_div_div[] = {
+static struct clksel stm_clk_div_div[] = {
 	{ .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
 	{ .parent = NULL },
 };
@@ -2824,7 +2824,7 @@ static struct clk stm_clk_div_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static const struct clksel trace_clk_div_div[] = {
+static struct clksel trace_clk_div_div[] = {
 	{ .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
 	{ .parent = NULL },
 };
@@ -2843,7 +2843,7 @@ static struct clk trace_clk_div_ck = {
 
 /* SCRM aux clk nodes */
 
-static const struct clksel auxclk_sel[] = {
+static struct clksel auxclk_sel[] = {
 	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
 	{ .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
 	{ .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
@@ -2927,7 +2927,7 @@ static struct clk auxclk5_ck = {
 	.enable_bit	= OMAP4_ENABLE_SHIFT,
 };
 
-static const struct clksel auxclkreq_sel[] = {
+static struct clksel auxclkreq_sel[] = {
 	{ .parent = &auxclk0_ck, .rates = div_1_0_rates },
 	{ .parent = &auxclk1_ck, .rates = div_1_1_rates },
 	{ .parent = &auxclk2_ck, .rates = div_1_2_rates },
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
index fc62fb5..9bfd193 100644
--- a/arch/arm/plat-omap/clock.c
+++ b/arch/arm/plat-omap/clock.c
@@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
 	}
 }
 
+static struct clk *_omap_clk_get_by_name(const char *name)
+{
+	struct clk *c;
+
+	list_for_each_entry(c, &clocks, node)
+		if (!strcmp(c->name, name))
+			return c;
+	return NULL;
+}
+
 /**
  * omap_clk_get_by_name - locate OMAP struct clk by its name
  * @name: name of the struct clk to locate
@@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
  */
 struct clk *omap_clk_get_by_name(const char *name)
 {
-	struct clk *c;
 	struct clk *ret = NULL;
 
 	mutex_lock(&clocks_mutex);
+	ret = _omap_clk_get_by_name(name);
+	mutex_unlock(&clocks_mutex);
+
+	return ret;
+}
+
+static inline void omap_init_dpll_data_clk_pts(struct dpll_data *dd)
+{
+	if (!dd->clk_ref && dd->clk_ref_name)
+		dd->clk_ref = _omap_clk_get_by_name(dd->clk_ref_name);
+	if (!dd->clk_bypass && dd->clk_bypass_name)
+		dd->clk_bypass = _omap_clk_get_by_name(dd->clk_bypass_name);
+}
+
+static inline void omap_init_clksel_clk_pts(struct clksel *clks)
+{
+	if (!clks->parent && clks->parent_name)
+		clks->parent = _omap_clk_get_by_name(clks->parent_name);
+}
+
+void omap_init_clk_pts(void)
+{
+	struct clk *c;
+
+	mutex_lock(&clocks_mutex);
 
 	list_for_each_entry(c, &clocks, node) {
-		if (!strcmp(c->name, name)) {
-			ret = c;
-			break;
-		}
+		if (!c->parent && c->parent_name)
+			c->parent = _omap_clk_get_by_name(c->parent_name);
+		if (c->dpll_data)
+			omap_init_dpll_data_clk_pts(c->dpll_data);
+		if (c->clksel)
+			omap_init_clksel_clk_pts(c->clksel);
 	}
 
 	mutex_unlock(&clocks_mutex);
-
-	return ret;
 }
 
 /*
diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h
index 8eb0ada..dc0d9fd 100644
--- a/arch/arm/plat-omap/include/plat/clock.h
+++ b/arch/arm/plat-omap/include/plat/clock.h
@@ -85,6 +85,7 @@ struct clksel_rate {
 /**
  * struct clksel - available parent clocks, and a pointer to their divisors
  * @parent: struct clk * to a possible parent clock
+ * @parent_name: Name of the possible parent clock
  * @rates: available divisors for this parent clock
  *
  * A struct clksel is always associated with one or more struct clks
@@ -92,6 +93,7 @@ struct clksel_rate {
  */
 struct clksel {
 	struct clk		 *parent;
+	const char		 *parent_name;
 	const struct clksel_rate *rates;
 };
 
@@ -101,7 +103,9 @@ struct clksel {
  * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
  * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
  * @clk_bypass: struct clk pointer to the clock's bypass clock input
+ * @clk_bypass_name: Name of the clock's bypass clock input
  * @clk_ref: struct clk pointer to the clock's reference clock input
+ * @clk_ref_name: Name of the clock's reference clock input
  * @control_reg: register containing the DPLL mode bitfield
  * @enable_mask: mask of the DPLL mode bitfield in @control_reg
  * @rate_tolerance: maximum variance allowed from target rate (in Hz)
@@ -143,7 +147,9 @@ struct dpll_data {
 	u32			mult_mask;
 	u32			div1_mask;
 	struct clk		*clk_bypass;
+	const char		*clk_bypass_name;
 	struct clk		*clk_ref;
+	const char		*clk_ref_name;
 	void __iomem		*control_reg;
 	u32			enable_mask;
 	unsigned int		rate_tolerance;
@@ -230,6 +236,7 @@ struct clk {
 	const struct clkops	*ops;
 	const char		*name;
 	struct clk		*parent;
+	const char		*parent_name;
 	struct list_head	children;
 	struct list_head	sibling;	/* node for children */
 	unsigned long		rate;
@@ -245,7 +252,7 @@ struct clk {
 #ifdef CONFIG_ARCH_OMAP2PLUS
 	void __iomem		*clksel_reg;
 	u32			clksel_mask;
-	const struct clksel	*clksel;
+	struct clksel		*clksel;
 	struct dpll_data	*dpll_data;
 	const char		*clkdm_name;
 	struct clockdomain	*clkdm;
@@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
 extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
 #endif
 extern struct clk *omap_clk_get_by_name(const char *name);
-
+extern void omap_init_clk_pts(void);
 extern const struct clkops clkops_null;
 
 extern struct clk dummy_ck;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS
  2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
@ 2011-01-19 14:14   ` Rajendra Nayak
  2011-01-19 14:14     ` [RFC 3/3] OMAP4: clocks: Remove unused clksel definitions Rajendra Nayak
  2011-01-24 22:09     ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Kevin Hilman
  2011-01-19 15:19   ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Felipe Balbi
  2011-01-24 22:08   ` Kevin Hilman
  2 siblings, 2 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-19 14:14 UTC (permalink / raw)
  To: linux-omap; +Cc: paul, khilman, Rajendra Nayak

The IVA2_CLK_SRC and MPU_CLK_SRC for OMAP3430 ES2
and above are 3 bit fields.
Define new masks for them, and since they are used
in a couple of clock nodes, model separate clock
nodes for 3430ES1 and 3430ES2+.

Also change reference to these new clock nodes
from clk pointers to clk name and make a call
to omap_init_clk_pts to init the pointers at
run time.

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
---
 arch/arm/mach-omap2/clock3xxx_data.c  |   39 ++++++++++++++++++++++++++------
 arch/arm/mach-omap2/cm-regbits-34xx.h |    2 +
 2 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
index 9c87adb..c3a7ff5 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -53,10 +53,6 @@
  * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
  */
 
-/* Forward declarations for DPLL bypass clocks */
-static struct clk dpll1_fck;
-static struct clk dpll2_fck;
-
 /* PRM CLOCKS */
 
 /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */
@@ -275,7 +271,7 @@ static struct dpll_data dpll1_dd = {
 	.mult_div1_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
 	.mult_mask	= OMAP3430_MPU_DPLL_MULT_MASK,
 	.div1_mask	= OMAP3430_MPU_DPLL_DIV_MASK,
-	.clk_bypass	= &dpll1_fck,
+	.clk_bypass_name	= "dpll1_fck",
 	.clk_ref	= &sys_ck,
 	.freqsel_mask	= OMAP3430_MPU_DPLL_FREQSEL_MASK,
 	.control_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
@@ -347,7 +343,7 @@ static struct dpll_data dpll2_dd = {
 	.mult_div1_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
 	.mult_mask	= OMAP3430_IVA2_DPLL_MULT_MASK,
 	.div1_mask	= OMAP3430_IVA2_DPLL_DIV_MASK,
-	.clk_bypass	= &dpll2_fck,
+	.clk_bypass_name	= "dpll2_fck",
 	.clk_ref	= &sys_ck,
 	.freqsel_mask	= OMAP3430_IVA2_DPLL_FREQSEL_MASK,
 	.control_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
@@ -1077,6 +1073,17 @@ static struct clk dpll1_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
+static struct clk dpll1_fck_3430es2 = {
+	.name		= "dpll1_fck",
+	.ops		= &clkops_null,
+	.parent		= &core_ck,
+	.init		= &omap2_init_clksel_parent,
+	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
+	.clksel_mask	= OMAP3430ES2_MPU_CLK_SRC_MASK,
+	.clksel		= div4_core_clksel,
+	.recalc		= &omap2_clksel_recalc,
+};
+
 static struct clk mpu_ck = {
 	.name		= "mpu_ck",
 	.ops		= &clkops_null,
@@ -1133,6 +1140,17 @@ static struct clk dpll2_fck = {
 	.recalc		= &omap2_clksel_recalc,
 };
 
+static struct clk dpll2_fck_3430es2 = {
+	.name		= "dpll2_fck",
+	.ops		= &clkops_null,
+	.parent		= &core_ck,
+	.init		= &omap2_init_clksel_parent,
+	.clksel_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
+	.clksel_mask	= OMAP3430ES2_IVA2_CLK_SRC_MASK,
+	.clksel		= div4_core_clksel,
+	.recalc		= &omap2_clksel_recalc,
+};
+
 static struct clk iva2_ck = {
 	.name		= "iva2_ck",
 	.ops		= &clkops_omap2_dflt_wait,
@@ -3261,11 +3279,13 @@ static struct omap_clk omap3xxx_clks[] = {
 	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
 	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX),
 	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX),
-	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX),
+	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3430ES1),
+	CLK(NULL,	"dpll1_fck",	&dpll1_fck_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
 	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX),
 	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX),
 	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
-	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX | CK_36XX),
+	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_3430ES1),
+	CLK(NULL,	"dpll2_fck",	&dpll2_fck_3430es2,	CK_3430ES2PLUS | CK_36XX),
 	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX | CK_36XX),
 	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX),
 	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX),
@@ -3535,6 +3555,9 @@ int __init omap3xxx_clk_init(void)
 			omap2_init_clk_clkdm(c->lk.clk);
 		}
 
+	/* Initialise clk pointers for parent/ref/bypass clks */
+	omap_init_clk_pts();
+
 	recalculate_root_clocks();
 
 	pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h
index b912759..fd80872 100644
--- a/arch/arm/mach-omap2/cm-regbits-34xx.h
+++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
@@ -80,6 +80,7 @@
 /* CM_CLKSEL1_PLL_IVA2 */
 #define OMAP3430_IVA2_CLK_SRC_SHIFT			19
 #define OMAP3430_IVA2_CLK_SRC_MASK			(0x3 << 19)
+#define OMAP3430ES2_IVA2_CLK_SRC_MASK			(0x7 << 19)
 #define OMAP3430_IVA2_DPLL_MULT_SHIFT			8
 #define OMAP3430_IVA2_DPLL_MULT_MASK			(0x7ff << 8)
 #define OMAP3430_IVA2_DPLL_DIV_SHIFT			0
@@ -125,6 +126,7 @@
 /* CM_CLKSEL1_PLL_MPU */
 #define OMAP3430_MPU_CLK_SRC_SHIFT			19
 #define OMAP3430_MPU_CLK_SRC_MASK			(0x3 << 19)
+#define OMAP3430ES2_MPU_CLK_SRC_MASK			(0x7 << 19)
 #define OMAP3430_MPU_DPLL_MULT_SHIFT			8
 #define OMAP3430_MPU_DPLL_MULT_MASK			(0x7ff << 8)
 #define OMAP3430_MPU_DPLL_DIV_SHIFT			0
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [RFC 3/3] OMAP4: clocks: Remove unused clksel definitions
  2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
@ 2011-01-19 14:14     ` Rajendra Nayak
  2011-01-24 22:09     ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Kevin Hilman
  1 sibling, 0 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-19 14:14 UTC (permalink / raw)
  To: linux-omap; +Cc: paul, khilman, Rajendra Nayak

Trivial fix to remove a couple of unused
clksel definitions for OMAP4

Signed-off-by: Rajendra Nayak <rnayak@ti.com>
---
 arch/arm/mach-omap2/clock44xx_data.c |   13 -------------
 1 files changed, 0 insertions(+), 13 deletions(-)

diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
index b02bfae..02e0723 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -472,12 +472,6 @@ static struct clk dpll_core_m6x2_ck = {
 	.set_rate	= &omap2_clksel_set_rate,
 };
 
-static struct clksel dbgclk_mux_sel[] = {
-	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
-	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
-	{ .parent = NULL },
-};
-
 static struct clk dbgclk_mux_ck = {
 	.name		= "dbgclk_mux_ck",
 	.parent		= &sys_clkin_ck,
@@ -1309,13 +1303,6 @@ static struct clk per_abe_24m_fclk = {
 	.recalc		= &omap_fixed_divisor_recalc,
 };
 
-static struct clksel pmd_stm_clock_mux_sel[] = {
-	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
-	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
-	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
-	{ .parent = NULL },
-};
-
 static struct clk pmd_stm_clock_mux_ck = {
 	.name		= "pmd_stm_clock_mux_ck",
 	.parent		= &sys_clkin_ck,
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
  2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
@ 2011-01-19 15:19   ` Felipe Balbi
  2011-01-20  5:33     ` Rajendra Nayak
  2011-01-24 22:08   ` Kevin Hilman
  2 siblings, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2011-01-19 15:19 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: linux-omap, paul, khilman

On Wed, Jan 19, 2011 at 07:44:24PM +0530, Rajendra Nayak wrote:
> There are various instances of clk pointers being
> embedded within structures in the clock framework
> to refer to clk parents, reference clocks, bypass
> clocks etc.
> The right way to reference these is by their name
> and not by embedding direct pointers to these clks.
> 
> Hence make provision to be able to provide clock
> names to refer to parents and bypass/ref clks and
> populate the clk pointers at runtime.
> 
> This requires the const qualifier to be dropped for
> struct clksel within struct clk and hence needs 
> clksel struct definitions to be changed in all
> clock*_data.c files.

$SUBJECT and this commit log is completely wrong as this patch is only
dropping the const from the clock structures.

-- 
balbi

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-19 15:19   ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Felipe Balbi
@ 2011-01-20  5:33     ` Rajendra Nayak
  2011-01-20  6:26       ` Felipe Balbi
  0 siblings, 1 reply; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-20  5:33 UTC (permalink / raw)
  To: balbi; +Cc: linux-omap, paul, khilman

> -----Original Message-----
> From: Felipe Balbi [mailto:balbi@ti.com]
> Sent: Wednesday, January 19, 2011 8:49 PM
> To: Rajendra Nayak
> Cc: linux-omap@vger.kernel.org; paul@pwsan.com;
khilman@deeprootsystems.com
> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
pointers
>
> On Wed, Jan 19, 2011 at 07:44:24PM +0530, Rajendra Nayak wrote:
> > There are various instances of clk pointers being
> > embedded within structures in the clock framework
> > to refer to clk parents, reference clocks, bypass
> > clocks etc.
> > The right way to reference these is by their name
> > and not by embedding direct pointers to these clks.
> >
> > Hence make provision to be able to provide clock
> > names to refer to parents and bypass/ref clks and
> > populate the clk pointers at runtime.
> >
> > This requires the const qualifier to be dropped for
> > struct clksel within struct clk and hence needs
> > clksel struct definitions to be changed in all
> > clock*_data.c files.
>
> $SUBJECT and this commit log is completely wrong as this patch is only
> dropping the const from the clock structures.

Did you look at this part of the patch?

------->
diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
index fc62fb5..9bfd193 100644
--- a/arch/arm/plat-omap/clock.c
+++ b/arch/arm/plat-omap/clock.c
@@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
 	}
 }

+static struct clk *_omap_clk_get_by_name(const char *name)
+{
+	struct clk *c;
+
+	list_for_each_entry(c, &clocks, node)
+		if (!strcmp(c->name, name))
+			return c;
+	return NULL;
+}
+
 /**
  * omap_clk_get_by_name - locate OMAP struct clk by its name
  * @name: name of the struct clk to locate
@@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
  */
 struct clk *omap_clk_get_by_name(const char *name)
 {
-	struct clk *c;
 	struct clk *ret = NULL;

 	mutex_lock(&clocks_mutex);
+	ret = _omap_clk_get_by_name(name);
+	mutex_unlock(&clocks_mutex);
+
+	return ret;
+}
+
+static inline void omap_init_dpll_data_clk_pts(struct dpll_data *dd)
+{
+	if (!dd->clk_ref && dd->clk_ref_name)
+		dd->clk_ref = _omap_clk_get_by_name(dd->clk_ref_name);
+	if (!dd->clk_bypass && dd->clk_bypass_name)
+		dd->clk_bypass =
_omap_clk_get_by_name(dd->clk_bypass_name);
+}
+
+static inline void omap_init_clksel_clk_pts(struct clksel *clks)
+{
+	if (!clks->parent && clks->parent_name)
+		clks->parent = _omap_clk_get_by_name(clks->parent_name);
+}
+
+void omap_init_clk_pts(void)
+{
+	struct clk *c;
+
+	mutex_lock(&clocks_mutex);

 	list_for_each_entry(c, &clocks, node) {
-		if (!strcmp(c->name, name)) {
-			ret = c;
-			break;
-		}
+		if (!c->parent && c->parent_name)
+			c->parent = _omap_clk_get_by_name(c->parent_name);
+		if (c->dpll_data)
+			omap_init_dpll_data_clk_pts(c->dpll_data);
+		if (c->clksel)
+			omap_init_clksel_clk_pts(c->clksel);
 	}

 	mutex_unlock(&clocks_mutex);
-
-	return ret;
 }

 /*
diff --git a/arch/arm/plat-omap/include/plat/clock.h
b/arch/arm/plat-omap/include/plat/clock.h
index 8eb0ada..dc0d9fd 100644
--- a/arch/arm/plat-omap/include/plat/clock.h
+++ b/arch/arm/plat-omap/include/plat/clock.h
@@ -85,6 +85,7 @@ struct clksel_rate {
 /**
  * struct clksel - available parent clocks, and a pointer to their
divisors
  * @parent: struct clk * to a possible parent clock
+ * @parent_name: Name of the possible parent clock
  * @rates: available divisors for this parent clock
  *
  * A struct clksel is always associated with one or more struct clks
@@ -92,6 +93,7 @@ struct clksel_rate {
  */
 struct clksel {
 	struct clk		 *parent;
+	const char		 *parent_name;
 	const struct clksel_rate *rates;
 };

@@ -101,7 +103,9 @@ struct clksel {
  * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
  * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
  * @clk_bypass: struct clk pointer to the clock's bypass clock input
+ * @clk_bypass_name: Name of the clock's bypass clock input
  * @clk_ref: struct clk pointer to the clock's reference clock input
+ * @clk_ref_name: Name of the clock's reference clock input
  * @control_reg: register containing the DPLL mode bitfield
  * @enable_mask: mask of the DPLL mode bitfield in @control_reg
  * @rate_tolerance: maximum variance allowed from target rate (in Hz)
@@ -143,7 +147,9 @@ struct dpll_data {
 	u32			mult_mask;
 	u32			div1_mask;
 	struct clk		*clk_bypass;
+	const char		*clk_bypass_name;
 	struct clk		*clk_ref;
+	const char		*clk_ref_name;
 	void __iomem		*control_reg;
 	u32			enable_mask;
 	unsigned int		rate_tolerance;
@@ -230,6 +236,7 @@ struct clk {
 	const struct clkops	*ops;
 	const char		*name;
 	struct clk		*parent;
+	const char		*parent_name;
 	struct list_head	children;
 	struct list_head	sibling;	/* node for children */
 	unsigned long		rate;
@@ -245,7 +252,7 @@ struct clk {
 #ifdef CONFIG_ARCH_OMAP2PLUS
 	void __iomem		*clksel_reg;
 	u32			clksel_mask;
-	const struct clksel	*clksel;
+	struct clksel		*clksel;
 	struct dpll_data	*dpll_data;
 	const char		*clkdm_name;
 	struct clockdomain	*clkdm;
@@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct
cpufreq_frequency_table **table);
 extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table
**table);
 #endif
 extern struct clk *omap_clk_get_by_name(const char *name);
-
+extern void omap_init_clk_pts(void);
 extern const struct clkops clkops_null;

 extern struct clk dummy_ck;
-- 
1.7.0.4

>
> --
> balbi

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-20  5:33     ` Rajendra Nayak
@ 2011-01-20  6:26       ` Felipe Balbi
  2011-01-20  6:28         ` Rajendra Nayak
  0 siblings, 1 reply; 17+ messages in thread
From: Felipe Balbi @ 2011-01-20  6:26 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: balbi, linux-omap, paul, khilman

Hi,

On Thu, Jan 20, 2011 at 11:03:38AM +0530, Rajendra Nayak wrote:
> Did you look at this part of the patch?

missed that one. Should you then split: one patch dropping const and
another doing the plat/clock.c changes ?

-- 
balbi

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-20  6:26       ` Felipe Balbi
@ 2011-01-20  6:28         ` Rajendra Nayak
  0 siblings, 0 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-20  6:28 UTC (permalink / raw)
  To: balbi; +Cc: linux-omap, paul, khilman

> -----Original Message-----
> From: Felipe Balbi [mailto:balbi@ti.com]
> Sent: Thursday, January 20, 2011 11:57 AM
> To: Rajendra Nayak
> Cc: balbi@ti.com; linux-omap@vger.kernel.org; paul@pwsan.com;
khilman@deeprootsystems.com
> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
pointers
>
> Hi,
>
> On Thu, Jan 20, 2011 at 11:03:38AM +0530, Rajendra Nayak wrote:
> > Did you look at this part of the patch?
>
> missed that one. Should you then split: one patch dropping const and
> another doing the plat/clock.c changes ?

I could. Will do that in the next spin to avoid confusion.

>
> --
> balbi

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
  2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
  2011-01-19 15:19   ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Felipe Balbi
@ 2011-01-24 22:08   ` Kevin Hilman
  2011-01-25  7:21     ` Rajendra Nayak
  2 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2011-01-24 22:08 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: linux-omap, paul

Rajendra Nayak <rnayak@ti.com> writes:

> There are various instances of clk pointers being
> embedded within structures in the clock framework
> to refer to clk parents, reference clocks, bypass
> clocks etc.
> The right way to reference these is by their name
> and not by embedding direct pointers to these clks.
>
> Hence make provision to be able to provide clock
> names to refer to parents and bypass/ref clks and
> populate the clk pointers at runtime.
>
> This requires the const qualifier to be dropped for
> struct clksel within struct clk and hence needs 
> clksel struct definitions to be changed in all
> clock*_data.c files.
>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>

I think the changelog needs a little more description about when the
names are used instead of the pointers.  It looks like the names are
only used at init time to select the right pointers, but the rest of the
framework continues to use pointers as before, right?  This isnt' very
clear from the changelog.

Kevin


> ---
>  arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++++---------
>  arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++++----------
>  arch/arm/mach-omap2/clock3xxx_data.c    |  144 +++++++++++++++---------------
>  arch/arm/mach-omap2/clock44xx_data.c    |  136 +++++++++++++++---------------
>  arch/arm/plat-omap/clock.c              |   48 +++++++++--
>  arch/arm/plat-omap/include/plat/clock.h |   11 ++-
>  6 files changed, 277 insertions(+), 236 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
> index 0a992bc..5662e51 100644
> --- a/arch/arm/mach-omap2/clock2420_data.c
> +++ b/arch/arm/mach-omap2/clock2420_data.c
> @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
>  
>  /* func_54m_ck */
>  
> -static const struct clksel_rate func_54m_apll54_rates[] = {
> +static struct clksel_rate func_54m_apll54_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate func_54m_alt_rates[] = {
> +static struct clksel_rate func_54m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_54m_clksel[] = {
> +static struct clksel func_54m_clksel[] = {
>  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
>  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
>  	{ .parent = NULL },
> @@ -207,17 +207,17 @@ static struct clk func_96m_ck = {
>  
>  /* func_48m_ck */
>  
> -static const struct clksel_rate func_48m_apll96_rates[] = {
> +static struct clksel_rate func_48m_apll96_rates[] = {
>  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate func_48m_alt_rates[] = {
> +static struct clksel_rate func_48m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_48m_clksel[] = {
> +static struct clksel func_48m_clksel[] = {
>  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
>  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
>  	{ .parent = NULL }
> @@ -262,27 +262,27 @@ static struct clk wdt1_osc_ck = {
>   * 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[] = {
> +static struct clksel_rate common_clkout_src_core_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> +static struct clksel_rate common_clkout_src_sys_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> +static struct clksel_rate common_clkout_src_96m_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> +static struct clksel_rate common_clkout_src_54m_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel common_clkout_src_clksel[] = {
> +static 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 },
> @@ -306,7 +306,7 @@ static struct clk sys_clkout_src = {
>  	.set_rate	= &omap2_clksel_set_rate
>  };
>  
> -static const struct clksel_rate common_clkout_rates[] = {
> +static struct clksel_rate common_clkout_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> @@ -315,7 +315,7 @@ static const struct clksel_rate common_clkout_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel sys_clkout_clksel[] = {
> +static struct clksel sys_clkout_clksel[] = {
>  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
>  	{ .parent = NULL }
>  };
> @@ -350,7 +350,7 @@ static struct clk sys_clkout2_src = {
>  	.set_rate	= &omap2_clksel_set_rate
>  };
>  
> -static const struct clksel sys_clkout2_clksel[] = {
> +static struct clksel sys_clkout2_clksel[] = {
>  	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates },
>  	{ .parent = NULL }
>  };
> @@ -390,7 +390,7 @@ static struct clk emul_ck = {
>   * - Base divider comes from: CM_CLKSEL_MPU
>   *
>   */
> -static const struct clksel_rate mpu_core_rates[] = {
> +static struct clksel_rate mpu_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
> @@ -399,7 +399,7 @@ static const struct clksel_rate mpu_core_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel mpu_clksel[] = {
> +static struct clksel mpu_clksel[] = {
>  	{ .parent = &core_ck, .rates = mpu_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -426,7 +426,7 @@ static struct clk mpu_ck = {	/* Control cpu */
>   * controls. The other branch gets further divided by 2 then possibly
>   * routed into a synchronizer and out of clocks abc.
>   */
> -static const struct clksel_rate dsp_fck_core_rates[] = {
> +static struct clksel_rate dsp_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 },
> @@ -437,7 +437,7 @@ static const struct clksel_rate dsp_fck_core_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel dsp_fck_clksel[] = {
> +static struct clksel dsp_fck_clksel[] = {
>  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -456,13 +456,13 @@ static struct clk dsp_fck = {
>  };
>  
>  /* DSP interface clock */
> -static const struct clksel_rate dsp_irate_ick_rates[] = {
> +static struct clksel_rate dsp_irate_ick_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel dsp_irate_ick_clksel[] = {
> +static struct clksel dsp_irate_ick_clksel[] = {
>  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
>  	{ .parent = NULL }
>  };
> @@ -536,7 +536,7 @@ static struct clk iva1_mpu_int_ifck = {
>   * may very well need notification when the clock changes. Currently for low
>   * operating points, these are taken care of in sleep.S.
>   */
> -static const struct clksel_rate core_l3_core_rates[] = {
> +static struct clksel_rate core_l3_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> @@ -547,7 +547,7 @@ static const struct clksel_rate core_l3_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel core_l3_clksel[] = {
> +static struct clksel core_l3_clksel[] = {
>  	{ .parent = &core_ck, .rates = core_l3_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -564,14 +564,14 @@ static struct clk core_l3_ck = {	/* Used for ick and fck, interconnect */
>  };
>  
>  /* usb_l4_ick */
> -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel usb_l4_ick_clksel[] = {
> +static struct clksel usb_l4_ick_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
>  	{ .parent = NULL },
>  };
> @@ -597,13 +597,13 @@ static struct clk usb_l4_ick = {	/* FS-USB interface clock */
>   * functional clocks.	Fixed APLL functional source clocks are managed in
>   * this domain.
>   */
> -static const struct clksel_rate l4_core_l3_rates[] = {
> +static struct clksel_rate l4_core_l3_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel l4_clksel[] = {
> +static struct clksel l4_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
>  	{ .parent = NULL }
>  };
> @@ -627,7 +627,7 @@ static struct clk l4_ck = {		/* used both as an ick and fck */
>   *
>   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
>   */
> -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> +static struct clksel_rate ssi_ssr_sst_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 },
> @@ -637,7 +637,7 @@ static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> +static struct clksel ssi_ssr_sst_fck_clksel[] = {
>  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -683,7 +683,7 @@ static struct clk ssi_l4_ick = {
>   */
>  
>  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
> -static const struct clksel gfx_fck_clksel[] = {
> +static struct clksel gfx_fck_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
>  	{ .parent = NULL },
>  };
> @@ -736,12 +736,12 @@ static struct clk gfx_ick = {
>   */
>  /* XXX Add RATE_NOT_VALIDATED */
>  
> -static const struct clksel_rate dss1_fck_sys_rates[] = {
> +static struct clksel_rate dss1_fck_sys_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate dss1_fck_core_rates[] = {
> +static 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 },
> @@ -755,7 +755,7 @@ static const struct clksel_rate dss1_fck_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel dss1_fck_clksel[] = {
> +static struct clksel dss1_fck_clksel[] = {
>  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
>  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
>  	{ .parent = NULL },
> @@ -785,17 +785,17 @@ static struct clk dss1_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate dss2_fck_sys_rates[] = {
> +static struct clksel_rate dss2_fck_sys_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate dss2_fck_48m_rates[] = {
> +static struct clksel_rate dss2_fck_48m_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel dss2_fck_clksel[] = {
> +static struct clksel dss2_fck_clksel[] = {
>  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
>  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
>  	{ .parent = NULL }
> @@ -831,12 +831,12 @@ static struct clk dss_54m_fck = {	/* Alt clk used in power management */
>   * here will likely have an L4 interface parent, and may have multiple
>   * functional clock parents.
>   */
> -static const struct clksel_rate gpt_alt_rates[] = {
> +static struct clksel_rate gpt_alt_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel omap24xx_gpt_clksel[] = {
> +static 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 },
> @@ -1142,17 +1142,17 @@ static struct clk mcbsp1_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> +static 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[] = {
> +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel mcbsp_fck_clksel[] = {
> +static struct clksel mcbsp_fck_clksel[] = {
>  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
>  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>  	{ .parent = NULL }
> @@ -1618,12 +1618,12 @@ static struct clk vlynq_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate vlynq_fck_96m_rates[] = {
> +static struct clksel_rate vlynq_fck_96m_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate vlynq_fck_core_rates[] = {
> +static 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 },
> @@ -1637,7 +1637,7 @@ static const struct clksel_rate vlynq_fck_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel vlynq_fck_clksel[] = {
> +static struct clksel vlynq_fck_clksel[] = {
>  	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
>  	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
>  	{ .parent = NULL }
> diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
> index c047dcd..6f08a57 100644
> --- a/arch/arm/mach-omap2/clock2430_data.c
> +++ b/arch/arm/mach-omap2/clock2430_data.c
> @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
>  
>  /* func_54m_ck */
>  
> -static const struct clksel_rate func_54m_apll54_rates[] = {
> +static struct clksel_rate func_54m_apll54_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate func_54m_alt_rates[] = {
> +static struct clksel_rate func_54m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_54m_clksel[] = {
> +static struct clksel func_54m_clksel[] = {
>  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
>  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
>  	{ .parent = NULL },
> @@ -198,17 +198,17 @@ static struct clk core_ck = {
>  };
>  
>  /* func_96m_ck */
> -static const struct clksel_rate func_96m_apll96_rates[] = {
> +static struct clksel_rate func_96m_apll96_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate func_96m_alt_rates[] = {
> +static struct clksel_rate func_96m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_96m_clksel[] = {
> +static struct clksel func_96m_clksel[] = {
>  	{ .parent = &apll96_ck,	.rates = func_96m_apll96_rates },
>  	{ .parent = &alt_ck,	.rates = func_96m_alt_rates },
>  	{ .parent = NULL }
> @@ -228,17 +228,17 @@ static struct clk func_96m_ck = {
>  
>  /* func_48m_ck */
>  
> -static const struct clksel_rate func_48m_apll96_rates[] = {
> +static struct clksel_rate func_48m_apll96_rates[] = {
>  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate func_48m_alt_rates[] = {
> +static struct clksel_rate func_48m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_48m_clksel[] = {
> +static struct clksel func_48m_clksel[] = {
>  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
>  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
>  	{ .parent = NULL }
> @@ -283,27 +283,27 @@ static struct clk wdt1_osc_ck = {
>   * 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[] = {
> +static struct clksel_rate common_clkout_src_core_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> +static struct clksel_rate common_clkout_src_sys_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> +static struct clksel_rate common_clkout_src_96m_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> +static struct clksel_rate common_clkout_src_54m_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel common_clkout_src_clksel[] = {
> +static 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 },
> @@ -327,7 +327,7 @@ static struct clk sys_clkout_src = {
>  	.set_rate	= &omap2_clksel_set_rate
>  };
>  
> -static const struct clksel_rate common_clkout_rates[] = {
> +static struct clksel_rate common_clkout_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> @@ -336,7 +336,7 @@ static const struct clksel_rate common_clkout_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel sys_clkout_clksel[] = {
> +static struct clksel sys_clkout_clksel[] = {
>  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
>  	{ .parent = NULL }
>  };
> @@ -375,13 +375,13 @@ static struct clk emul_ck = {
>   * - Base divider comes from: CM_CLKSEL_MPU
>   *
>   */
> -static const struct clksel_rate mpu_core_rates[] = {
> +static struct clksel_rate mpu_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel mpu_clksel[] = {
> +static struct clksel mpu_clksel[] = {
>  	{ .parent = &core_ck, .rates = mpu_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -408,7 +408,7 @@ static struct clk mpu_ck = {	/* Control cpu */
>   * controls. The other branch gets further divided by 2 then possibly
>   * routed into a synchronizer and out of clocks abc.
>   */
> -static const struct clksel_rate dsp_fck_core_rates[] = {
> +static struct clksel_rate dsp_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 },
> @@ -416,7 +416,7 @@ static const struct clksel_rate dsp_fck_core_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel dsp_fck_clksel[] = {
> +static struct clksel dsp_fck_clksel[] = {
>  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -435,14 +435,14 @@ static struct clk dsp_fck = {
>  };
>  
>  /* DSP interface clock */
> -static const struct clksel_rate dsp_irate_ick_rates[] = {
> +static struct clksel_rate dsp_irate_ick_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_243X },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel dsp_irate_ick_clksel[] = {
> +static struct clksel dsp_irate_ick_clksel[] = {
>  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
>  	{ .parent = NULL }
>  };
> @@ -486,14 +486,14 @@ static struct clk iva2_1_ick = {
>   * may very well need notification when the clock changes. Currently for low
>   * operating points, these are taken care of in sleep.S.
>   */
> -static const struct clksel_rate core_l3_core_rates[] = {
> +static struct clksel_rate core_l3_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel core_l3_clksel[] = {
> +static struct clksel core_l3_clksel[] = {
>  	{ .parent = &core_ck, .rates = core_l3_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -510,14 +510,14 @@ static struct clk core_l3_ck = {	/* Used for ick and fck, interconnect */
>  };
>  
>  /* usb_l4_ick */
> -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel usb_l4_ick_clksel[] = {
> +static struct clksel usb_l4_ick_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
>  	{ .parent = NULL },
>  };
> @@ -543,13 +543,13 @@ static struct clk usb_l4_ick = {	/* FS-USB interface clock */
>   * functional clocks.	Fixed APLL functional source clocks are managed in
>   * this domain.
>   */
> -static const struct clksel_rate l4_core_l3_rates[] = {
> +static struct clksel_rate l4_core_l3_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel l4_clksel[] = {
> +static struct clksel l4_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
>  	{ .parent = NULL }
>  };
> @@ -573,7 +573,7 @@ static struct clk l4_ck = {		/* used both as an ick and fck */
>   *
>   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
>   */
> -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> +static struct clksel_rate ssi_ssr_sst_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 },
> @@ -582,7 +582,7 @@ static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> +static struct clksel ssi_ssr_sst_fck_clksel[] = {
>  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -628,7 +628,7 @@ static struct clk ssi_l4_ick = {
>   */
>  
>  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
> -static const struct clksel gfx_fck_clksel[] = {
> +static struct clksel gfx_fck_clksel[] = {
>  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
>  	{ .parent = NULL },
>  };
> @@ -678,7 +678,7 @@ static struct clk gfx_ick = {
>   *		MDM_ICLK
>   * These clocks are usable in chassis mode only.
>   */
> -static const struct clksel_rate mdm_ick_core_rates[] = {
> +static struct clksel_rate mdm_ick_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
>  	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
> @@ -686,7 +686,7 @@ static const struct clksel_rate mdm_ick_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel mdm_ick_clksel[] = {
> +static struct clksel mdm_ick_clksel[] = {
>  	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
>  	{ .parent = NULL }
>  };
> @@ -724,12 +724,12 @@ static struct clk mdm_osc_ck = {
>   */
>  /* XXX Add RATE_NOT_VALIDATED */
>  
> -static const struct clksel_rate dss1_fck_sys_rates[] = {
> +static struct clksel_rate dss1_fck_sys_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate dss1_fck_core_rates[] = {
> +static 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 },
> @@ -743,7 +743,7 @@ static const struct clksel_rate dss1_fck_core_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel dss1_fck_clksel[] = {
> +static struct clksel dss1_fck_clksel[] = {
>  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
>  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
>  	{ .parent = NULL },
> @@ -773,17 +773,17 @@ static struct clk dss1_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate dss2_fck_sys_rates[] = {
> +static struct clksel_rate dss2_fck_sys_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate dss2_fck_48m_rates[] = {
> +static struct clksel_rate dss2_fck_48m_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel dss2_fck_clksel[] = {
> +static struct clksel dss2_fck_clksel[] = {
>  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
>  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
>  	{ .parent = NULL }
> @@ -819,12 +819,12 @@ static struct clk dss_54m_fck = {	/* Alt clk used in power management */
>   * here will likely have an L4 interface parent, and may have multiple
>   * functional clock parents.
>   */
> -static const struct clksel_rate gpt_alt_rates[] = {
> +static struct clksel_rate gpt_alt_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel omap24xx_gpt_clksel[] = {
> +static 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 },
> @@ -1130,17 +1130,17 @@ static struct clk mcbsp1_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> +static 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[] = {
> +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel mcbsp_fck_clksel[] = {
> +static struct clksel mcbsp_fck_clksel[] = {
>  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
>  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>  	{ .parent = NULL }
> diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
> index 403a4a1..9c87adb 100644
> --- a/arch/arm/mach-omap2/clock3xxx_data.c
> +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> @@ -109,37 +109,37 @@ static struct clk virt_38_4m_ck = {
>  	.rate		= 38400000,
>  };
>  
> -static const struct clksel_rate osc_sys_12m_rates[] = {
> +static struct clksel_rate osc_sys_12m_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate osc_sys_13m_rates[] = {
> +static struct clksel_rate osc_sys_13m_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate osc_sys_16_8m_rates[] = {
> +static struct clksel_rate osc_sys_16_8m_rates[] = {
>  	{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate osc_sys_19_2m_rates[] = {
> +static struct clksel_rate osc_sys_19_2m_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate osc_sys_26m_rates[] = {
> +static struct clksel_rate osc_sys_26m_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate osc_sys_38_4m_rates[] = {
> +static struct clksel_rate osc_sys_38_4m_rates[] = {
>  	{ .div = 1, .val = 4, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel osc_sys_clksel[] = {
> +static struct clksel osc_sys_clksel[] = {
>  	{ .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
>  	{ .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
>  	{ .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
> @@ -162,13 +162,13 @@ static struct clk osc_sys_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate div2_rates[] = {
> +static struct clksel_rate div2_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel sys_clksel[] = {
> +static struct clksel sys_clksel[] = {
>  	{ .parent = &osc_sys_ck, .rates = div2_rates },
>  	{ .parent = NULL }
>  };
> @@ -212,7 +212,7 @@ static struct clk sys_clkout1 = {
>  
>  /* CM CLOCKS */
>  
> -static const struct clksel_rate div16_dpll_rates[] = {
> +static struct clksel_rate div16_dpll_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> @@ -232,7 +232,7 @@ static const struct clksel_rate div16_dpll_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate dpll4_rates[] = {
> +static struct clksel_rate dpll4_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> @@ -318,7 +318,7 @@ static struct clk dpll1_x2_ck = {
>  };
>  
>  /* On DPLL1, unlike other DPLLs, the divider is downstream from CLKOUTX2 */
> -static const struct clksel div16_dpll1_x2m2_clksel[] = {
> +static struct clksel div16_dpll1_x2m2_clksel[] = {
>  	{ .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
>  	{ .parent = NULL }
>  };
> @@ -378,7 +378,7 @@ static struct clk dpll2_ck = {
>  	.recalc		= &omap3_dpll_recalc,
>  };
>  
> -static const struct clksel div16_dpll2_m2x2_clksel[] = {
> +static struct clksel div16_dpll2_m2x2_clksel[] = {
>  	{ .parent = &dpll2_ck, .rates = div16_dpll_rates },
>  	{ .parent = NULL }
>  };
> @@ -449,7 +449,7 @@ static struct clk dpll3_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel_rate div31_dpll3_rates[] = {
> +static struct clksel_rate div31_dpll3_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
> @@ -484,7 +484,7 @@ static const struct clksel_rate div31_dpll3_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel div31_dpll3m2_clksel[] = {
> +static struct clksel div31_dpll3m2_clksel[] = {
>  	{ .parent = &dpll3_ck, .rates = div31_dpll3_rates },
>  	{ .parent = NULL }
>  };
> @@ -520,7 +520,7 @@ static struct clk dpll3_m2x2_ck = {
>  };
>  
>  /* The PWRDN bit is apparently only available on 3430ES2 and above */
> -static const struct clksel div16_dpll3_clksel[] = {
> +static struct clksel div16_dpll3_clksel[] = {
>  	{ .parent = &dpll3_ck, .rates = div16_dpll_rates },
>  	{ .parent = NULL }
>  };
> @@ -635,7 +635,7 @@ static struct clk dpll4_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel dpll4_clksel[] = {
> +static struct clksel dpll4_clksel[] = {
>  	{ .parent = &dpll4_ck, .rates = dpll4_rates },
>  	{ .parent = NULL }
>  };
> @@ -680,23 +680,23 @@ static struct clk omap_192m_alwon_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate omap_96m_alwon_fck_rates[] = {
> +static struct clksel_rate omap_96m_alwon_fck_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_36XX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_36XX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel omap_96m_alwon_fck_clksel[] = {
> +static struct clksel omap_96m_alwon_fck_clksel[] = {
>  	{ .parent = &omap_192m_alwon_fck, .rates = omap_96m_alwon_fck_rates },
>  	{ .parent = NULL }
>  };
>  
> -static const struct clksel_rate omap_96m_dpll_rates[] = {
> +static struct clksel_rate omap_96m_dpll_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate omap_96m_sys_rates[] = {
> +static struct clksel_rate omap_96m_sys_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
> @@ -726,7 +726,7 @@ static struct clk cm_96m_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel omap_96m_fck_clksel[] = {
> +static struct clksel omap_96m_fck_clksel[] = {
>  	{ .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
>  	{ .parent = &sys_ck,	 .rates = omap_96m_sys_rates },
>  	{ .parent = NULL }
> @@ -768,17 +768,17 @@ static struct clk dpll4_m3x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
> +static struct clksel_rate omap_54m_d4m3x2_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate omap_54m_alt_rates[] = {
> +static struct clksel_rate omap_54m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel omap_54m_clksel[] = {
> +static struct clksel omap_54m_clksel[] = {
>  	{ .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
>  	{ .parent = &sys_altclk,    .rates = omap_54m_alt_rates },
>  	{ .parent = NULL }
> @@ -794,17 +794,17 @@ static struct clk omap_54m_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate omap_48m_cm96m_rates[] = {
> +static struct clksel_rate omap_48m_cm96m_rates[] = {
>  	{ .div = 2, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate omap_48m_alt_rates[] = {
> +static struct clksel_rate omap_48m_alt_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel omap_48m_clksel[] = {
> +static struct clksel omap_48m_clksel[] = {
>  	{ .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
>  	{ .parent = &sys_altclk, .rates = omap_48m_alt_rates },
>  	{ .parent = NULL }
> @@ -953,7 +953,7 @@ static struct clk dpll5_ck = {
>  	.recalc		= &omap3_dpll_recalc,
>  };
>  
> -static const struct clksel div16_dpll5_clksel[] = {
> +static struct clksel div16_dpll5_clksel[] = {
>  	{ .parent = &dpll5_ck, .rates = div16_dpll_rates },
>  	{ .parent = NULL }
>  };
> @@ -972,27 +972,27 @@ static struct clk dpll5_m2_ck = {
>  
>  /* CM EXTERNAL CLOCK OUTPUTS */
>  
> -static const struct clksel_rate clkout2_src_core_rates[] = {
> +static struct clksel_rate clkout2_src_core_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate clkout2_src_sys_rates[] = {
> +static struct clksel_rate clkout2_src_sys_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate clkout2_src_96m_rates[] = {
> +static struct clksel_rate clkout2_src_96m_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate clkout2_src_54m_rates[] = {
> +static struct clksel_rate clkout2_src_54m_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel clkout2_src_clksel[] = {
> +static struct clksel clkout2_src_clksel[] = {
>  	{ .parent = &core_ck,		.rates = clkout2_src_core_rates },
>  	{ .parent = &sys_ck,		.rates = clkout2_src_sys_rates },
>  	{ .parent = &cm_96m_fck,	.rates = clkout2_src_96m_rates },
> @@ -1013,7 +1013,7 @@ static struct clk clkout2_src_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate sys_clkout2_rates[] = {
> +static struct clksel_rate sys_clkout2_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 4, .val = 2, .flags = RATE_IN_3XXX },
> @@ -1022,7 +1022,7 @@ static const struct clksel_rate sys_clkout2_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel sys_clkout2_clksel[] = {
> +static struct clksel sys_clkout2_clksel[] = {
>  	{ .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
>  	{ .parent = NULL },
>  };
> @@ -1050,14 +1050,14 @@ static struct clk corex2_fck = {
>  
>  /* DPLL power domain clock controls */
>  
> -static const struct clksel_rate div4_rates[] = {
> +static struct clksel_rate div4_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel div4_core_clksel[] = {
> +static struct clksel div4_core_clksel[] = {
>  	{ .parent = &core_ck, .rates = div4_rates },
>  	{ .parent = NULL }
>  };
> @@ -1086,13 +1086,13 @@ static struct clk mpu_ck = {
>  };
>  
>  /* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */
> -static const struct clksel_rate arm_fck_rates[] = {
> +static struct clksel_rate arm_fck_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel arm_fck_clksel[] = {
> +static struct clksel arm_fck_clksel[] = {
>  	{ .parent = &mpu_ck, .rates = arm_fck_rates },
>  	{ .parent = NULL }
>  };
> @@ -1145,7 +1145,7 @@ static struct clk iva2_ck = {
>  
>  /* Common interface clocks */
>  
> -static const struct clksel div2_core_clksel[] = {
> +static struct clksel div2_core_clksel[] = {
>  	{ .parent = &core_ck, .rates = div2_rates },
>  	{ .parent = NULL }
>  };
> @@ -1162,7 +1162,7 @@ static struct clk l3_ick = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel div2_l3_clksel[] = {
> +static struct clksel div2_l3_clksel[] = {
>  	{ .parent = &l3_ick, .rates = div2_rates },
>  	{ .parent = NULL }
>  };
> @@ -1180,7 +1180,7 @@ static struct clk l4_ick = {
>  
>  };
>  
> -static const struct clksel div2_l4_clksel[] = {
> +static struct clksel div2_l4_clksel[] = {
>  	{ .parent = &l4_ick, .rates = div2_rates },
>  	{ .parent = NULL }
>  };
> @@ -1200,7 +1200,7 @@ static struct clk rm_ick = {
>  
>  /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX instead */
>  
> -static const struct clksel gfx_l3_clksel[] = {
> +static struct clksel gfx_l3_clksel[] = {
>  	{ .parent = &l3_ick, .rates = gfx_l3_rates },
>  	{ .parent = NULL }
>  };
> @@ -1257,7 +1257,7 @@ static struct clk gfx_cg2_ck = {
>  
>  /* SGX power domain - 3430ES2 only */
>  
> -static const struct clksel_rate sgx_core_rates[] = {
> +static struct clksel_rate sgx_core_rates[] = {
>  	{ .div = 2, .val = 5, .flags = RATE_IN_36XX },
>  	{ .div = 3, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 4, .val = 1, .flags = RATE_IN_3XXX },
> @@ -1265,23 +1265,23 @@ static const struct clksel_rate sgx_core_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate sgx_192m_rates[] = {
> +static struct clksel_rate sgx_192m_rates[] = {
>  	{ .div = 1,  .val = 4, .flags = RATE_IN_36XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate sgx_corex2_rates[] = {
> +static struct clksel_rate sgx_corex2_rates[] = {
>  	{ .div = 3, .val = 6, .flags = RATE_IN_36XX },
>  	{ .div = 5, .val = 7, .flags = RATE_IN_36XX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate sgx_96m_rates[] = {
> +static struct clksel_rate sgx_96m_rates[] = {
>  	{ .div = 1,  .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel sgx_clksel[] = {
> +static struct clksel sgx_clksel[] = {
>  	{ .parent = &core_ck,	 .rates = sgx_core_rates },
>  	{ .parent = &cm_96m_fck, .rates = sgx_96m_rates },
>  	{ .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates },
> @@ -1356,7 +1356,7 @@ static struct clk mad2d_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel omap343x_gpt_clksel[] = {
> +static struct clksel omap343x_gpt_clksel[] = {
>  	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
>  	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
>  	{ .parent = NULL}
> @@ -1501,17 +1501,17 @@ static struct clk i2c1_fck = {
>   * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
>   * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
>   */
> -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> +static struct clksel_rate common_mcbsp_96m_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel mcbsp_15_clksel[] = {
> +static struct clksel mcbsp_15_clksel[] = {
>  	{ .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
>  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>  	{ .parent = NULL }
> @@ -1643,7 +1643,7 @@ static struct clk hdq_fck = {
>  
>  /* DPLL3-derived clock */
>  
> -static const struct clksel_rate ssi_ssr_corex2_rates[] = {
> +static struct clksel_rate ssi_ssr_corex2_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> @@ -1653,7 +1653,7 @@ static const struct clksel_rate ssi_ssr_corex2_rates[] = {
>  	{ .div = 0 }
>  };
>  
> -static const struct clksel ssi_ssr_clksel[] = {
> +static struct clksel ssi_ssr_clksel[] = {
>  	{ .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
>  	{ .parent = NULL }
>  };
> @@ -2078,7 +2078,7 @@ static struct clk ssi_ick_3430es2 = {
>  /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
>   * but l4_ick makes more sense to me */
>  
> -static const struct clksel usb_l4_clksel[] = {
> +static struct clksel usb_l4_clksel[] = {
>  	{ .parent = &l4_ick, .rates = div2_rates },
>  	{ .parent = NULL },
>  };
> @@ -2282,7 +2282,7 @@ static struct clk usbhost_ick = {
>  
>  /* WKUP */
>  
> -static const struct clksel_rate usim_96m_rates[] = {
> +static struct clksel_rate usim_96m_rates[] = {
>  	{ .div = 2,  .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 4,  .val = 4, .flags = RATE_IN_3XXX },
>  	{ .div = 8,  .val = 5, .flags = RATE_IN_3XXX },
> @@ -2290,7 +2290,7 @@ static const struct clksel_rate usim_96m_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate usim_120m_rates[] = {
> +static struct clksel_rate usim_120m_rates[] = {
>  	{ .div = 4,  .val = 7,	.flags = RATE_IN_3XXX },
>  	{ .div = 8,  .val = 8,	.flags = RATE_IN_3XXX },
>  	{ .div = 16, .val = 9,	.flags = RATE_IN_3XXX },
> @@ -2298,7 +2298,7 @@ static const struct clksel_rate usim_120m_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel usim_clksel[] = {
> +static struct clksel usim_clksel[] = {
>  	{ .parent = &omap_96m_fck,	.rates = usim_96m_rates },
>  	{ .parent = &dpll5_m2_ck,	.rates = usim_120m_rates },
>  	{ .parent = &sys_ck,		.rates = div2_rates },
> @@ -2851,7 +2851,7 @@ static struct clk mcbsp4_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel mcbsp_234_clksel[] = {
> +static struct clksel mcbsp_234_clksel[] = {
>  	{ .parent = &per_96m_fck,  .rates = common_mcbsp_96m_rates },
>  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>  	{ .parent = NULL }
> @@ -2900,27 +2900,27 @@ static struct clk mcbsp4_fck = {
>  
>  /* More information: ARM Cortex-A8 Technical Reference Manual, sect 10.1 */
>  
> -static const struct clksel_rate emu_src_sys_rates[] = {
> +static struct clksel_rate emu_src_sys_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate emu_src_core_rates[] = {
> +static struct clksel_rate emu_src_core_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate emu_src_per_rates[] = {
> +static struct clksel_rate emu_src_per_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate emu_src_mpu_rates[] = {
> +static struct clksel_rate emu_src_mpu_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel emu_src_clksel[] = {
> +static struct clksel emu_src_clksel[] = {
>  	{ .parent = &sys_ck,		.rates = emu_src_sys_rates },
>  	{ .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
>  	{ .parent = &emu_per_alwon_ck,	.rates = emu_src_per_rates },
> @@ -2944,7 +2944,7 @@ static struct clk emu_src_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate pclk_emu_rates[] = {
> +static struct clksel_rate pclk_emu_rates[] = {
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> @@ -2952,7 +2952,7 @@ static const struct clksel_rate pclk_emu_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel pclk_emu_clksel[] = {
> +static struct clksel pclk_emu_clksel[] = {
>  	{ .parent = &emu_src_ck, .rates = pclk_emu_rates },
>  	{ .parent = NULL },
>  };
> @@ -2968,14 +2968,14 @@ static struct clk pclk_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate pclkx2_emu_rates[] = {
> +static struct clksel_rate pclkx2_emu_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel pclkx2_emu_clksel[] = {
> +static struct clksel pclkx2_emu_clksel[] = {
>  	{ .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
>  	{ .parent = NULL },
>  };
> @@ -2991,7 +2991,7 @@ static struct clk pclkx2_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel atclk_emu_clksel[] = {
> +static struct clksel atclk_emu_clksel[] = {
>  	{ .parent = &emu_src_ck, .rates = div2_rates },
>  	{ .parent = NULL },
>  };
> @@ -3018,14 +3018,14 @@ static struct clk traceclk_src_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel_rate traceclk_rates[] = {
> +static struct clksel_rate traceclk_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel traceclk_clksel[] = {
> +static struct clksel traceclk_clksel[] = {
>  	{ .parent = &traceclk_src_fck, .rates = traceclk_rates },
>  	{ .parent = NULL },
>  };
> diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
> index e8cb32f..b02bfae 100644
> --- a/arch/arm/mach-omap2/clock44xx_data.c
> +++ b/arch/arm/mach-omap2/clock44xx_data.c
> @@ -127,47 +127,47 @@ static struct clk virt_38400000_ck = {
>  	.rate		= 38400000,
>  };
>  
> -static const struct clksel_rate div_1_0_rates[] = {
> +static struct clksel_rate div_1_0_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_1_rates[] = {
> +static struct clksel_rate div_1_1_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_2_rates[] = {
> +static struct clksel_rate div_1_2_rates[] = {
>  	{ .div = 1, .val = 2, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_3_rates[] = {
> +static struct clksel_rate div_1_3_rates[] = {
>  	{ .div = 1, .val = 3, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_4_rates[] = {
> +static struct clksel_rate div_1_4_rates[] = {
>  	{ .div = 1, .val = 4, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_5_rates[] = {
> +static struct clksel_rate div_1_5_rates[] = {
>  	{ .div = 1, .val = 5, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_6_rates[] = {
> +static struct clksel_rate div_1_6_rates[] = {
>  	{ .div = 1, .val = 6, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel_rate div_1_7_rates[] = {
> +static struct clksel_rate div_1_7_rates[] = {
>  	{ .div = 1, .val = 7, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel sys_clkin_sel[] = {
> +static struct clksel sys_clkin_sel[] = {
>  	{ .parent = &virt_12000000_ck, .rates = div_1_1_rates },
>  	{ .parent = &virt_13000000_ck, .rates = div_1_2_rates },
>  	{ .parent = &virt_16800000_ck, .rates = div_1_3_rates },
> @@ -221,7 +221,7 @@ static struct clk xclk60motg_ck = {
>  
>  /* Module clocks and DPLL outputs */
>  
> -static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
> +static struct clksel abe_dpll_bypass_clk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -283,7 +283,7 @@ static struct clk dpll_abe_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel_rate div31_1to31_rates[] = {
> +static struct clksel_rate div31_1to31_rates[] = {
>  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 2, .val = 2, .flags = RATE_IN_4430 },
>  	{ .div = 3, .val = 3, .flags = RATE_IN_4430 },
> @@ -318,7 +318,7 @@ static const struct clksel_rate div31_1to31_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel dpll_abe_m2x2_div[] = {
> +static struct clksel dpll_abe_m2x2_div[] = {
>  	{ .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -343,14 +343,14 @@ static struct clk abe_24m_fclk = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel_rate div3_1to4_rates[] = {
> +static struct clksel_rate div3_1to4_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel abe_clk_div[] = {
> +static struct clksel abe_clk_div[] = {
>  	{ .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -367,13 +367,13 @@ static struct clk abe_clk = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel_rate div2_1to2_rates[] = {
> +static struct clksel_rate div2_1to2_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel aess_fclk_div[] = {
> +static struct clksel aess_fclk_div[] = {
>  	{ .parent = &abe_clk, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -402,7 +402,7 @@ static struct clk dpll_abe_m3x2_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel core_hsd_byp_clk_mux_sel[] = {
> +static struct clksel core_hsd_byp_clk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -455,7 +455,7 @@ static struct clk dpll_core_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel dpll_core_m6x2_div[] = {
> +static struct clksel dpll_core_m6x2_div[] = {
>  	{ .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -472,7 +472,7 @@ static struct clk dpll_core_m6x2_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel dbgclk_mux_sel[] = {
> +static struct clksel dbgclk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -485,7 +485,7 @@ static struct clk dbgclk_mux_ck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel dpll_core_m2_div[] = {
> +static struct clksel dpll_core_m2_div[] = {
>  	{ .parent = &dpll_core_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -522,7 +522,7 @@ static struct clk dpll_core_m5x2_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel div_core_div[] = {
> +static struct clksel div_core_div[] = {
>  	{ .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -539,7 +539,7 @@ static struct clk div_core_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel_rate div4_1to8_rates[] = {
> +static struct clksel_rate div4_1to8_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
> @@ -547,7 +547,7 @@ static const struct clksel_rate div4_1to8_rates[] = {
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel div_iva_hs_clk_div[] = {
> +static struct clksel div_iva_hs_clk_div[] = {
>  	{ .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
>  	{ .parent = NULL },
>  };
> @@ -596,7 +596,7 @@ static struct clk dll_clk_div_ck = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel dpll_abe_m2_div[] = {
> +static struct clksel dpll_abe_m2_div[] = {
>  	{ .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -639,7 +639,7 @@ static struct clk dpll_core_m7x2_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
> +static struct clksel iva_hsd_byp_clk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -694,7 +694,7 @@ static struct clk dpll_iva_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel dpll_iva_m4x2_div[] = {
> +static struct clksel dpll_iva_m4x2_div[] = {
>  	{ .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -754,7 +754,7 @@ static struct clk dpll_mpu_ck = {
>  	.set_rate	= &omap3_noncore_dpll_set_rate,
>  };
>  
> -static const struct clksel dpll_mpu_m2_div[] = {
> +static struct clksel dpll_mpu_m2_div[] = {
>  	{ .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -779,7 +779,7 @@ static struct clk per_hs_clk_div_ck = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel per_hsd_byp_clk_mux_sel[] = {
> +static struct clksel per_hsd_byp_clk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -827,7 +827,7 @@ static struct clk dpll_per_ck = {
>  	.set_rate	= &omap3_noncore_dpll_set_rate,
>  };
>  
> -static const struct clksel dpll_per_m2_div[] = {
> +static struct clksel dpll_per_m2_div[] = {
>  	{ .parent = &dpll_per_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -851,7 +851,7 @@ static struct clk dpll_per_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel dpll_per_m2x2_div[] = {
> +static struct clksel dpll_per_m2x2_div[] = {
>  	{ .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -969,7 +969,7 @@ static struct clk dpll_unipro_x2_ck = {
>  	.recalc		= &omap3_clkoutx2_recalc,
>  };
>  
> -static const struct clksel dpll_unipro_m2x2_div[] = {
> +static struct clksel dpll_unipro_m2x2_div[] = {
>  	{ .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -1033,7 +1033,7 @@ static struct clk dpll_usb_clkdcoldo_ck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel dpll_usb_m2_div[] = {
> +static struct clksel dpll_usb_m2_div[] = {
>  	{ .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
>  	{ .parent = NULL },
>  };
> @@ -1050,7 +1050,7 @@ static struct clk dpll_usb_m2_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel ducati_clk_mux_sel[] = {
> +static struct clksel ducati_clk_mux_sel[] = {
>  	{ .parent = &div_core_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -1091,13 +1091,13 @@ static struct clk func_24mc_fclk = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel_rate div2_4to8_rates[] = {
> +static struct clksel_rate div2_4to8_rates[] = {
>  	{ .div = 4, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_48m_fclk_div[] = {
> +static struct clksel func_48m_fclk_div[] = {
>  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
>  	{ .parent = NULL },
>  };
> @@ -1122,13 +1122,13 @@ static struct clk func_48mc_fclk = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel_rate div2_2to4_rates[] = {
> +static struct clksel_rate div2_2to4_rates[] = {
>  	{ .div = 2, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 4, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel func_64m_fclk_div[] = {
> +static struct clksel func_64m_fclk_div[] = {
>  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -1145,7 +1145,7 @@ static struct clk func_64m_fclk = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel func_96m_fclk_div[] = {
> +static struct clksel func_96m_fclk_div[] = {
>  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -1162,7 +1162,7 @@ static struct clk func_96m_fclk = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel hsmmc6_fclk_sel[] = {
> +static struct clksel hsmmc6_fclk_sel[] = {
>  	{ .parent = &func_64m_fclk, .rates = div_1_0_rates },
>  	{ .parent = &func_96m_fclk, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -1175,13 +1175,13 @@ static struct clk hsmmc6_fclk = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate div2_1to8_rates[] = {
> +static struct clksel_rate div2_1to8_rates[] = {
>  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel init_60m_fclk_div[] = {
> +static struct clksel init_60m_fclk_div[] = {
>  	{ .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
>  	{ .parent = NULL },
>  };
> @@ -1198,7 +1198,7 @@ static struct clk init_60m_fclk = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel l3_div_div[] = {
> +static struct clksel l3_div_div[] = {
>  	{ .parent = &div_core_ck, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -1215,7 +1215,7 @@ static struct clk l3_div_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel l4_div_div[] = {
> +static struct clksel l4_div_div[] = {
>  	{ .parent = &l3_div_ck, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -1240,7 +1240,7 @@ static struct clk lp_clk_div_ck = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel l4_wkup_clk_mux_sel[] = {
> +static struct clksel l4_wkup_clk_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -1257,7 +1257,7 @@ static struct clk l4_wkup_clk_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel per_abe_nc_fclk_div[] = {
> +static struct clksel per_abe_nc_fclk_div[] = {
>  	{ .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -1274,7 +1274,7 @@ static struct clk per_abe_nc_fclk = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel mcasp2_fclk_sel[] = {
> +static struct clksel mcasp2_fclk_sel[] = {
>  	{ .parent = &func_96m_fclk, .rates = div_1_0_rates },
>  	{ .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -1309,7 +1309,7 @@ static struct clk per_abe_24m_fclk = {
>  	.recalc		= &omap_fixed_divisor_recalc,
>  };
>  
> -static const struct clksel pmd_stm_clock_mux_sel[] = {
> +static struct clksel pmd_stm_clock_mux_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
>  	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
> @@ -1330,7 +1330,7 @@ static struct clk pmd_trace_clk_mux_ck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel syc_clk_div_div[] = {
> +static struct clksel syc_clk_div_div[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
>  	{ .parent = NULL },
>  };
> @@ -1399,7 +1399,7 @@ static struct clk des3des_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel dmic_sync_mux_sel[] = {
> +static struct clksel dmic_sync_mux_sel[] = {
>  	{ .parent = &abe_24m_fclk, .rates = div_1_0_rates },
>  	{ .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
>  	{ .parent = &func_24m_clk, .rates = div_1_2_rates },
> @@ -1417,7 +1417,7 @@ static struct clk dmic_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel func_dmic_abe_gfclk_sel[] = {
> +static struct clksel func_dmic_abe_gfclk_sel[] = {
>  	{ .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> @@ -1531,7 +1531,7 @@ static struct clk emif2_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel fdif_fclk_div[] = {
> +static struct clksel fdif_fclk_div[] = {
>  	{ .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -1692,7 +1692,7 @@ static struct clk gpmc_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel sgx_clk_mux_sel[] = {
> +static struct clksel sgx_clk_mux_sel[] = {
>  	{ .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -1723,7 +1723,7 @@ static struct clk hdq1w_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel hsi_fclk_div[] = {
> +static struct clksel hsi_fclk_div[] = {
>  	{ .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -1867,7 +1867,7 @@ static struct clk mcasp_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel func_mcasp_abe_gfclk_sel[] = {
> +static struct clksel func_mcasp_abe_gfclk_sel[] = {
>  	{ .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> @@ -1900,7 +1900,7 @@ static struct clk mcbsp1_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel func_mcbsp1_gfclk_sel[] = {
> +static struct clksel func_mcbsp1_gfclk_sel[] = {
>  	{ .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> @@ -1933,7 +1933,7 @@ static struct clk mcbsp2_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel func_mcbsp2_gfclk_sel[] = {
> +static struct clksel func_mcbsp2_gfclk_sel[] = {
>  	{ .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> @@ -1966,7 +1966,7 @@ static struct clk mcbsp3_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel func_mcbsp3_gfclk_sel[] = {
> +static struct clksel func_mcbsp3_gfclk_sel[] = {
>  	{ .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> @@ -1999,7 +1999,7 @@ static struct clk mcbsp4_sync_mux_ck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> -static const struct clksel per_mcbsp4_gfclk_sel[] = {
> +static struct clksel per_mcbsp4_gfclk_sel[] = {
>  	{ .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
>  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -2401,7 +2401,7 @@ static struct clk timer4_fck = {
>  	.clkdm_name	= "l4_per_clkdm",
>  };
>  
> -static const struct clksel timer5_sync_mux_sel[] = {
> +static struct clksel timer5_sync_mux_sel[] = {
>  	{ .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
>  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -2532,7 +2532,7 @@ static struct clk usb_host_fs_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel utmi_p1_gfclk_sel[] = {
> +static struct clksel utmi_p1_gfclk_sel[] = {
>  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
>  	{ .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -2559,7 +2559,7 @@ static struct clk usb_host_hs_utmi_p1_clk = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel utmi_p2_gfclk_sel[] = {
> +static struct clksel utmi_p2_gfclk_sel[] = {
>  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
>  	{ .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -2656,7 +2656,7 @@ static struct clk usb_host_hs_fck = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel otg_60m_gfclk_sel[] = {
> +static struct clksel otg_60m_gfclk_sel[] = {
>  	{ .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
>  	{ .parent = &xclk60motg_ck, .rates = div_1_1_rates },
>  	{ .parent = NULL },
> @@ -2743,13 +2743,13 @@ static struct clk usb_tll_hs_ick = {
>  	.recalc		= &followparent_recalc,
>  };
>  
> -static const struct clksel_rate div2_14to18_rates[] = {
> +static struct clksel_rate div2_14to18_rates[] = {
>  	{ .div = 14, .val = 0, .flags = RATE_IN_4430 },
>  	{ .div = 18, .val = 1, .flags = RATE_IN_4430 },
>  	{ .div = 0 },
>  };
>  
> -static const struct clksel usim_fclk_div[] = {
> +static struct clksel usim_fclk_div[] = {
>  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
>  	{ .parent = NULL },
>  };
> @@ -2807,7 +2807,7 @@ static struct clk wd_timer3_fck = {
>  };
>  
>  /* Remaining optional clocks */
> -static const struct clksel stm_clk_div_div[] = {
> +static struct clksel stm_clk_div_div[] = {
>  	{ .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -2824,7 +2824,7 @@ static struct clk stm_clk_div_ck = {
>  	.set_rate	= &omap2_clksel_set_rate,
>  };
>  
> -static const struct clksel trace_clk_div_div[] = {
> +static struct clksel trace_clk_div_div[] = {
>  	{ .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
>  	{ .parent = NULL },
>  };
> @@ -2843,7 +2843,7 @@ static struct clk trace_clk_div_ck = {
>  
>  /* SCRM aux clk nodes */
>  
> -static const struct clksel auxclk_sel[] = {
> +static struct clksel auxclk_sel[] = {
>  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>  	{ .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
>  	{ .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
> @@ -2927,7 +2927,7 @@ static struct clk auxclk5_ck = {
>  	.enable_bit	= OMAP4_ENABLE_SHIFT,
>  };
>  
> -static const struct clksel auxclkreq_sel[] = {
> +static struct clksel auxclkreq_sel[] = {
>  	{ .parent = &auxclk0_ck, .rates = div_1_0_rates },
>  	{ .parent = &auxclk1_ck, .rates = div_1_1_rates },
>  	{ .parent = &auxclk2_ck, .rates = div_1_2_rates },
> diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
> index fc62fb5..9bfd193 100644
> --- a/arch/arm/plat-omap/clock.c
> +++ b/arch/arm/plat-omap/clock.c
> @@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
>  	}
>  }
>  
> +static struct clk *_omap_clk_get_by_name(const char *name)
> +{
> +	struct clk *c;
> +
> +	list_for_each_entry(c, &clocks, node)
> +		if (!strcmp(c->name, name))
> +			return c;
> +	return NULL;
> +}
> +
>  /**
>   * omap_clk_get_by_name - locate OMAP struct clk by its name
>   * @name: name of the struct clk to locate
> @@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
>   */
>  struct clk *omap_clk_get_by_name(const char *name)
>  {
> -	struct clk *c;
>  	struct clk *ret = NULL;
>  
>  	mutex_lock(&clocks_mutex);
> +	ret = _omap_clk_get_by_name(name);
> +	mutex_unlock(&clocks_mutex);
> +
> +	return ret;
> +}
> +
> +static inline void omap_init_dpll_data_clk_pts(struct dpll_data *dd)
> +{
> +	if (!dd->clk_ref && dd->clk_ref_name)
> +		dd->clk_ref = _omap_clk_get_by_name(dd->clk_ref_name);
> +	if (!dd->clk_bypass && dd->clk_bypass_name)
> +		dd->clk_bypass = _omap_clk_get_by_name(dd->clk_bypass_name);
> +}
> +
> +static inline void omap_init_clksel_clk_pts(struct clksel *clks)
> +{
> +	if (!clks->parent && clks->parent_name)
> +		clks->parent = _omap_clk_get_by_name(clks->parent_name);
> +}
> +
> +void omap_init_clk_pts(void)
> +{
> +	struct clk *c;
> +
> +	mutex_lock(&clocks_mutex);
>  
>  	list_for_each_entry(c, &clocks, node) {
> -		if (!strcmp(c->name, name)) {
> -			ret = c;
> -			break;
> -		}
> +		if (!c->parent && c->parent_name)
> +			c->parent = _omap_clk_get_by_name(c->parent_name);
> +		if (c->dpll_data)
> +			omap_init_dpll_data_clk_pts(c->dpll_data);
> +		if (c->clksel)
> +			omap_init_clksel_clk_pts(c->clksel);
>  	}
>  
>  	mutex_unlock(&clocks_mutex);
> -
> -	return ret;
>  }
>  
>  /*
> diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h
> index 8eb0ada..dc0d9fd 100644
> --- a/arch/arm/plat-omap/include/plat/clock.h
> +++ b/arch/arm/plat-omap/include/plat/clock.h
> @@ -85,6 +85,7 @@ struct clksel_rate {
>  /**
>   * struct clksel - available parent clocks, and a pointer to their divisors
>   * @parent: struct clk * to a possible parent clock
> + * @parent_name: Name of the possible parent clock
>   * @rates: available divisors for this parent clock
>   *
>   * A struct clksel is always associated with one or more struct clks
> @@ -92,6 +93,7 @@ struct clksel_rate {
>   */
>  struct clksel {
>  	struct clk		 *parent;
> +	const char		 *parent_name;
>  	const struct clksel_rate *rates;
>  };
>  
> @@ -101,7 +103,9 @@ struct clksel {
>   * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
>   * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
>   * @clk_bypass: struct clk pointer to the clock's bypass clock input
> + * @clk_bypass_name: Name of the clock's bypass clock input
>   * @clk_ref: struct clk pointer to the clock's reference clock input
> + * @clk_ref_name: Name of the clock's reference clock input
>   * @control_reg: register containing the DPLL mode bitfield
>   * @enable_mask: mask of the DPLL mode bitfield in @control_reg
>   * @rate_tolerance: maximum variance allowed from target rate (in Hz)
> @@ -143,7 +147,9 @@ struct dpll_data {
>  	u32			mult_mask;
>  	u32			div1_mask;
>  	struct clk		*clk_bypass;
> +	const char		*clk_bypass_name;
>  	struct clk		*clk_ref;
> +	const char		*clk_ref_name;
>  	void __iomem		*control_reg;
>  	u32			enable_mask;
>  	unsigned int		rate_tolerance;
> @@ -230,6 +236,7 @@ struct clk {
>  	const struct clkops	*ops;
>  	const char		*name;
>  	struct clk		*parent;
> +	const char		*parent_name;
>  	struct list_head	children;
>  	struct list_head	sibling;	/* node for children */
>  	unsigned long		rate;
> @@ -245,7 +252,7 @@ struct clk {
>  #ifdef CONFIG_ARCH_OMAP2PLUS
>  	void __iomem		*clksel_reg;
>  	u32			clksel_mask;
> -	const struct clksel	*clksel;
> +	struct clksel		*clksel;
>  	struct dpll_data	*dpll_data;
>  	const char		*clkdm_name;
>  	struct clockdomain	*clkdm;
> @@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
>  extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
>  #endif
>  extern struct clk *omap_clk_get_by_name(const char *name);
> -
> +extern void omap_init_clk_pts(void);
>  extern const struct clkops clkops_null;
>  
>  extern struct clk dummy_ck;

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS
  2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
  2011-01-19 14:14     ` [RFC 3/3] OMAP4: clocks: Remove unused clksel definitions Rajendra Nayak
@ 2011-01-24 22:09     ` Kevin Hilman
  2011-01-25  7:24       ` Rajendra Nayak
  1 sibling, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2011-01-24 22:09 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: linux-omap, paul

Rajendra Nayak <rnayak@ti.com> writes:

> The IVA2_CLK_SRC and MPU_CLK_SRC for OMAP3430 ES2
> and above are 3 bit fields.
> Define new masks for them, and since they are used
> in a couple of clock nodes, model separate clock
> nodes for 3430ES1 and 3430ES2+.

This part should probably be separated out as a fix for the -rc cycle.

Kevin

> Also change reference to these new clock nodes
> from clk pointers to clk name and make a call
> to omap_init_clk_pts to init the pointers at
> run time.
>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>
> ---
>  arch/arm/mach-omap2/clock3xxx_data.c  |   39 ++++++++++++++++++++++++++------
>  arch/arm/mach-omap2/cm-regbits-34xx.h |    2 +
>  2 files changed, 33 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
> index 9c87adb..c3a7ff5 100644
> --- a/arch/arm/mach-omap2/clock3xxx_data.c
> +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> @@ -53,10 +53,6 @@
>   * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
>   */
>  
> -/* Forward declarations for DPLL bypass clocks */
> -static struct clk dpll1_fck;
> -static struct clk dpll2_fck;
> -
>  /* PRM CLOCKS */
>  
>  /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */
> @@ -275,7 +271,7 @@ static struct dpll_data dpll1_dd = {
>  	.mult_div1_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
>  	.mult_mask	= OMAP3430_MPU_DPLL_MULT_MASK,
>  	.div1_mask	= OMAP3430_MPU_DPLL_DIV_MASK,
> -	.clk_bypass	= &dpll1_fck,
> +	.clk_bypass_name	= "dpll1_fck",
>  	.clk_ref	= &sys_ck,
>  	.freqsel_mask	= OMAP3430_MPU_DPLL_FREQSEL_MASK,
>  	.control_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
> @@ -347,7 +343,7 @@ static struct dpll_data dpll2_dd = {
>  	.mult_div1_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
>  	.mult_mask	= OMAP3430_IVA2_DPLL_MULT_MASK,
>  	.div1_mask	= OMAP3430_IVA2_DPLL_DIV_MASK,
> -	.clk_bypass	= &dpll2_fck,
> +	.clk_bypass_name	= "dpll2_fck",
>  	.clk_ref	= &sys_ck,
>  	.freqsel_mask	= OMAP3430_IVA2_DPLL_FREQSEL_MASK,
>  	.control_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
> @@ -1077,6 +1073,17 @@ static struct clk dpll1_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> +static struct clk dpll1_fck_3430es2 = {
> +	.name		= "dpll1_fck",
> +	.ops		= &clkops_null,
> +	.parent		= &core_ck,
> +	.init		= &omap2_init_clksel_parent,
> +	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
> +	.clksel_mask	= OMAP3430ES2_MPU_CLK_SRC_MASK,
> +	.clksel		= div4_core_clksel,
> +	.recalc		= &omap2_clksel_recalc,
> +};
> +
>  static struct clk mpu_ck = {
>  	.name		= "mpu_ck",
>  	.ops		= &clkops_null,
> @@ -1133,6 +1140,17 @@ static struct clk dpll2_fck = {
>  	.recalc		= &omap2_clksel_recalc,
>  };
>  
> +static struct clk dpll2_fck_3430es2 = {
> +	.name		= "dpll2_fck",
> +	.ops		= &clkops_null,
> +	.parent		= &core_ck,
> +	.init		= &omap2_init_clksel_parent,
> +	.clksel_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
> +	.clksel_mask	= OMAP3430ES2_IVA2_CLK_SRC_MASK,
> +	.clksel		= div4_core_clksel,
> +	.recalc		= &omap2_clksel_recalc,
> +};
> +
>  static struct clk iva2_ck = {
>  	.name		= "iva2_ck",
>  	.ops		= &clkops_omap2_dflt_wait,
> @@ -3261,11 +3279,13 @@ static struct omap_clk omap3xxx_clks[] = {
>  	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
>  	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX),
>  	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX),
> -	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX),
> +	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3430ES1),
> +	CLK(NULL,	"dpll1_fck",	&dpll1_fck_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
>  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX),
>  	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX),
>  	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
> -	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX | CK_36XX),
> +	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_3430ES1),
> +	CLK(NULL,	"dpll2_fck",	&dpll2_fck_3430es2,	CK_3430ES2PLUS | CK_36XX),
>  	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX | CK_36XX),
>  	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX),
>  	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX),
> @@ -3535,6 +3555,9 @@ int __init omap3xxx_clk_init(void)
>  			omap2_init_clk_clkdm(c->lk.clk);
>  		}
>  
> +	/* Initialise clk pointers for parent/ref/bypass clks */
> +	omap_init_clk_pts();
> +
>  	recalculate_root_clocks();
>  
>  	pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld MHz\n",
> diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h
> index b912759..fd80872 100644
> --- a/arch/arm/mach-omap2/cm-regbits-34xx.h
> +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
> @@ -80,6 +80,7 @@
>  /* CM_CLKSEL1_PLL_IVA2 */
>  #define OMAP3430_IVA2_CLK_SRC_SHIFT			19
>  #define OMAP3430_IVA2_CLK_SRC_MASK			(0x3 << 19)
> +#define OMAP3430ES2_IVA2_CLK_SRC_MASK			(0x7 << 19)
>  #define OMAP3430_IVA2_DPLL_MULT_SHIFT			8
>  #define OMAP3430_IVA2_DPLL_MULT_MASK			(0x7ff << 8)
>  #define OMAP3430_IVA2_DPLL_DIV_SHIFT			0
> @@ -125,6 +126,7 @@
>  /* CM_CLKSEL1_PLL_MPU */
>  #define OMAP3430_MPU_CLK_SRC_SHIFT			19
>  #define OMAP3430_MPU_CLK_SRC_MASK			(0x3 << 19)
> +#define OMAP3430ES2_MPU_CLK_SRC_MASK			(0x7 << 19)
>  #define OMAP3430_MPU_DPLL_MULT_SHIFT			8
>  #define OMAP3430_MPU_DPLL_MULT_MASK			(0x7ff << 8)
>  #define OMAP3430_MPU_DPLL_DIV_SHIFT			0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-24 22:08   ` Kevin Hilman
@ 2011-01-25  7:21     ` Rajendra Nayak
  2011-01-25 15:57       ` Kevin Hilman
  0 siblings, 1 reply; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-25  7:21 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, paul

Hi Kevin,

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@ti.com]
> Sent: Tuesday, January 25, 2011 3:38 AM
> To: Rajendra Nayak
> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
pointers
>
> Rajendra Nayak <rnayak@ti.com> writes:
>
> > There are various instances of clk pointers being
> > embedded within structures in the clock framework
> > to refer to clk parents, reference clocks, bypass
> > clocks etc.
> > The right way to reference these is by their name
> > and not by embedding direct pointers to these clks.
> >
> > Hence make provision to be able to provide clock
> > names to refer to parents and bypass/ref clks and
> > populate the clk pointers at runtime.
> >
> > This requires the const qualifier to be dropped for
> > struct clksel within struct clk and hence needs
> > clksel struct definitions to be changed in all
> > clock*_data.c files.
> >
> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
>
> I think the changelog needs a little more description about when the
> names are used instead of the pointers.  It looks like the names are
> only used at init time to select the right pointers, but the rest of the
> framework continues to use pointers as before, right?  This isnt' very
> clear from the changelog.

Right, the basic idea was to prevent the binding of clk pointers at
compile time and instead do it at runtime. The rest of the code which
uses pointers would still go ahead and use them.
This is similar to what happens in other frameworks like hwmod
(which has the main_clk name populated and runtime maps to
the relevant clk pointer) or clock framework itself (to identify
the clockdomains associated with the clks)

Also the patch leaves all the existing clk pointer associations at
compile time as is and only uses this reference by name for a
few nodes that get added in the later patches in the series.

If the approach seems ok, then a patch to replace all the
existing pointer based referencing with the name based
referencing can also be pushed.

Regards,
Rajendra

>
> Kevin
>
>
> > ---
> >  arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++++---------
> >  arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++++----------
> >  arch/arm/mach-omap2/clock3xxx_data.c    |  144
+++++++++++++++---------------
> >  arch/arm/mach-omap2/clock44xx_data.c    |  136
+++++++++++++++---------------
> >  arch/arm/plat-omap/clock.c              |   48 +++++++++--
> >  arch/arm/plat-omap/include/plat/clock.h |   11 ++-
> >  6 files changed, 277 insertions(+), 236 deletions(-)
> >
> > diff --git a/arch/arm/mach-omap2/clock2420_data.c
b/arch/arm/mach-omap2/clock2420_data.c
> > index 0a992bc..5662e51 100644
> > --- a/arch/arm/mach-omap2/clock2420_data.c
> > +++ b/arch/arm/mach-omap2/clock2420_data.c
> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
> >
> >  /* func_54m_ck */
> >
> > -static const struct clksel_rate func_54m_apll54_rates[] = {
> > +static struct clksel_rate func_54m_apll54_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate func_54m_alt_rates[] = {
> > +static struct clksel_rate func_54m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_54m_clksel[] = {
> > +static struct clksel func_54m_clksel[] = {
> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
> >  	{ .parent = NULL },
> > @@ -207,17 +207,17 @@ static struct clk func_96m_ck = {
> >
> >  /* func_48m_ck */
> >
> > -static const struct clksel_rate func_48m_apll96_rates[] = {
> > +static struct clksel_rate func_48m_apll96_rates[] = {
> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate func_48m_alt_rates[] = {
> > +static struct clksel_rate func_48m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_48m_clksel[] = {
> > +static struct clksel func_48m_clksel[] = {
> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
> >  	{ .parent = NULL }
> > @@ -262,27 +262,27 @@ static struct clk wdt1_osc_ck = {
> >   * 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[] = {
> > +static struct clksel_rate common_clkout_src_core_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel common_clkout_src_clksel[] = {
> > +static 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 },
> > @@ -306,7 +306,7 @@ static struct clk sys_clkout_src = {
> >  	.set_rate	= &omap2_clksel_set_rate
> >  };
> >
> > -static const struct clksel_rate common_clkout_rates[] = {
> > +static struct clksel_rate common_clkout_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> > @@ -315,7 +315,7 @@ static const struct clksel_rate
common_clkout_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel sys_clkout_clksel[] = {
> > +static struct clksel sys_clkout_clksel[] = {
> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -350,7 +350,7 @@ static struct clk sys_clkout2_src = {
> >  	.set_rate	= &omap2_clksel_set_rate
> >  };
> >
> > -static const struct clksel sys_clkout2_clksel[] = {
> > +static struct clksel sys_clkout2_clksel[] = {
> >  	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -390,7 +390,7 @@ static struct clk emul_ck = {
> >   * - Base divider comes from: CM_CLKSEL_MPU
> >   *
> >   */
> > -static const struct clksel_rate mpu_core_rates[] = {
> > +static struct clksel_rate mpu_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
> > @@ -399,7 +399,7 @@ static const struct clksel_rate mpu_core_rates[] =
{
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel mpu_clksel[] = {
> > +static struct clksel mpu_clksel[] = {
> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -426,7 +426,7 @@ static struct clk mpu_ck = {	/* Control cpu */
> >   * controls. The other branch gets further divided by 2 then possibly
> >   * routed into a synchronizer and out of clocks abc.
> >   */
> > -static const struct clksel_rate dsp_fck_core_rates[] = {
> > +static struct clksel_rate dsp_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 },
> > @@ -437,7 +437,7 @@ static const struct clksel_rate
dsp_fck_core_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel dsp_fck_clksel[] = {
> > +static struct clksel dsp_fck_clksel[] = {
> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -456,13 +456,13 @@ static struct clk dsp_fck = {
> >  };
> >
> >  /* DSP interface clock */
> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
> > +static struct clksel_rate dsp_irate_ick_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel dsp_irate_ick_clksel[] = {
> > +static struct clksel dsp_irate_ick_clksel[] = {
> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -536,7 +536,7 @@ static struct clk iva1_mpu_int_ifck = {
> >   * may very well need notification when the clock changes. Currently
for low
> >   * operating points, these are taken care of in sleep.S.
> >   */
> > -static const struct clksel_rate core_l3_core_rates[] = {
> > +static struct clksel_rate core_l3_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> > @@ -547,7 +547,7 @@ static const struct clksel_rate
core_l3_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel core_l3_clksel[] = {
> > +static struct clksel core_l3_clksel[] = {
> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -564,14 +564,14 @@ static struct clk core_l3_ck = {	/* Used
for ick and fck, interconnect */
> >  };
> >
> >  /* usb_l4_ick */
> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel usb_l4_ick_clksel[] = {
> > +static struct clksel usb_l4_ick_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -597,13 +597,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
interface clock */
> >   * functional clocks.	Fixed APLL functional source clocks are
managed in
> >   * this domain.
> >   */
> > -static const struct clksel_rate l4_core_l3_rates[] = {
> > +static struct clksel_rate l4_core_l3_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel l4_clksel[] = {
> > +static struct clksel l4_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -627,7 +627,7 @@ static struct clk l4_ck = {		/* used
both as an ick and fck */
> >   *
> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
> >   */
> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> > +static struct clksel_rate ssi_ssr_sst_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 },
> > @@ -637,7 +637,7 @@ static const struct clksel_rate
ssi_ssr_sst_fck_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -683,7 +683,7 @@ static struct clk ssi_l4_ick = {
> >   */
> >
> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
> > -static const struct clksel gfx_fck_clksel[] = {
> > +static struct clksel gfx_fck_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -736,12 +736,12 @@ static struct clk gfx_ick = {
> >   */
> >  /* XXX Add RATE_NOT_VALIDATED */
> >
> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
> > +static struct clksel_rate dss1_fck_sys_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate dss1_fck_core_rates[] = {
> > +static 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 },
> > @@ -755,7 +755,7 @@ static const struct clksel_rate
dss1_fck_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel dss1_fck_clksel[] = {
> > +static struct clksel dss1_fck_clksel[] = {
> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
> >  	{ .parent = NULL },
> > @@ -785,17 +785,17 @@ static struct clk dss1_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
> > +static struct clksel_rate dss2_fck_sys_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
> > +static struct clksel_rate dss2_fck_48m_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel dss2_fck_clksel[] = {
> > +static struct clksel dss2_fck_clksel[] = {
> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
> >  	{ .parent = NULL }
> > @@ -831,12 +831,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
used in power management */
> >   * here will likely have an L4 interface parent, and may have
multiple
> >   * functional clock parents.
> >   */
> > -static const struct clksel_rate gpt_alt_rates[] = {
> > +static struct clksel_rate gpt_alt_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel omap24xx_gpt_clksel[] = {
> > +static 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 },
> > @@ -1142,17 +1142,17 @@ static struct clk mcbsp1_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> > +static 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[] = {
> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel mcbsp_fck_clksel[] = {
> > +static struct clksel mcbsp_fck_clksel[] = {
> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
> >  	{ .parent = NULL }
> > @@ -1618,12 +1618,12 @@ static struct clk vlynq_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate vlynq_fck_96m_rates[] = {
> > +static struct clksel_rate vlynq_fck_96m_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate vlynq_fck_core_rates[] = {
> > +static 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 },
> > @@ -1637,7 +1637,7 @@ static const struct clksel_rate
vlynq_fck_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel vlynq_fck_clksel[] = {
> > +static struct clksel vlynq_fck_clksel[] = {
> >  	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
> >  	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
> >  	{ .parent = NULL }
> > diff --git a/arch/arm/mach-omap2/clock2430_data.c
b/arch/arm/mach-omap2/clock2430_data.c
> > index c047dcd..6f08a57 100644
> > --- a/arch/arm/mach-omap2/clock2430_data.c
> > +++ b/arch/arm/mach-omap2/clock2430_data.c
> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
> >
> >  /* func_54m_ck */
> >
> > -static const struct clksel_rate func_54m_apll54_rates[] = {
> > +static struct clksel_rate func_54m_apll54_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate func_54m_alt_rates[] = {
> > +static struct clksel_rate func_54m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_54m_clksel[] = {
> > +static struct clksel func_54m_clksel[] = {
> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
> >  	{ .parent = NULL },
> > @@ -198,17 +198,17 @@ static struct clk core_ck = {
> >  };
> >
> >  /* func_96m_ck */
> > -static const struct clksel_rate func_96m_apll96_rates[] = {
> > +static struct clksel_rate func_96m_apll96_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate func_96m_alt_rates[] = {
> > +static struct clksel_rate func_96m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_96m_clksel[] = {
> > +static struct clksel func_96m_clksel[] = {
> >  	{ .parent = &apll96_ck,	.rates = func_96m_apll96_rates },
> >  	{ .parent = &alt_ck,	.rates = func_96m_alt_rates },
> >  	{ .parent = NULL }
> > @@ -228,17 +228,17 @@ static struct clk func_96m_ck = {
> >
> >  /* func_48m_ck */
> >
> > -static const struct clksel_rate func_48m_apll96_rates[] = {
> > +static struct clksel_rate func_48m_apll96_rates[] = {
> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate func_48m_alt_rates[] = {
> > +static struct clksel_rate func_48m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_48m_clksel[] = {
> > +static struct clksel func_48m_clksel[] = {
> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
> >  	{ .parent = NULL }
> > @@ -283,27 +283,27 @@ static struct clk wdt1_osc_ck = {
> >   * 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[] = {
> > +static struct clksel_rate common_clkout_src_core_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel common_clkout_src_clksel[] = {
> > +static 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 },
> > @@ -327,7 +327,7 @@ static struct clk sys_clkout_src = {
> >  	.set_rate	= &omap2_clksel_set_rate
> >  };
> >
> > -static const struct clksel_rate common_clkout_rates[] = {
> > +static struct clksel_rate common_clkout_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> > @@ -336,7 +336,7 @@ static const struct clksel_rate
common_clkout_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel sys_clkout_clksel[] = {
> > +static struct clksel sys_clkout_clksel[] = {
> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -375,13 +375,13 @@ static struct clk emul_ck = {
> >   * - Base divider comes from: CM_CLKSEL_MPU
> >   *
> >   */
> > -static const struct clksel_rate mpu_core_rates[] = {
> > +static struct clksel_rate mpu_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel mpu_clksel[] = {
> > +static struct clksel mpu_clksel[] = {
> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -408,7 +408,7 @@ static struct clk mpu_ck = {	/* Control cpu */
> >   * controls. The other branch gets further divided by 2 then possibly
> >   * routed into a synchronizer and out of clocks abc.
> >   */
> > -static const struct clksel_rate dsp_fck_core_rates[] = {
> > +static struct clksel_rate dsp_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 },
> > @@ -416,7 +416,7 @@ static const struct clksel_rate
dsp_fck_core_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel dsp_fck_clksel[] = {
> > +static struct clksel dsp_fck_clksel[] = {
> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -435,14 +435,14 @@ static struct clk dsp_fck = {
> >  };
> >
> >  /* DSP interface clock */
> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
> > +static struct clksel_rate dsp_irate_ick_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_243X },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel dsp_irate_ick_clksel[] = {
> > +static struct clksel dsp_irate_ick_clksel[] = {
> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -486,14 +486,14 @@ static struct clk iva2_1_ick = {
> >   * may very well need notification when the clock changes. Currently
for low
> >   * operating points, these are taken care of in sleep.S.
> >   */
> > -static const struct clksel_rate core_l3_core_rates[] = {
> > +static struct clksel_rate core_l3_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel core_l3_clksel[] = {
> > +static struct clksel core_l3_clksel[] = {
> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -510,14 +510,14 @@ static struct clk core_l3_ck = {	/* Used
for ick and fck, interconnect */
> >  };
> >
> >  /* usb_l4_ick */
> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel usb_l4_ick_clksel[] = {
> > +static struct clksel usb_l4_ick_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -543,13 +543,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
interface clock */
> >   * functional clocks.	Fixed APLL functional source clocks are
managed in
> >   * this domain.
> >   */
> > -static const struct clksel_rate l4_core_l3_rates[] = {
> > +static struct clksel_rate l4_core_l3_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel l4_clksel[] = {
> > +static struct clksel l4_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -573,7 +573,7 @@ static struct clk l4_ck = {		/* used
both as an ick and fck */
> >   *
> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
> >   */
> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> > +static struct clksel_rate ssi_ssr_sst_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 },
> > @@ -582,7 +582,7 @@ static const struct clksel_rate
ssi_ssr_sst_fck_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -628,7 +628,7 @@ static struct clk ssi_l4_ick = {
> >   */
> >
> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
> > -static const struct clksel gfx_fck_clksel[] = {
> > +static struct clksel gfx_fck_clksel[] = {
> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -678,7 +678,7 @@ static struct clk gfx_ick = {
> >   *		MDM_ICLK
> >   * These clocks are usable in chassis mode only.
> >   */
> > -static const struct clksel_rate mdm_ick_core_rates[] = {
> > +static struct clksel_rate mdm_ick_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
> >  	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
> > @@ -686,7 +686,7 @@ static const struct clksel_rate
mdm_ick_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel mdm_ick_clksel[] = {
> > +static struct clksel mdm_ick_clksel[] = {
> >  	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -724,12 +724,12 @@ static struct clk mdm_osc_ck = {
> >   */
> >  /* XXX Add RATE_NOT_VALIDATED */
> >
> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
> > +static struct clksel_rate dss1_fck_sys_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate dss1_fck_core_rates[] = {
> > +static 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 },
> > @@ -743,7 +743,7 @@ static const struct clksel_rate
dss1_fck_core_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel dss1_fck_clksel[] = {
> > +static struct clksel dss1_fck_clksel[] = {
> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
> >  	{ .parent = NULL },
> > @@ -773,17 +773,17 @@ static struct clk dss1_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
> > +static struct clksel_rate dss2_fck_sys_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
> > +static struct clksel_rate dss2_fck_48m_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel dss2_fck_clksel[] = {
> > +static struct clksel dss2_fck_clksel[] = {
> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
> >  	{ .parent = NULL }
> > @@ -819,12 +819,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
used in power management */
> >   * here will likely have an L4 interface parent, and may have
multiple
> >   * functional clock parents.
> >   */
> > -static const struct clksel_rate gpt_alt_rates[] = {
> > +static struct clksel_rate gpt_alt_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel omap24xx_gpt_clksel[] = {
> > +static 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 },
> > @@ -1130,17 +1130,17 @@ static struct clk mcbsp1_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> > +static 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[] = {
> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel mcbsp_fck_clksel[] = {
> > +static struct clksel mcbsp_fck_clksel[] = {
> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
> >  	{ .parent = NULL }
> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
b/arch/arm/mach-omap2/clock3xxx_data.c
> > index 403a4a1..9c87adb 100644
> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> > @@ -109,37 +109,37 @@ static struct clk virt_38_4m_ck = {
> >  	.rate		= 38400000,
> >  };
> >
> > -static const struct clksel_rate osc_sys_12m_rates[] = {
> > +static struct clksel_rate osc_sys_12m_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate osc_sys_13m_rates[] = {
> > +static struct clksel_rate osc_sys_13m_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate osc_sys_16_8m_rates[] = {
> > +static struct clksel_rate osc_sys_16_8m_rates[] = {
> >  	{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate osc_sys_19_2m_rates[] = {
> > +static struct clksel_rate osc_sys_19_2m_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate osc_sys_26m_rates[] = {
> > +static struct clksel_rate osc_sys_26m_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate osc_sys_38_4m_rates[] = {
> > +static struct clksel_rate osc_sys_38_4m_rates[] = {
> >  	{ .div = 1, .val = 4, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel osc_sys_clksel[] = {
> > +static struct clksel osc_sys_clksel[] = {
> >  	{ .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
> >  	{ .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
> >  	{ .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
> > @@ -162,13 +162,13 @@ static struct clk osc_sys_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate div2_rates[] = {
> > +static struct clksel_rate div2_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel sys_clksel[] = {
> > +static struct clksel sys_clksel[] = {
> >  	{ .parent = &osc_sys_ck, .rates = div2_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -212,7 +212,7 @@ static struct clk sys_clkout1 = {
> >
> >  /* CM CLOCKS */
> >
> > -static const struct clksel_rate div16_dpll_rates[] = {
> > +static struct clksel_rate div16_dpll_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> > @@ -232,7 +232,7 @@ static const struct clksel_rate div16_dpll_rates[]
= {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate dpll4_rates[] = {
> > +static struct clksel_rate dpll4_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> > @@ -318,7 +318,7 @@ static struct clk dpll1_x2_ck = {
> >  };
> >
> >  /* On DPLL1, unlike other DPLLs, the divider is downstream from
CLKOUTX2 */
> > -static const struct clksel div16_dpll1_x2m2_clksel[] = {
> > +static struct clksel div16_dpll1_x2m2_clksel[] = {
> >  	{ .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -378,7 +378,7 @@ static struct clk dpll2_ck = {
> >  	.recalc		= &omap3_dpll_recalc,
> >  };
> >
> > -static const struct clksel div16_dpll2_m2x2_clksel[] = {
> > +static struct clksel div16_dpll2_m2x2_clksel[] = {
> >  	{ .parent = &dpll2_ck, .rates = div16_dpll_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -449,7 +449,7 @@ static struct clk dpll3_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel_rate div31_dpll3_rates[] = {
> > +static struct clksel_rate div31_dpll3_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
> > @@ -484,7 +484,7 @@ static const struct clksel_rate
div31_dpll3_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel div31_dpll3m2_clksel[] = {
> > +static struct clksel div31_dpll3m2_clksel[] = {
> >  	{ .parent = &dpll3_ck, .rates = div31_dpll3_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -520,7 +520,7 @@ static struct clk dpll3_m2x2_ck = {
> >  };
> >
> >  /* The PWRDN bit is apparently only available on 3430ES2 and above */
> > -static const struct clksel div16_dpll3_clksel[] = {
> > +static struct clksel div16_dpll3_clksel[] = {
> >  	{ .parent = &dpll3_ck, .rates = div16_dpll_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -635,7 +635,7 @@ static struct clk dpll4_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel dpll4_clksel[] = {
> > +static struct clksel dpll4_clksel[] = {
> >  	{ .parent = &dpll4_ck, .rates = dpll4_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -680,23 +680,23 @@ static struct clk omap_192m_alwon_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate omap_96m_alwon_fck_rates[] = {
> > +static struct clksel_rate omap_96m_alwon_fck_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_36XX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_36XX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel omap_96m_alwon_fck_clksel[] = {
> > +static struct clksel omap_96m_alwon_fck_clksel[] = {
> >  	{ .parent = &omap_192m_alwon_fck, .rates =
omap_96m_alwon_fck_rates },
> >  	{ .parent = NULL }
> >  };
> >
> > -static const struct clksel_rate omap_96m_dpll_rates[] = {
> > +static struct clksel_rate omap_96m_dpll_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate omap_96m_sys_rates[] = {
> > +static struct clksel_rate omap_96m_sys_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> > @@ -726,7 +726,7 @@ static struct clk cm_96m_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel omap_96m_fck_clksel[] = {
> > +static struct clksel omap_96m_fck_clksel[] = {
> >  	{ .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
> >  	{ .parent = &sys_ck,	 .rates = omap_96m_sys_rates },
> >  	{ .parent = NULL }
> > @@ -768,17 +768,17 @@ static struct clk dpll4_m3x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
> > +static struct clksel_rate omap_54m_d4m3x2_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate omap_54m_alt_rates[] = {
> > +static struct clksel_rate omap_54m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel omap_54m_clksel[] = {
> > +static struct clksel omap_54m_clksel[] = {
> >  	{ .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
> >  	{ .parent = &sys_altclk,    .rates = omap_54m_alt_rates },
> >  	{ .parent = NULL }
> > @@ -794,17 +794,17 @@ static struct clk omap_54m_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate omap_48m_cm96m_rates[] = {
> > +static struct clksel_rate omap_48m_cm96m_rates[] = {
> >  	{ .div = 2, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate omap_48m_alt_rates[] = {
> > +static struct clksel_rate omap_48m_alt_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel omap_48m_clksel[] = {
> > +static struct clksel omap_48m_clksel[] = {
> >  	{ .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
> >  	{ .parent = &sys_altclk, .rates = omap_48m_alt_rates },
> >  	{ .parent = NULL }
> > @@ -953,7 +953,7 @@ static struct clk dpll5_ck = {
> >  	.recalc		= &omap3_dpll_recalc,
> >  };
> >
> > -static const struct clksel div16_dpll5_clksel[] = {
> > +static struct clksel div16_dpll5_clksel[] = {
> >  	{ .parent = &dpll5_ck, .rates = div16_dpll_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -972,27 +972,27 @@ static struct clk dpll5_m2_ck = {
> >
> >  /* CM EXTERNAL CLOCK OUTPUTS */
> >
> > -static const struct clksel_rate clkout2_src_core_rates[] = {
> > +static struct clksel_rate clkout2_src_core_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate clkout2_src_sys_rates[] = {
> > +static struct clksel_rate clkout2_src_sys_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate clkout2_src_96m_rates[] = {
> > +static struct clksel_rate clkout2_src_96m_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate clkout2_src_54m_rates[] = {
> > +static struct clksel_rate clkout2_src_54m_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel clkout2_src_clksel[] = {
> > +static struct clksel clkout2_src_clksel[] = {
> >  	{ .parent = &core_ck,		.rates = clkout2_src_core_rates },
> >  	{ .parent = &sys_ck,		.rates = clkout2_src_sys_rates },
> >  	{ .parent = &cm_96m_fck,	.rates = clkout2_src_96m_rates },
> > @@ -1013,7 +1013,7 @@ static struct clk clkout2_src_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate sys_clkout2_rates[] = {
> > +static struct clksel_rate sys_clkout2_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 4, .val = 2, .flags = RATE_IN_3XXX },
> > @@ -1022,7 +1022,7 @@ static const struct clksel_rate
sys_clkout2_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel sys_clkout2_clksel[] = {
> > +static struct clksel sys_clkout2_clksel[] = {
> >  	{ .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1050,14 +1050,14 @@ static struct clk corex2_fck = {
> >
> >  /* DPLL power domain clock controls */
> >
> > -static const struct clksel_rate div4_rates[] = {
> > +static struct clksel_rate div4_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel div4_core_clksel[] = {
> > +static struct clksel div4_core_clksel[] = {
> >  	{ .parent = &core_ck, .rates = div4_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1086,13 +1086,13 @@ static struct clk mpu_ck = {
> >  };
> >
> >  /* arm_fck is divided by two when DPLL1 locked; otherwise,
passthrough mpu_ck */
> > -static const struct clksel_rate arm_fck_rates[] = {
> > +static struct clksel_rate arm_fck_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel arm_fck_clksel[] = {
> > +static struct clksel arm_fck_clksel[] = {
> >  	{ .parent = &mpu_ck, .rates = arm_fck_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1145,7 +1145,7 @@ static struct clk iva2_ck = {
> >
> >  /* Common interface clocks */
> >
> > -static const struct clksel div2_core_clksel[] = {
> > +static struct clksel div2_core_clksel[] = {
> >  	{ .parent = &core_ck, .rates = div2_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1162,7 +1162,7 @@ static struct clk l3_ick = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel div2_l3_clksel[] = {
> > +static struct clksel div2_l3_clksel[] = {
> >  	{ .parent = &l3_ick, .rates = div2_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1180,7 +1180,7 @@ static struct clk l4_ick = {
> >
> >  };
> >
> > -static const struct clksel div2_l4_clksel[] = {
> > +static struct clksel div2_l4_clksel[] = {
> >  	{ .parent = &l4_ick, .rates = div2_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1200,7 +1200,7 @@ static struct clk rm_ick = {
> >
> >  /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX
instead */
> >
> > -static const struct clksel gfx_l3_clksel[] = {
> > +static struct clksel gfx_l3_clksel[] = {
> >  	{ .parent = &l3_ick, .rates = gfx_l3_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -1257,7 +1257,7 @@ static struct clk gfx_cg2_ck = {
> >
> >  /* SGX power domain - 3430ES2 only */
> >
> > -static const struct clksel_rate sgx_core_rates[] = {
> > +static struct clksel_rate sgx_core_rates[] = {
> >  	{ .div = 2, .val = 5, .flags = RATE_IN_36XX },
> >  	{ .div = 3, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 4, .val = 1, .flags = RATE_IN_3XXX },
> > @@ -1265,23 +1265,23 @@ static const struct clksel_rate
sgx_core_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate sgx_192m_rates[] = {
> > +static struct clksel_rate sgx_192m_rates[] = {
> >  	{ .div = 1,  .val = 4, .flags = RATE_IN_36XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate sgx_corex2_rates[] = {
> > +static struct clksel_rate sgx_corex2_rates[] = {
> >  	{ .div = 3, .val = 6, .flags = RATE_IN_36XX },
> >  	{ .div = 5, .val = 7, .flags = RATE_IN_36XX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate sgx_96m_rates[] = {
> > +static struct clksel_rate sgx_96m_rates[] = {
> >  	{ .div = 1,  .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel sgx_clksel[] = {
> > +static struct clksel sgx_clksel[] = {
> >  	{ .parent = &core_ck,	 .rates = sgx_core_rates },
> >  	{ .parent = &cm_96m_fck, .rates = sgx_96m_rates },
> >  	{ .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates },
> > @@ -1356,7 +1356,7 @@ static struct clk mad2d_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel omap343x_gpt_clksel[] = {
> > +static struct clksel omap343x_gpt_clksel[] = {
> >  	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
> >  	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
> >  	{ .parent = NULL}
> > @@ -1501,17 +1501,17 @@ static struct clk i2c1_fck = {
> >   * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
> >   * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
> >   */
> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> > +static struct clksel_rate common_mcbsp_96m_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel mcbsp_15_clksel[] = {
> > +static struct clksel mcbsp_15_clksel[] = {
> >  	{ .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
> >  	{ .parent = NULL }
> > @@ -1643,7 +1643,7 @@ static struct clk hdq_fck = {
> >
> >  /* DPLL3-derived clock */
> >
> > -static const struct clksel_rate ssi_ssr_corex2_rates[] = {
> > +static struct clksel_rate ssi_ssr_corex2_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> > @@ -1653,7 +1653,7 @@ static const struct clksel_rate
ssi_ssr_corex2_rates[] = {
> >  	{ .div = 0 }
> >  };
> >
> > -static const struct clksel ssi_ssr_clksel[] = {
> > +static struct clksel ssi_ssr_clksel[] = {
> >  	{ .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
> >  	{ .parent = NULL }
> >  };
> > @@ -2078,7 +2078,7 @@ static struct clk ssi_ick_3430es2 = {
> >  /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
> >   * but l4_ick makes more sense to me */
> >
> > -static const struct clksel usb_l4_clksel[] = {
> > +static struct clksel usb_l4_clksel[] = {
> >  	{ .parent = &l4_ick, .rates = div2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2282,7 +2282,7 @@ static struct clk usbhost_ick = {
> >
> >  /* WKUP */
> >
> > -static const struct clksel_rate usim_96m_rates[] = {
> > +static struct clksel_rate usim_96m_rates[] = {
> >  	{ .div = 2,  .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 4,  .val = 4, .flags = RATE_IN_3XXX },
> >  	{ .div = 8,  .val = 5, .flags = RATE_IN_3XXX },
> > @@ -2290,7 +2290,7 @@ static const struct clksel_rate usim_96m_rates[]
= {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate usim_120m_rates[] = {
> > +static struct clksel_rate usim_120m_rates[] = {
> >  	{ .div = 4,  .val = 7,	.flags = RATE_IN_3XXX },
> >  	{ .div = 8,  .val = 8,	.flags = RATE_IN_3XXX },
> >  	{ .div = 16, .val = 9,	.flags = RATE_IN_3XXX },
> > @@ -2298,7 +2298,7 @@ static const struct clksel_rate
usim_120m_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel usim_clksel[] = {
> > +static struct clksel usim_clksel[] = {
> >  	{ .parent = &omap_96m_fck,	.rates = usim_96m_rates },
> >  	{ .parent = &dpll5_m2_ck,	.rates = usim_120m_rates },
> >  	{ .parent = &sys_ck,		.rates = div2_rates },
> > @@ -2851,7 +2851,7 @@ static struct clk mcbsp4_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel mcbsp_234_clksel[] = {
> > +static struct clksel mcbsp_234_clksel[] = {
> >  	{ .parent = &per_96m_fck,  .rates = common_mcbsp_96m_rates },
> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
> >  	{ .parent = NULL }
> > @@ -2900,27 +2900,27 @@ static struct clk mcbsp4_fck = {
> >
> >  /* More information: ARM Cortex-A8 Technical Reference Manual, sect
10.1 */
> >
> > -static const struct clksel_rate emu_src_sys_rates[] = {
> > +static struct clksel_rate emu_src_sys_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate emu_src_core_rates[] = {
> > +static struct clksel_rate emu_src_core_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate emu_src_per_rates[] = {
> > +static struct clksel_rate emu_src_per_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate emu_src_mpu_rates[] = {
> > +static struct clksel_rate emu_src_mpu_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel emu_src_clksel[] = {
> > +static struct clksel emu_src_clksel[] = {
> >  	{ .parent = &sys_ck,		.rates = emu_src_sys_rates },
> >  	{ .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
> >  	{ .parent = &emu_per_alwon_ck,	.rates = emu_src_per_rates },
> > @@ -2944,7 +2944,7 @@ static struct clk emu_src_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate pclk_emu_rates[] = {
> > +static struct clksel_rate pclk_emu_rates[] = {
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> > @@ -2952,7 +2952,7 @@ static const struct clksel_rate pclk_emu_rates[]
= {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel pclk_emu_clksel[] = {
> > +static struct clksel pclk_emu_clksel[] = {
> >  	{ .parent = &emu_src_ck, .rates = pclk_emu_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2968,14 +2968,14 @@ static struct clk pclk_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate pclkx2_emu_rates[] = {
> > +static struct clksel_rate pclkx2_emu_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel pclkx2_emu_clksel[] = {
> > +static struct clksel pclkx2_emu_clksel[] = {
> >  	{ .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2991,7 +2991,7 @@ static struct clk pclkx2_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel atclk_emu_clksel[] = {
> > +static struct clksel atclk_emu_clksel[] = {
> >  	{ .parent = &emu_src_ck, .rates = div2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -3018,14 +3018,14 @@ static struct clk traceclk_src_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel_rate traceclk_rates[] = {
> > +static struct clksel_rate traceclk_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel traceclk_clksel[] = {
> > +static struct clksel traceclk_clksel[] = {
> >  	{ .parent = &traceclk_src_fck, .rates = traceclk_rates },
> >  	{ .parent = NULL },
> >  };
> > diff --git a/arch/arm/mach-omap2/clock44xx_data.c
b/arch/arm/mach-omap2/clock44xx_data.c
> > index e8cb32f..b02bfae 100644
> > --- a/arch/arm/mach-omap2/clock44xx_data.c
> > +++ b/arch/arm/mach-omap2/clock44xx_data.c
> > @@ -127,47 +127,47 @@ static struct clk virt_38400000_ck = {
> >  	.rate		= 38400000,
> >  };
> >
> > -static const struct clksel_rate div_1_0_rates[] = {
> > +static struct clksel_rate div_1_0_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_1_rates[] = {
> > +static struct clksel_rate div_1_1_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_2_rates[] = {
> > +static struct clksel_rate div_1_2_rates[] = {
> >  	{ .div = 1, .val = 2, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_3_rates[] = {
> > +static struct clksel_rate div_1_3_rates[] = {
> >  	{ .div = 1, .val = 3, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_4_rates[] = {
> > +static struct clksel_rate div_1_4_rates[] = {
> >  	{ .div = 1, .val = 4, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_5_rates[] = {
> > +static struct clksel_rate div_1_5_rates[] = {
> >  	{ .div = 1, .val = 5, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_6_rates[] = {
> > +static struct clksel_rate div_1_6_rates[] = {
> >  	{ .div = 1, .val = 6, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel_rate div_1_7_rates[] = {
> > +static struct clksel_rate div_1_7_rates[] = {
> >  	{ .div = 1, .val = 7, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel sys_clkin_sel[] = {
> > +static struct clksel sys_clkin_sel[] = {
> >  	{ .parent = &virt_12000000_ck, .rates = div_1_1_rates },
> >  	{ .parent = &virt_13000000_ck, .rates = div_1_2_rates },
> >  	{ .parent = &virt_16800000_ck, .rates = div_1_3_rates },
> > @@ -221,7 +221,7 @@ static struct clk xclk60motg_ck = {
> >
> >  /* Module clocks and DPLL outputs */
> >
> > -static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
> > +static struct clksel abe_dpll_bypass_clk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -283,7 +283,7 @@ static struct clk dpll_abe_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel_rate div31_1to31_rates[] = {
> > +static struct clksel_rate div31_1to31_rates[] = {
> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 2, .val = 2, .flags = RATE_IN_4430 },
> >  	{ .div = 3, .val = 3, .flags = RATE_IN_4430 },
> > @@ -318,7 +318,7 @@ static const struct clksel_rate
div31_1to31_rates[] = {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel dpll_abe_m2x2_div[] = {
> > +static struct clksel dpll_abe_m2x2_div[] = {
> >  	{ .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -343,14 +343,14 @@ static struct clk abe_24m_fclk = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel_rate div3_1to4_rates[] = {
> > +static struct clksel_rate div3_1to4_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel abe_clk_div[] = {
> > +static struct clksel abe_clk_div[] = {
> >  	{ .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -367,13 +367,13 @@ static struct clk abe_clk = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel_rate div2_1to2_rates[] = {
> > +static struct clksel_rate div2_1to2_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel aess_fclk_div[] = {
> > +static struct clksel aess_fclk_div[] = {
> >  	{ .parent = &abe_clk, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -402,7 +402,7 @@ static struct clk dpll_abe_m3x2_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel core_hsd_byp_clk_mux_sel[] = {
> > +static struct clksel core_hsd_byp_clk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -455,7 +455,7 @@ static struct clk dpll_core_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel dpll_core_m6x2_div[] = {
> > +static struct clksel dpll_core_m6x2_div[] = {
> >  	{ .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -472,7 +472,7 @@ static struct clk dpll_core_m6x2_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel dbgclk_mux_sel[] = {
> > +static struct clksel dbgclk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -485,7 +485,7 @@ static struct clk dbgclk_mux_ck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel dpll_core_m2_div[] = {
> > +static struct clksel dpll_core_m2_div[] = {
> >  	{ .parent = &dpll_core_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -522,7 +522,7 @@ static struct clk dpll_core_m5x2_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel div_core_div[] = {
> > +static struct clksel div_core_div[] = {
> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -539,7 +539,7 @@ static struct clk div_core_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel_rate div4_1to8_rates[] = {
> > +static struct clksel_rate div4_1to8_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
> > @@ -547,7 +547,7 @@ static const struct clksel_rate div4_1to8_rates[]
= {
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel div_iva_hs_clk_div[] = {
> > +static struct clksel div_iva_hs_clk_div[] = {
> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -596,7 +596,7 @@ static struct clk dll_clk_div_ck = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel dpll_abe_m2_div[] = {
> > +static struct clksel dpll_abe_m2_div[] = {
> >  	{ .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -639,7 +639,7 @@ static struct clk dpll_core_m7x2_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
> > +static struct clksel iva_hsd_byp_clk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -694,7 +694,7 @@ static struct clk dpll_iva_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel dpll_iva_m4x2_div[] = {
> > +static struct clksel dpll_iva_m4x2_div[] = {
> >  	{ .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -754,7 +754,7 @@ static struct clk dpll_mpu_ck = {
> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
> >  };
> >
> > -static const struct clksel dpll_mpu_m2_div[] = {
> > +static struct clksel dpll_mpu_m2_div[] = {
> >  	{ .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -779,7 +779,7 @@ static struct clk per_hs_clk_div_ck = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel per_hsd_byp_clk_mux_sel[] = {
> > +static struct clksel per_hsd_byp_clk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -827,7 +827,7 @@ static struct clk dpll_per_ck = {
> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
> >  };
> >
> > -static const struct clksel dpll_per_m2_div[] = {
> > +static struct clksel dpll_per_m2_div[] = {
> >  	{ .parent = &dpll_per_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -851,7 +851,7 @@ static struct clk dpll_per_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel dpll_per_m2x2_div[] = {
> > +static struct clksel dpll_per_m2x2_div[] = {
> >  	{ .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -969,7 +969,7 @@ static struct clk dpll_unipro_x2_ck = {
> >  	.recalc		= &omap3_clkoutx2_recalc,
> >  };
> >
> > -static const struct clksel dpll_unipro_m2x2_div[] = {
> > +static struct clksel dpll_unipro_m2x2_div[] = {
> >  	{ .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1033,7 +1033,7 @@ static struct clk dpll_usb_clkdcoldo_ck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel dpll_usb_m2_div[] = {
> > +static struct clksel dpll_usb_m2_div[] = {
> >  	{ .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1050,7 +1050,7 @@ static struct clk dpll_usb_m2_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel ducati_clk_mux_sel[] = {
> > +static struct clksel ducati_clk_mux_sel[] = {
> >  	{ .parent = &div_core_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -1091,13 +1091,13 @@ static struct clk func_24mc_fclk = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel_rate div2_4to8_rates[] = {
> > +static struct clksel_rate div2_4to8_rates[] = {
> >  	{ .div = 4, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_48m_fclk_div[] = {
> > +static struct clksel func_48m_fclk_div[] = {
> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1122,13 +1122,13 @@ static struct clk func_48mc_fclk = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel_rate div2_2to4_rates[] = {
> > +static struct clksel_rate div2_2to4_rates[] = {
> >  	{ .div = 2, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 4, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel func_64m_fclk_div[] = {
> > +static struct clksel func_64m_fclk_div[] = {
> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1145,7 +1145,7 @@ static struct clk func_64m_fclk = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel func_96m_fclk_div[] = {
> > +static struct clksel func_96m_fclk_div[] = {
> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1162,7 +1162,7 @@ static struct clk func_96m_fclk = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel hsmmc6_fclk_sel[] = {
> > +static struct clksel hsmmc6_fclk_sel[] = {
> >  	{ .parent = &func_64m_fclk, .rates = div_1_0_rates },
> >  	{ .parent = &func_96m_fclk, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -1175,13 +1175,13 @@ static struct clk hsmmc6_fclk = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate div2_1to8_rates[] = {
> > +static struct clksel_rate div2_1to8_rates[] = {
> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel init_60m_fclk_div[] = {
> > +static struct clksel init_60m_fclk_div[] = {
> >  	{ .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1198,7 +1198,7 @@ static struct clk init_60m_fclk = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel l3_div_div[] = {
> > +static struct clksel l3_div_div[] = {
> >  	{ .parent = &div_core_ck, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1215,7 +1215,7 @@ static struct clk l3_div_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel l4_div_div[] = {
> > +static struct clksel l4_div_div[] = {
> >  	{ .parent = &l3_div_ck, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1240,7 +1240,7 @@ static struct clk lp_clk_div_ck = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel l4_wkup_clk_mux_sel[] = {
> > +static struct clksel l4_wkup_clk_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -1257,7 +1257,7 @@ static struct clk l4_wkup_clk_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel per_abe_nc_fclk_div[] = {
> > +static struct clksel per_abe_nc_fclk_div[] = {
> >  	{ .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1274,7 +1274,7 @@ static struct clk per_abe_nc_fclk = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel mcasp2_fclk_sel[] = {
> > +static struct clksel mcasp2_fclk_sel[] = {
> >  	{ .parent = &func_96m_fclk, .rates = div_1_0_rates },
> >  	{ .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -1309,7 +1309,7 @@ static struct clk per_abe_24m_fclk = {
> >  	.recalc		= &omap_fixed_divisor_recalc,
> >  };
> >
> > -static const struct clksel pmd_stm_clock_mux_sel[] = {
> > +static struct clksel pmd_stm_clock_mux_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
> > @@ -1330,7 +1330,7 @@ static struct clk pmd_trace_clk_mux_ck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel syc_clk_div_div[] = {
> > +static struct clksel syc_clk_div_div[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1399,7 +1399,7 @@ static struct clk des3des_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel dmic_sync_mux_sel[] = {
> > +static struct clksel dmic_sync_mux_sel[] = {
> >  	{ .parent = &abe_24m_fclk, .rates = div_1_0_rates },
> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
> >  	{ .parent = &func_24m_clk, .rates = div_1_2_rates },
> > @@ -1417,7 +1417,7 @@ static struct clk dmic_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel func_dmic_abe_gfclk_sel[] = {
> > +static struct clksel func_dmic_abe_gfclk_sel[] = {
> >  	{ .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> > @@ -1531,7 +1531,7 @@ static struct clk emif2_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel fdif_fclk_div[] = {
> > +static struct clksel fdif_fclk_div[] = {
> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1692,7 +1692,7 @@ static struct clk gpmc_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel sgx_clk_mux_sel[] = {
> > +static struct clksel sgx_clk_mux_sel[] = {
> >  	{ .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -1723,7 +1723,7 @@ static struct clk hdq1w_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel hsi_fclk_div[] = {
> > +static struct clksel hsi_fclk_div[] = {
> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -1867,7 +1867,7 @@ static struct clk mcasp_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel func_mcasp_abe_gfclk_sel[] = {
> > +static struct clksel func_mcasp_abe_gfclk_sel[] = {
> >  	{ .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> > @@ -1900,7 +1900,7 @@ static struct clk mcbsp1_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel func_mcbsp1_gfclk_sel[] = {
> > +static struct clksel func_mcbsp1_gfclk_sel[] = {
> >  	{ .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> > @@ -1933,7 +1933,7 @@ static struct clk mcbsp2_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel func_mcbsp2_gfclk_sel[] = {
> > +static struct clksel func_mcbsp2_gfclk_sel[] = {
> >  	{ .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> > @@ -1966,7 +1966,7 @@ static struct clk mcbsp3_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel func_mcbsp3_gfclk_sel[] = {
> > +static struct clksel func_mcbsp3_gfclk_sel[] = {
> >  	{ .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> > @@ -1999,7 +1999,7 @@ static struct clk mcbsp4_sync_mux_ck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > -static const struct clksel per_mcbsp4_gfclk_sel[] = {
> > +static struct clksel per_mcbsp4_gfclk_sel[] = {
> >  	{ .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -2401,7 +2401,7 @@ static struct clk timer4_fck = {
> >  	.clkdm_name	= "l4_per_clkdm",
> >  };
> >
> > -static const struct clksel timer5_sync_mux_sel[] = {
> > +static struct clksel timer5_sync_mux_sel[] = {
> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -2532,7 +2532,7 @@ static struct clk usb_host_fs_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel utmi_p1_gfclk_sel[] = {
> > +static struct clksel utmi_p1_gfclk_sel[] = {
> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
> >  	{ .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -2559,7 +2559,7 @@ static struct clk usb_host_hs_utmi_p1_clk = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel utmi_p2_gfclk_sel[] = {
> > +static struct clksel utmi_p2_gfclk_sel[] = {
> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
> >  	{ .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -2656,7 +2656,7 @@ static struct clk usb_host_hs_fck = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel otg_60m_gfclk_sel[] = {
> > +static struct clksel otg_60m_gfclk_sel[] = {
> >  	{ .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
> >  	{ .parent = &xclk60motg_ck, .rates = div_1_1_rates },
> >  	{ .parent = NULL },
> > @@ -2743,13 +2743,13 @@ static struct clk usb_tll_hs_ick = {
> >  	.recalc		= &followparent_recalc,
> >  };
> >
> > -static const struct clksel_rate div2_14to18_rates[] = {
> > +static struct clksel_rate div2_14to18_rates[] = {
> >  	{ .div = 14, .val = 0, .flags = RATE_IN_4430 },
> >  	{ .div = 18, .val = 1, .flags = RATE_IN_4430 },
> >  	{ .div = 0 },
> >  };
> >
> > -static const struct clksel usim_fclk_div[] = {
> > +static struct clksel usim_fclk_div[] = {
> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2807,7 +2807,7 @@ static struct clk wd_timer3_fck = {
> >  };
> >
> >  /* Remaining optional clocks */
> > -static const struct clksel stm_clk_div_div[] = {
> > +static struct clksel stm_clk_div_div[] = {
> >  	{ .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2824,7 +2824,7 @@ static struct clk stm_clk_div_ck = {
> >  	.set_rate	= &omap2_clksel_set_rate,
> >  };
> >
> > -static const struct clksel trace_clk_div_div[] = {
> > +static struct clksel trace_clk_div_div[] = {
> >  	{ .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
> >  	{ .parent = NULL },
> >  };
> > @@ -2843,7 +2843,7 @@ static struct clk trace_clk_div_ck = {
> >
> >  /* SCRM aux clk nodes */
> >
> > -static const struct clksel auxclk_sel[] = {
> > +static struct clksel auxclk_sel[] = {
> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >  	{ .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
> >  	{ .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
> > @@ -2927,7 +2927,7 @@ static struct clk auxclk5_ck = {
> >  	.enable_bit	= OMAP4_ENABLE_SHIFT,
> >  };
> >
> > -static const struct clksel auxclkreq_sel[] = {
> > +static struct clksel auxclkreq_sel[] = {
> >  	{ .parent = &auxclk0_ck, .rates = div_1_0_rates },
> >  	{ .parent = &auxclk1_ck, .rates = div_1_1_rates },
> >  	{ .parent = &auxclk2_ck, .rates = div_1_2_rates },
> > diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
> > index fc62fb5..9bfd193 100644
> > --- a/arch/arm/plat-omap/clock.c
> > +++ b/arch/arm/plat-omap/clock.c
> > @@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
> >  	}
> >  }
> >
> > +static struct clk *_omap_clk_get_by_name(const char *name)
> > +{
> > +	struct clk *c;
> > +
> > +	list_for_each_entry(c, &clocks, node)
> > +		if (!strcmp(c->name, name))
> > +			return c;
> > +	return NULL;
> > +}
> > +
> >  /**
> >   * omap_clk_get_by_name - locate OMAP struct clk by its name
> >   * @name: name of the struct clk to locate
> > @@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
> >   */
> >  struct clk *omap_clk_get_by_name(const char *name)
> >  {
> > -	struct clk *c;
> >  	struct clk *ret = NULL;
> >
> >  	mutex_lock(&clocks_mutex);
> > +	ret = _omap_clk_get_by_name(name);
> > +	mutex_unlock(&clocks_mutex);
> > +
> > +	return ret;
> > +}
> > +
> > +static inline void omap_init_dpll_data_clk_pts(struct dpll_data *dd)
> > +{
> > +	if (!dd->clk_ref && dd->clk_ref_name)
> > +		dd->clk_ref = _omap_clk_get_by_name(dd->clk_ref_name);
> > +	if (!dd->clk_bypass && dd->clk_bypass_name)
> > +		dd->clk_bypass =
_omap_clk_get_by_name(dd->clk_bypass_name);
> > +}
> > +
> > +static inline void omap_init_clksel_clk_pts(struct clksel *clks)
> > +{
> > +	if (!clks->parent && clks->parent_name)
> > +		clks->parent = _omap_clk_get_by_name(clks->parent_name);
> > +}
> > +
> > +void omap_init_clk_pts(void)
> > +{
> > +	struct clk *c;
> > +
> > +	mutex_lock(&clocks_mutex);
> >
> >  	list_for_each_entry(c, &clocks, node) {
> > -		if (!strcmp(c->name, name)) {
> > -			ret = c;
> > -			break;
> > -		}
> > +		if (!c->parent && c->parent_name)
> > +			c->parent = _omap_clk_get_by_name(c->parent_name);
> > +		if (c->dpll_data)
> > +			omap_init_dpll_data_clk_pts(c->dpll_data);
> > +		if (c->clksel)
> > +			omap_init_clksel_clk_pts(c->clksel);
> >  	}
> >
> >  	mutex_unlock(&clocks_mutex);
> > -
> > -	return ret;
> >  }
> >
> >  /*
> > diff --git a/arch/arm/plat-omap/include/plat/clock.h
b/arch/arm/plat-omap/include/plat/clock.h
> > index 8eb0ada..dc0d9fd 100644
> > --- a/arch/arm/plat-omap/include/plat/clock.h
> > +++ b/arch/arm/plat-omap/include/plat/clock.h
> > @@ -85,6 +85,7 @@ struct clksel_rate {
> >  /**
> >   * struct clksel - available parent clocks, and a pointer to their
divisors
> >   * @parent: struct clk * to a possible parent clock
> > + * @parent_name: Name of the possible parent clock
> >   * @rates: available divisors for this parent clock
> >   *
> >   * A struct clksel is always associated with one or more struct clks
> > @@ -92,6 +93,7 @@ struct clksel_rate {
> >   */
> >  struct clksel {
> >  	struct clk		 *parent;
> > +	const char		 *parent_name;
> >  	const struct clksel_rate *rates;
> >  };
> >
> > @@ -101,7 +103,9 @@ struct clksel {
> >   * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
> >   * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
> >   * @clk_bypass: struct clk pointer to the clock's bypass clock input
> > + * @clk_bypass_name: Name of the clock's bypass clock input
> >   * @clk_ref: struct clk pointer to the clock's reference clock input
> > + * @clk_ref_name: Name of the clock's reference clock input
> >   * @control_reg: register containing the DPLL mode bitfield
> >   * @enable_mask: mask of the DPLL mode bitfield in @control_reg
> >   * @rate_tolerance: maximum variance allowed from target rate (in Hz)
> > @@ -143,7 +147,9 @@ struct dpll_data {
> >  	u32			mult_mask;
> >  	u32			div1_mask;
> >  	struct clk		*clk_bypass;
> > +	const char		*clk_bypass_name;
> >  	struct clk		*clk_ref;
> > +	const char		*clk_ref_name;
> >  	void __iomem		*control_reg;
> >  	u32			enable_mask;
> >  	unsigned int		rate_tolerance;
> > @@ -230,6 +236,7 @@ struct clk {
> >  	const struct clkops	*ops;
> >  	const char		*name;
> >  	struct clk		*parent;
> > +	const char		*parent_name;
> >  	struct list_head	children;
> >  	struct list_head	sibling;	/* node for children */
> >  	unsigned long		rate;
> > @@ -245,7 +252,7 @@ struct clk {
> >  #ifdef CONFIG_ARCH_OMAP2PLUS
> >  	void __iomem		*clksel_reg;
> >  	u32			clksel_mask;
> > -	const struct clksel	*clksel;
> > +	struct clksel		*clksel;
> >  	struct dpll_data	*dpll_data;
> >  	const char		*clkdm_name;
> >  	struct clockdomain	*clkdm;
> > @@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct
cpufreq_frequency_table **table);
> >  extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table
**table);
> >  #endif
> >  extern struct clk *omap_clk_get_by_name(const char *name);
> > -
> > +extern void omap_init_clk_pts(void);
> >  extern const struct clkops clkops_null;
> >
> >  extern struct clk dummy_ck;

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS
  2011-01-24 22:09     ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Kevin Hilman
@ 2011-01-25  7:24       ` Rajendra Nayak
  2011-01-25 15:58         ` Kevin Hilman
  0 siblings, 1 reply; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-25  7:24 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, paul

Hi Kevin,

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@ti.com]
> Sent: Tuesday, January 25, 2011 3:39 AM
> To: Rajendra Nayak
> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> Subject: Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on
3430ES2PLUS
>
> Rajendra Nayak <rnayak@ti.com> writes:
>
> > The IVA2_CLK_SRC and MPU_CLK_SRC for OMAP3430 ES2
> > and above are 3 bit fields.
> > Define new masks for them, and since they are used
> > in a couple of clock nodes, model separate clock
> > nodes for 3430ES1 and 3430ES2+.
>
> This part should probably be separated out as a fix for the -rc cycle.

The reason I clubbed this fix here was because it had a dependency on the
'reference by name' approach added by the previous patch.

Else I was looking at creating too many duplicate nodes, since the clock
nodes which get added in this patch (dpll1_fck_3430es2/dpll2_fck_3430es2)
are part of dpll_data.

Regards,
Rajendra
			
>
> Kevin
>
> > Also change reference to these new clock nodes
> > from clk pointers to clk name and make a call
> > to omap_init_clk_pts to init the pointers at
> > run time.
> >
> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
> > ---
> >  arch/arm/mach-omap2/clock3xxx_data.c  |   39
++++++++++++++++++++++++++------
> >  arch/arm/mach-omap2/cm-regbits-34xx.h |    2 +
> >  2 files changed, 33 insertions(+), 8 deletions(-)
> >
> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
b/arch/arm/mach-omap2/clock3xxx_data.c
> > index 9c87adb..c3a7ff5 100644
> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> > @@ -53,10 +53,6 @@
> >   * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
> >   */
> >
> > -/* Forward declarations for DPLL bypass clocks */
> > -static struct clk dpll1_fck;
> > -static struct clk dpll2_fck;
> > -
> >  /* PRM CLOCKS */
> >
> >  /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz
clock. */
> > @@ -275,7 +271,7 @@ static struct dpll_data dpll1_dd = {
> >  	.mult_div1_reg	= OMAP_CM_REGADDR(MPU_MOD,
OMAP3430_CM_CLKSEL1_PLL),
> >  	.mult_mask	= OMAP3430_MPU_DPLL_MULT_MASK,
> >  	.div1_mask	= OMAP3430_MPU_DPLL_DIV_MASK,
> > -	.clk_bypass	= &dpll1_fck,
> > +	.clk_bypass_name	= "dpll1_fck",
> >  	.clk_ref	= &sys_ck,
> >  	.freqsel_mask	= OMAP3430_MPU_DPLL_FREQSEL_MASK,
> >  	.control_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
> > @@ -347,7 +343,7 @@ static struct dpll_data dpll2_dd = {
> >  	.mult_div1_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
OMAP3430_CM_CLKSEL1_PLL),
> >  	.mult_mask	= OMAP3430_IVA2_DPLL_MULT_MASK,
> >  	.div1_mask	= OMAP3430_IVA2_DPLL_DIV_MASK,
> > -	.clk_bypass	= &dpll2_fck,
> > +	.clk_bypass_name	= "dpll2_fck",
> >  	.clk_ref	= &sys_ck,
> >  	.freqsel_mask	= OMAP3430_IVA2_DPLL_FREQSEL_MASK,
> >  	.control_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
OMAP3430_CM_CLKEN_PLL),
> > @@ -1077,6 +1073,17 @@ static struct clk dpll1_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > +static struct clk dpll1_fck_3430es2 = {
> > +	.name		= "dpll1_fck",
> > +	.ops		= &clkops_null,
> > +	.parent		= &core_ck,
> > +	.init		= &omap2_init_clksel_parent,
> > +	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD,
OMAP3430_CM_CLKSEL1_PLL),
> > +	.clksel_mask	= OMAP3430ES2_MPU_CLK_SRC_MASK,
> > +	.clksel		= div4_core_clksel,
> > +	.recalc		= &omap2_clksel_recalc,
> > +};
> > +
> >  static struct clk mpu_ck = {
> >  	.name		= "mpu_ck",
> >  	.ops		= &clkops_null,
> > @@ -1133,6 +1140,17 @@ static struct clk dpll2_fck = {
> >  	.recalc		= &omap2_clksel_recalc,
> >  };
> >
> > +static struct clk dpll2_fck_3430es2 = {
> > +	.name		= "dpll2_fck",
> > +	.ops		= &clkops_null,
> > +	.parent		= &core_ck,
> > +	.init		= &omap2_init_clksel_parent,
> > +	.clksel_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
OMAP3430_CM_CLKSEL1_PLL),
> > +	.clksel_mask	= OMAP3430ES2_IVA2_CLK_SRC_MASK,
> > +	.clksel		= div4_core_clksel,
> > +	.recalc		= &omap2_clksel_recalc,
> > +};
> > +
> >  static struct clk iva2_ck = {
> >  	.name		= "iva2_ck",
> >  	.ops		= &clkops_omap2_dflt_wait,
> > @@ -3261,11 +3279,13 @@ static struct omap_clk omap3xxx_clks[] = {
> >  	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
> >  	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX),
> >  	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX),
> > -	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX),
> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3430ES1),
> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck_3430es2,
CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
> >  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX),
> >  	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX),
> >  	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
> > -	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX |
CK_36XX),
> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_3430ES1),
> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck_3430es2,
CK_3430ES2PLUS | CK_36XX),
> >  	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX |
CK_36XX),
> >  	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX),
> >  	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX),
> > @@ -3535,6 +3555,9 @@ int __init omap3xxx_clk_init(void)
> >  			omap2_init_clk_clkdm(c->lk.clk);
> >  		}
> >
> > +	/* Initialise clk pointers for parent/ref/bypass clks */
> > +	omap_init_clk_pts();
> > +
> >  	recalculate_root_clocks();
> >
> >  	pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld
MHz\n",
> > diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h
b/arch/arm/mach-omap2/cm-regbits-34xx.h
> > index b912759..fd80872 100644
> > --- a/arch/arm/mach-omap2/cm-regbits-34xx.h
> > +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
> > @@ -80,6 +80,7 @@
> >  /* CM_CLKSEL1_PLL_IVA2 */
> >  #define OMAP3430_IVA2_CLK_SRC_SHIFT			19
> >  #define OMAP3430_IVA2_CLK_SRC_MASK			(0x3 << 19)
> > +#define OMAP3430ES2_IVA2_CLK_SRC_MASK			(0x7 <<
19)
> >  #define OMAP3430_IVA2_DPLL_MULT_SHIFT			8
> >  #define OMAP3430_IVA2_DPLL_MULT_MASK			(0x7ff <<
8)
> >  #define OMAP3430_IVA2_DPLL_DIV_SHIFT			0
> > @@ -125,6 +126,7 @@
> >  /* CM_CLKSEL1_PLL_MPU */
> >  #define OMAP3430_MPU_CLK_SRC_SHIFT			19
> >  #define OMAP3430_MPU_CLK_SRC_MASK			(0x3 << 19)
> > +#define OMAP3430ES2_MPU_CLK_SRC_MASK			(0x7 <<
19)
> >  #define OMAP3430_MPU_DPLL_MULT_SHIFT			8
> >  #define OMAP3430_MPU_DPLL_MULT_MASK			(0x7ff <<
8)
> >  #define OMAP3430_MPU_DPLL_DIV_SHIFT			0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-25  7:21     ` Rajendra Nayak
@ 2011-01-25 15:57       ` Kevin Hilman
  2011-01-27  2:42         ` Rajendra Nayak
  0 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2011-01-25 15:57 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: linux-omap, paul

Hi Rajendra,

Rajendra Nayak <rnayak@ti.com> writes:

>> -----Original Message-----
>> From: Kevin Hilman [mailto:khilman@ti.com]
>> Sent: Tuesday, January 25, 2011 3:38 AM
>> To: Rajendra Nayak
>> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
>> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
> pointers
>>
>> Rajendra Nayak <rnayak@ti.com> writes:
>>
>> > There are various instances of clk pointers being
>> > embedded within structures in the clock framework
>> > to refer to clk parents, reference clocks, bypass
>> > clocks etc.
>> > The right way to reference these is by their name
>> > and not by embedding direct pointers to these clks.
>> >
>> > Hence make provision to be able to provide clock
>> > names to refer to parents and bypass/ref clks and
>> > populate the clk pointers at runtime.
>> >
>> > This requires the const qualifier to be dropped for
>> > struct clksel within struct clk and hence needs
>> > clksel struct definitions to be changed in all
>> > clock*_data.c files.
>> >
>> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
>>
>> I think the changelog needs a little more description about when the
>> names are used instead of the pointers.  It looks like the names are
>> only used at init time to select the right pointers, but the rest of the
>> framework continues to use pointers as before, right?  This isnt' very
>> clear from the changelog.
>
> Right, the basic idea was to prevent the binding of clk pointers at
> compile time and instead do it at runtime. The rest of the code which
> uses pointers would still go ahead and use them.
> This is similar to what happens in other frameworks like hwmod
> (which has the main_clk name populated and runtime maps to
> the relevant clk pointer) or clock framework itself (to identify
> the clockdomains associated with the clks)
>
> Also the patch leaves all the existing clk pointer associations at
> compile time as is and only uses this reference by name for a
> few nodes that get added in the later patches in the series.
>
> If the approach seems ok, then a patch to replace all the
> existing pointer based referencing with the name based
> referencing can also be pushed.

The approach seems OK to me.  I just think the changelog needs to be a
bit clearer since on first read, it sounded (to me) like names were
going to replace pointers for more than just init time.

Kevin

> Regards,
> Rajendra
>
>>
>> Kevin
>>
>>
>> > ---
>> >  arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++++---------
>> >  arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++++----------
>> >  arch/arm/mach-omap2/clock3xxx_data.c    |  144
> +++++++++++++++---------------
>> >  arch/arm/mach-omap2/clock44xx_data.c    |  136
> +++++++++++++++---------------
>> >  arch/arm/plat-omap/clock.c              |   48 +++++++++--
>> >  arch/arm/plat-omap/include/plat/clock.h |   11 ++-
>> >  6 files changed, 277 insertions(+), 236 deletions(-)
>> >
>> > diff --git a/arch/arm/mach-omap2/clock2420_data.c
> b/arch/arm/mach-omap2/clock2420_data.c
>> > index 0a992bc..5662e51 100644
>> > --- a/arch/arm/mach-omap2/clock2420_data.c
>> > +++ b/arch/arm/mach-omap2/clock2420_data.c
>> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
>> >
>> >  /* func_54m_ck */
>> >
>> > -static const struct clksel_rate func_54m_apll54_rates[] = {
>> > +static struct clksel_rate func_54m_apll54_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate func_54m_alt_rates[] = {
>> > +static struct clksel_rate func_54m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_54m_clksel[] = {
>> > +static struct clksel func_54m_clksel[] = {
>> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
>> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
>> >  	{ .parent = NULL },
>> > @@ -207,17 +207,17 @@ static struct clk func_96m_ck = {
>> >
>> >  /* func_48m_ck */
>> >
>> > -static const struct clksel_rate func_48m_apll96_rates[] = {
>> > +static struct clksel_rate func_48m_apll96_rates[] = {
>> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate func_48m_alt_rates[] = {
>> > +static struct clksel_rate func_48m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_48m_clksel[] = {
>> > +static struct clksel func_48m_clksel[] = {
>> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
>> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
>> >  	{ .parent = NULL }
>> > @@ -262,27 +262,27 @@ static struct clk wdt1_osc_ck = {
>> >   * 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[] = {
>> > +static struct clksel_rate common_clkout_src_core_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
>> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
>> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
>> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel common_clkout_src_clksel[] = {
>> > +static 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 },
>> > @@ -306,7 +306,7 @@ static struct clk sys_clkout_src = {
>> >  	.set_rate	= &omap2_clksel_set_rate
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_rates[] = {
>> > +static struct clksel_rate common_clkout_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
>> > @@ -315,7 +315,7 @@ static const struct clksel_rate
> common_clkout_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel sys_clkout_clksel[] = {
>> > +static struct clksel sys_clkout_clksel[] = {
>> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -350,7 +350,7 @@ static struct clk sys_clkout2_src = {
>> >  	.set_rate	= &omap2_clksel_set_rate
>> >  };
>> >
>> > -static const struct clksel sys_clkout2_clksel[] = {
>> > +static struct clksel sys_clkout2_clksel[] = {
>> >  	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -390,7 +390,7 @@ static struct clk emul_ck = {
>> >   * - Base divider comes from: CM_CLKSEL_MPU
>> >   *
>> >   */
>> > -static const struct clksel_rate mpu_core_rates[] = {
>> > +static struct clksel_rate mpu_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
>> > @@ -399,7 +399,7 @@ static const struct clksel_rate mpu_core_rates[] =
> {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel mpu_clksel[] = {
>> > +static struct clksel mpu_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -426,7 +426,7 @@ static struct clk mpu_ck = {	/* Control cpu */
>> >   * controls. The other branch gets further divided by 2 then possibly
>> >   * routed into a synchronizer and out of clocks abc.
>> >   */
>> > -static const struct clksel_rate dsp_fck_core_rates[] = {
>> > +static struct clksel_rate dsp_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 },
>> > @@ -437,7 +437,7 @@ static const struct clksel_rate
> dsp_fck_core_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel dsp_fck_clksel[] = {
>> > +static struct clksel dsp_fck_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -456,13 +456,13 @@ static struct clk dsp_fck = {
>> >  };
>> >
>> >  /* DSP interface clock */
>> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
>> > +static struct clksel_rate dsp_irate_ick_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel dsp_irate_ick_clksel[] = {
>> > +static struct clksel dsp_irate_ick_clksel[] = {
>> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -536,7 +536,7 @@ static struct clk iva1_mpu_int_ifck = {
>> >   * may very well need notification when the clock changes. Currently
> for low
>> >   * operating points, these are taken care of in sleep.S.
>> >   */
>> > -static const struct clksel_rate core_l3_core_rates[] = {
>> > +static struct clksel_rate core_l3_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>> > @@ -547,7 +547,7 @@ static const struct clksel_rate
> core_l3_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel core_l3_clksel[] = {
>> > +static struct clksel core_l3_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -564,14 +564,14 @@ static struct clk core_l3_ck = {	/* Used
> for ick and fck, interconnect */
>> >  };
>> >
>> >  /* usb_l4_ick */
>> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel usb_l4_ick_clksel[] = {
>> > +static struct clksel usb_l4_ick_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -597,13 +597,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
> interface clock */
>> >   * functional clocks.	Fixed APLL functional source clocks are
> managed in
>> >   * this domain.
>> >   */
>> > -static const struct clksel_rate l4_core_l3_rates[] = {
>> > +static struct clksel_rate l4_core_l3_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel l4_clksel[] = {
>> > +static struct clksel l4_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -627,7 +627,7 @@ static struct clk l4_ck = {		/* used
> both as an ick and fck */
>> >   *
>> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
>> >   */
>> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
>> > +static struct clksel_rate ssi_ssr_sst_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 },
>> > @@ -637,7 +637,7 @@ static const struct clksel_rate
> ssi_ssr_sst_fck_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
>> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -683,7 +683,7 @@ static struct clk ssi_l4_ick = {
>> >   */
>> >
>> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
>> > -static const struct clksel gfx_fck_clksel[] = {
>> > +static struct clksel gfx_fck_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -736,12 +736,12 @@ static struct clk gfx_ick = {
>> >   */
>> >  /* XXX Add RATE_NOT_VALIDATED */
>> >
>> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
>> > +static struct clksel_rate dss1_fck_sys_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate dss1_fck_core_rates[] = {
>> > +static 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 },
>> > @@ -755,7 +755,7 @@ static const struct clksel_rate
> dss1_fck_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel dss1_fck_clksel[] = {
>> > +static struct clksel dss1_fck_clksel[] = {
>> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
>> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
>> >  	{ .parent = NULL },
>> > @@ -785,17 +785,17 @@ static struct clk dss1_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
>> > +static struct clksel_rate dss2_fck_sys_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
>> > +static struct clksel_rate dss2_fck_48m_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel dss2_fck_clksel[] = {
>> > +static struct clksel dss2_fck_clksel[] = {
>> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
>> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
>> >  	{ .parent = NULL }
>> > @@ -831,12 +831,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
> used in power management */
>> >   * here will likely have an L4 interface parent, and may have
> multiple
>> >   * functional clock parents.
>> >   */
>> > -static const struct clksel_rate gpt_alt_rates[] = {
>> > +static struct clksel_rate gpt_alt_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel omap24xx_gpt_clksel[] = {
>> > +static 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 },
>> > @@ -1142,17 +1142,17 @@ static struct clk mcbsp1_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
>> > +static 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[] = {
>> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel mcbsp_fck_clksel[] = {
>> > +static struct clksel mcbsp_fck_clksel[] = {
>> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
>> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>> >  	{ .parent = NULL }
>> > @@ -1618,12 +1618,12 @@ static struct clk vlynq_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate vlynq_fck_96m_rates[] = {
>> > +static struct clksel_rate vlynq_fck_96m_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate vlynq_fck_core_rates[] = {
>> > +static 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 },
>> > @@ -1637,7 +1637,7 @@ static const struct clksel_rate
> vlynq_fck_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel vlynq_fck_clksel[] = {
>> > +static struct clksel vlynq_fck_clksel[] = {
>> >  	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
>> >  	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
>> >  	{ .parent = NULL }
>> > diff --git a/arch/arm/mach-omap2/clock2430_data.c
> b/arch/arm/mach-omap2/clock2430_data.c
>> > index c047dcd..6f08a57 100644
>> > --- a/arch/arm/mach-omap2/clock2430_data.c
>> > +++ b/arch/arm/mach-omap2/clock2430_data.c
>> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
>> >
>> >  /* func_54m_ck */
>> >
>> > -static const struct clksel_rate func_54m_apll54_rates[] = {
>> > +static struct clksel_rate func_54m_apll54_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate func_54m_alt_rates[] = {
>> > +static struct clksel_rate func_54m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_54m_clksel[] = {
>> > +static struct clksel func_54m_clksel[] = {
>> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
>> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
>> >  	{ .parent = NULL },
>> > @@ -198,17 +198,17 @@ static struct clk core_ck = {
>> >  };
>> >
>> >  /* func_96m_ck */
>> > -static const struct clksel_rate func_96m_apll96_rates[] = {
>> > +static struct clksel_rate func_96m_apll96_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate func_96m_alt_rates[] = {
>> > +static struct clksel_rate func_96m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_96m_clksel[] = {
>> > +static struct clksel func_96m_clksel[] = {
>> >  	{ .parent = &apll96_ck,	.rates = func_96m_apll96_rates },
>> >  	{ .parent = &alt_ck,	.rates = func_96m_alt_rates },
>> >  	{ .parent = NULL }
>> > @@ -228,17 +228,17 @@ static struct clk func_96m_ck = {
>> >
>> >  /* func_48m_ck */
>> >
>> > -static const struct clksel_rate func_48m_apll96_rates[] = {
>> > +static struct clksel_rate func_48m_apll96_rates[] = {
>> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate func_48m_alt_rates[] = {
>> > +static struct clksel_rate func_48m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_48m_clksel[] = {
>> > +static struct clksel func_48m_clksel[] = {
>> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
>> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
>> >  	{ .parent = NULL }
>> > @@ -283,27 +283,27 @@ static struct clk wdt1_osc_ck = {
>> >   * 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[] = {
>> > +static struct clksel_rate common_clkout_src_core_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
>> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
>> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
>> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel common_clkout_src_clksel[] = {
>> > +static 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 },
>> > @@ -327,7 +327,7 @@ static struct clk sys_clkout_src = {
>> >  	.set_rate	= &omap2_clksel_set_rate
>> >  };
>> >
>> > -static const struct clksel_rate common_clkout_rates[] = {
>> > +static struct clksel_rate common_clkout_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
>> > @@ -336,7 +336,7 @@ static const struct clksel_rate
> common_clkout_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel sys_clkout_clksel[] = {
>> > +static struct clksel sys_clkout_clksel[] = {
>> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -375,13 +375,13 @@ static struct clk emul_ck = {
>> >   * - Base divider comes from: CM_CLKSEL_MPU
>> >   *
>> >   */
>> > -static const struct clksel_rate mpu_core_rates[] = {
>> > +static struct clksel_rate mpu_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel mpu_clksel[] = {
>> > +static struct clksel mpu_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -408,7 +408,7 @@ static struct clk mpu_ck = {	/* Control cpu */
>> >   * controls. The other branch gets further divided by 2 then possibly
>> >   * routed into a synchronizer and out of clocks abc.
>> >   */
>> > -static const struct clksel_rate dsp_fck_core_rates[] = {
>> > +static struct clksel_rate dsp_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 },
>> > @@ -416,7 +416,7 @@ static const struct clksel_rate
> dsp_fck_core_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel dsp_fck_clksel[] = {
>> > +static struct clksel dsp_fck_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -435,14 +435,14 @@ static struct clk dsp_fck = {
>> >  };
>> >
>> >  /* DSP interface clock */
>> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
>> > +static struct clksel_rate dsp_irate_ick_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_243X },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel dsp_irate_ick_clksel[] = {
>> > +static struct clksel dsp_irate_ick_clksel[] = {
>> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -486,14 +486,14 @@ static struct clk iva2_1_ick = {
>> >   * may very well need notification when the clock changes. Currently
> for low
>> >   * operating points, these are taken care of in sleep.S.
>> >   */
>> > -static const struct clksel_rate core_l3_core_rates[] = {
>> > +static struct clksel_rate core_l3_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>> >  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel core_l3_clksel[] = {
>> > +static struct clksel core_l3_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -510,14 +510,14 @@ static struct clk core_l3_ck = {	/* Used
> for ick and fck, interconnect */
>> >  };
>> >
>> >  /* usb_l4_ick */
>> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel usb_l4_ick_clksel[] = {
>> > +static struct clksel usb_l4_ick_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -543,13 +543,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
> interface clock */
>> >   * functional clocks.	Fixed APLL functional source clocks are
> managed in
>> >   * this domain.
>> >   */
>> > -static const struct clksel_rate l4_core_l3_rates[] = {
>> > +static struct clksel_rate l4_core_l3_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel l4_clksel[] = {
>> > +static struct clksel l4_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -573,7 +573,7 @@ static struct clk l4_ck = {		/* used
> both as an ick and fck */
>> >   *
>> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
>> >   */
>> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
>> > +static struct clksel_rate ssi_ssr_sst_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 },
>> > @@ -582,7 +582,7 @@ static const struct clksel_rate
> ssi_ssr_sst_fck_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
>> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -628,7 +628,7 @@ static struct clk ssi_l4_ick = {
>> >   */
>> >
>> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck */
>> > -static const struct clksel gfx_fck_clksel[] = {
>> > +static struct clksel gfx_fck_clksel[] = {
>> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -678,7 +678,7 @@ static struct clk gfx_ick = {
>> >   *		MDM_ICLK
>> >   * These clocks are usable in chassis mode only.
>> >   */
>> > -static const struct clksel_rate mdm_ick_core_rates[] = {
>> > +static struct clksel_rate mdm_ick_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
>> >  	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
>> > @@ -686,7 +686,7 @@ static const struct clksel_rate
> mdm_ick_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel mdm_ick_clksel[] = {
>> > +static struct clksel mdm_ick_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -724,12 +724,12 @@ static struct clk mdm_osc_ck = {
>> >   */
>> >  /* XXX Add RATE_NOT_VALIDATED */
>> >
>> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
>> > +static struct clksel_rate dss1_fck_sys_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate dss1_fck_core_rates[] = {
>> > +static 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 },
>> > @@ -743,7 +743,7 @@ static const struct clksel_rate
> dss1_fck_core_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel dss1_fck_clksel[] = {
>> > +static struct clksel dss1_fck_clksel[] = {
>> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
>> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
>> >  	{ .parent = NULL },
>> > @@ -773,17 +773,17 @@ static struct clk dss1_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
>> > +static struct clksel_rate dss2_fck_sys_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
>> > +static struct clksel_rate dss2_fck_48m_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel dss2_fck_clksel[] = {
>> > +static struct clksel dss2_fck_clksel[] = {
>> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
>> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
>> >  	{ .parent = NULL }
>> > @@ -819,12 +819,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
> used in power management */
>> >   * here will likely have an L4 interface parent, and may have
> multiple
>> >   * functional clock parents.
>> >   */
>> > -static const struct clksel_rate gpt_alt_rates[] = {
>> > +static struct clksel_rate gpt_alt_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel omap24xx_gpt_clksel[] = {
>> > +static 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 },
>> > @@ -1130,17 +1130,17 @@ static struct clk mcbsp1_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
>> > +static 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[] = {
>> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel mcbsp_fck_clksel[] = {
>> > +static struct clksel mcbsp_fck_clksel[] = {
>> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates },
>> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>> >  	{ .parent = NULL }
>> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
> b/arch/arm/mach-omap2/clock3xxx_data.c
>> > index 403a4a1..9c87adb 100644
>> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
>> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
>> > @@ -109,37 +109,37 @@ static struct clk virt_38_4m_ck = {
>> >  	.rate		= 38400000,
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_12m_rates[] = {
>> > +static struct clksel_rate osc_sys_12m_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_13m_rates[] = {
>> > +static struct clksel_rate osc_sys_13m_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_16_8m_rates[] = {
>> > +static struct clksel_rate osc_sys_16_8m_rates[] = {
>> >  	{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_19_2m_rates[] = {
>> > +static struct clksel_rate osc_sys_19_2m_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_26m_rates[] = {
>> > +static struct clksel_rate osc_sys_26m_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate osc_sys_38_4m_rates[] = {
>> > +static struct clksel_rate osc_sys_38_4m_rates[] = {
>> >  	{ .div = 1, .val = 4, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel osc_sys_clksel[] = {
>> > +static struct clksel osc_sys_clksel[] = {
>> >  	{ .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
>> >  	{ .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
>> >  	{ .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
>> > @@ -162,13 +162,13 @@ static struct clk osc_sys_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div2_rates[] = {
>> > +static struct clksel_rate div2_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel sys_clksel[] = {
>> > +static struct clksel sys_clksel[] = {
>> >  	{ .parent = &osc_sys_ck, .rates = div2_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -212,7 +212,7 @@ static struct clk sys_clkout1 = {
>> >
>> >  /* CM CLOCKS */
>> >
>> > -static const struct clksel_rate div16_dpll_rates[] = {
>> > +static struct clksel_rate div16_dpll_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>> > @@ -232,7 +232,7 @@ static const struct clksel_rate div16_dpll_rates[]
> = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate dpll4_rates[] = {
>> > +static struct clksel_rate dpll4_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>> > @@ -318,7 +318,7 @@ static struct clk dpll1_x2_ck = {
>> >  };
>> >
>> >  /* On DPLL1, unlike other DPLLs, the divider is downstream from
> CLKOUTX2 */
>> > -static const struct clksel div16_dpll1_x2m2_clksel[] = {
>> > +static struct clksel div16_dpll1_x2m2_clksel[] = {
>> >  	{ .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -378,7 +378,7 @@ static struct clk dpll2_ck = {
>> >  	.recalc		= &omap3_dpll_recalc,
>> >  };
>> >
>> > -static const struct clksel div16_dpll2_m2x2_clksel[] = {
>> > +static struct clksel div16_dpll2_m2x2_clksel[] = {
>> >  	{ .parent = &dpll2_ck, .rates = div16_dpll_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -449,7 +449,7 @@ static struct clk dpll3_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div31_dpll3_rates[] = {
>> > +static struct clksel_rate div31_dpll3_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
>> > @@ -484,7 +484,7 @@ static const struct clksel_rate
> div31_dpll3_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel div31_dpll3m2_clksel[] = {
>> > +static struct clksel div31_dpll3m2_clksel[] = {
>> >  	{ .parent = &dpll3_ck, .rates = div31_dpll3_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -520,7 +520,7 @@ static struct clk dpll3_m2x2_ck = {
>> >  };
>> >
>> >  /* The PWRDN bit is apparently only available on 3430ES2 and above */
>> > -static const struct clksel div16_dpll3_clksel[] = {
>> > +static struct clksel div16_dpll3_clksel[] = {
>> >  	{ .parent = &dpll3_ck, .rates = div16_dpll_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -635,7 +635,7 @@ static struct clk dpll4_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll4_clksel[] = {
>> > +static struct clksel dpll4_clksel[] = {
>> >  	{ .parent = &dpll4_ck, .rates = dpll4_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -680,23 +680,23 @@ static struct clk omap_192m_alwon_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate omap_96m_alwon_fck_rates[] = {
>> > +static struct clksel_rate omap_96m_alwon_fck_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_36XX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_36XX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel omap_96m_alwon_fck_clksel[] = {
>> > +static struct clksel omap_96m_alwon_fck_clksel[] = {
>> >  	{ .parent = &omap_192m_alwon_fck, .rates =
> omap_96m_alwon_fck_rates },
>> >  	{ .parent = NULL }
>> >  };
>> >
>> > -static const struct clksel_rate omap_96m_dpll_rates[] = {
>> > +static struct clksel_rate omap_96m_dpll_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate omap_96m_sys_rates[] = {
>> > +static struct clksel_rate omap_96m_sys_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> > @@ -726,7 +726,7 @@ static struct clk cm_96m_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel omap_96m_fck_clksel[] = {
>> > +static struct clksel omap_96m_fck_clksel[] = {
>> >  	{ .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
>> >  	{ .parent = &sys_ck,	 .rates = omap_96m_sys_rates },
>> >  	{ .parent = NULL }
>> > @@ -768,17 +768,17 @@ static struct clk dpll4_m3x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
>> > +static struct clksel_rate omap_54m_d4m3x2_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate omap_54m_alt_rates[] = {
>> > +static struct clksel_rate omap_54m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel omap_54m_clksel[] = {
>> > +static struct clksel omap_54m_clksel[] = {
>> >  	{ .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
>> >  	{ .parent = &sys_altclk,    .rates = omap_54m_alt_rates },
>> >  	{ .parent = NULL }
>> > @@ -794,17 +794,17 @@ static struct clk omap_54m_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate omap_48m_cm96m_rates[] = {
>> > +static struct clksel_rate omap_48m_cm96m_rates[] = {
>> >  	{ .div = 2, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate omap_48m_alt_rates[] = {
>> > +static struct clksel_rate omap_48m_alt_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel omap_48m_clksel[] = {
>> > +static struct clksel omap_48m_clksel[] = {
>> >  	{ .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
>> >  	{ .parent = &sys_altclk, .rates = omap_48m_alt_rates },
>> >  	{ .parent = NULL }
>> > @@ -953,7 +953,7 @@ static struct clk dpll5_ck = {
>> >  	.recalc		= &omap3_dpll_recalc,
>> >  };
>> >
>> > -static const struct clksel div16_dpll5_clksel[] = {
>> > +static struct clksel div16_dpll5_clksel[] = {
>> >  	{ .parent = &dpll5_ck, .rates = div16_dpll_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -972,27 +972,27 @@ static struct clk dpll5_m2_ck = {
>> >
>> >  /* CM EXTERNAL CLOCK OUTPUTS */
>> >
>> > -static const struct clksel_rate clkout2_src_core_rates[] = {
>> > +static struct clksel_rate clkout2_src_core_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate clkout2_src_sys_rates[] = {
>> > +static struct clksel_rate clkout2_src_sys_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate clkout2_src_96m_rates[] = {
>> > +static struct clksel_rate clkout2_src_96m_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate clkout2_src_54m_rates[] = {
>> > +static struct clksel_rate clkout2_src_54m_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel clkout2_src_clksel[] = {
>> > +static struct clksel clkout2_src_clksel[] = {
>> >  	{ .parent = &core_ck,		.rates = clkout2_src_core_rates },
>> >  	{ .parent = &sys_ck,		.rates = clkout2_src_sys_rates },
>> >  	{ .parent = &cm_96m_fck,	.rates = clkout2_src_96m_rates },
>> > @@ -1013,7 +1013,7 @@ static struct clk clkout2_src_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate sys_clkout2_rates[] = {
>> > +static struct clksel_rate sys_clkout2_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4, .val = 2, .flags = RATE_IN_3XXX },
>> > @@ -1022,7 +1022,7 @@ static const struct clksel_rate
> sys_clkout2_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel sys_clkout2_clksel[] = {
>> > +static struct clksel sys_clkout2_clksel[] = {
>> >  	{ .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1050,14 +1050,14 @@ static struct clk corex2_fck = {
>> >
>> >  /* DPLL power domain clock controls */
>> >
>> > -static const struct clksel_rate div4_rates[] = {
>> > +static struct clksel_rate div4_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel div4_core_clksel[] = {
>> > +static struct clksel div4_core_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = div4_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1086,13 +1086,13 @@ static struct clk mpu_ck = {
>> >  };
>> >
>> >  /* arm_fck is divided by two when DPLL1 locked; otherwise,
> passthrough mpu_ck */
>> > -static const struct clksel_rate arm_fck_rates[] = {
>> > +static struct clksel_rate arm_fck_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel arm_fck_clksel[] = {
>> > +static struct clksel arm_fck_clksel[] = {
>> >  	{ .parent = &mpu_ck, .rates = arm_fck_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1145,7 +1145,7 @@ static struct clk iva2_ck = {
>> >
>> >  /* Common interface clocks */
>> >
>> > -static const struct clksel div2_core_clksel[] = {
>> > +static struct clksel div2_core_clksel[] = {
>> >  	{ .parent = &core_ck, .rates = div2_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1162,7 +1162,7 @@ static struct clk l3_ick = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel div2_l3_clksel[] = {
>> > +static struct clksel div2_l3_clksel[] = {
>> >  	{ .parent = &l3_ick, .rates = div2_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1180,7 +1180,7 @@ static struct clk l4_ick = {
>> >
>> >  };
>> >
>> > -static const struct clksel div2_l4_clksel[] = {
>> > +static struct clksel div2_l4_clksel[] = {
>> >  	{ .parent = &l4_ick, .rates = div2_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1200,7 +1200,7 @@ static struct clk rm_ick = {
>> >
>> >  /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX
> instead */
>> >
>> > -static const struct clksel gfx_l3_clksel[] = {
>> > +static struct clksel gfx_l3_clksel[] = {
>> >  	{ .parent = &l3_ick, .rates = gfx_l3_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -1257,7 +1257,7 @@ static struct clk gfx_cg2_ck = {
>> >
>> >  /* SGX power domain - 3430ES2 only */
>> >
>> > -static const struct clksel_rate sgx_core_rates[] = {
>> > +static struct clksel_rate sgx_core_rates[] = {
>> >  	{ .div = 2, .val = 5, .flags = RATE_IN_36XX },
>> >  	{ .div = 3, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4, .val = 1, .flags = RATE_IN_3XXX },
>> > @@ -1265,23 +1265,23 @@ static const struct clksel_rate
> sgx_core_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate sgx_192m_rates[] = {
>> > +static struct clksel_rate sgx_192m_rates[] = {
>> >  	{ .div = 1,  .val = 4, .flags = RATE_IN_36XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate sgx_corex2_rates[] = {
>> > +static struct clksel_rate sgx_corex2_rates[] = {
>> >  	{ .div = 3, .val = 6, .flags = RATE_IN_36XX },
>> >  	{ .div = 5, .val = 7, .flags = RATE_IN_36XX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate sgx_96m_rates[] = {
>> > +static struct clksel_rate sgx_96m_rates[] = {
>> >  	{ .div = 1,  .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel sgx_clksel[] = {
>> > +static struct clksel sgx_clksel[] = {
>> >  	{ .parent = &core_ck,	 .rates = sgx_core_rates },
>> >  	{ .parent = &cm_96m_fck, .rates = sgx_96m_rates },
>> >  	{ .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates },
>> > @@ -1356,7 +1356,7 @@ static struct clk mad2d_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel omap343x_gpt_clksel[] = {
>> > +static struct clksel omap343x_gpt_clksel[] = {
>> >  	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
>> >  	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
>> >  	{ .parent = NULL}
>> > @@ -1501,17 +1501,17 @@ static struct clk i2c1_fck = {
>> >   * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
>> >   * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
>> >   */
>> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
>> > +static struct clksel_rate common_mcbsp_96m_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel mcbsp_15_clksel[] = {
>> > +static struct clksel mcbsp_15_clksel[] = {
>> >  	{ .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
>> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>> >  	{ .parent = NULL }
>> > @@ -1643,7 +1643,7 @@ static struct clk hdq_fck = {
>> >
>> >  /* DPLL3-derived clock */
>> >
>> > -static const struct clksel_rate ssi_ssr_corex2_rates[] = {
>> > +static struct clksel_rate ssi_ssr_corex2_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>> > @@ -1653,7 +1653,7 @@ static const struct clksel_rate
> ssi_ssr_corex2_rates[] = {
>> >  	{ .div = 0 }
>> >  };
>> >
>> > -static const struct clksel ssi_ssr_clksel[] = {
>> > +static struct clksel ssi_ssr_clksel[] = {
>> >  	{ .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
>> >  	{ .parent = NULL }
>> >  };
>> > @@ -2078,7 +2078,7 @@ static struct clk ssi_ick_3430es2 = {
>> >  /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
>> >   * but l4_ick makes more sense to me */
>> >
>> > -static const struct clksel usb_l4_clksel[] = {
>> > +static struct clksel usb_l4_clksel[] = {
>> >  	{ .parent = &l4_ick, .rates = div2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2282,7 +2282,7 @@ static struct clk usbhost_ick = {
>> >
>> >  /* WKUP */
>> >
>> > -static const struct clksel_rate usim_96m_rates[] = {
>> > +static struct clksel_rate usim_96m_rates[] = {
>> >  	{ .div = 2,  .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4,  .val = 4, .flags = RATE_IN_3XXX },
>> >  	{ .div = 8,  .val = 5, .flags = RATE_IN_3XXX },
>> > @@ -2290,7 +2290,7 @@ static const struct clksel_rate usim_96m_rates[]
> = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate usim_120m_rates[] = {
>> > +static struct clksel_rate usim_120m_rates[] = {
>> >  	{ .div = 4,  .val = 7,	.flags = RATE_IN_3XXX },
>> >  	{ .div = 8,  .val = 8,	.flags = RATE_IN_3XXX },
>> >  	{ .div = 16, .val = 9,	.flags = RATE_IN_3XXX },
>> > @@ -2298,7 +2298,7 @@ static const struct clksel_rate
> usim_120m_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel usim_clksel[] = {
>> > +static struct clksel usim_clksel[] = {
>> >  	{ .parent = &omap_96m_fck,	.rates = usim_96m_rates },
>> >  	{ .parent = &dpll5_m2_ck,	.rates = usim_120m_rates },
>> >  	{ .parent = &sys_ck,		.rates = div2_rates },
>> > @@ -2851,7 +2851,7 @@ static struct clk mcbsp4_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel mcbsp_234_clksel[] = {
>> > +static struct clksel mcbsp_234_clksel[] = {
>> >  	{ .parent = &per_96m_fck,  .rates = common_mcbsp_96m_rates },
>> >  	{ .parent = &mcbsp_clks,   .rates = common_mcbsp_mcbsp_rates },
>> >  	{ .parent = NULL }
>> > @@ -2900,27 +2900,27 @@ static struct clk mcbsp4_fck = {
>> >
>> >  /* More information: ARM Cortex-A8 Technical Reference Manual, sect
> 10.1 */
>> >
>> > -static const struct clksel_rate emu_src_sys_rates[] = {
>> > +static struct clksel_rate emu_src_sys_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate emu_src_core_rates[] = {
>> > +static struct clksel_rate emu_src_core_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate emu_src_per_rates[] = {
>> > +static struct clksel_rate emu_src_per_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate emu_src_mpu_rates[] = {
>> > +static struct clksel_rate emu_src_mpu_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel emu_src_clksel[] = {
>> > +static struct clksel emu_src_clksel[] = {
>> >  	{ .parent = &sys_ck,		.rates = emu_src_sys_rates },
>> >  	{ .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
>> >  	{ .parent = &emu_per_alwon_ck,	.rates = emu_src_per_rates },
>> > @@ -2944,7 +2944,7 @@ static struct clk emu_src_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate pclk_emu_rates[] = {
>> > +static struct clksel_rate pclk_emu_rates[] = {
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
>> > @@ -2952,7 +2952,7 @@ static const struct clksel_rate pclk_emu_rates[]
> = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel pclk_emu_clksel[] = {
>> > +static struct clksel pclk_emu_clksel[] = {
>> >  	{ .parent = &emu_src_ck, .rates = pclk_emu_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2968,14 +2968,14 @@ static struct clk pclk_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate pclkx2_emu_rates[] = {
>> > +static struct clksel_rate pclkx2_emu_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel pclkx2_emu_clksel[] = {
>> > +static struct clksel pclkx2_emu_clksel[] = {
>> >  	{ .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2991,7 +2991,7 @@ static struct clk pclkx2_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel atclk_emu_clksel[] = {
>> > +static struct clksel atclk_emu_clksel[] = {
>> >  	{ .parent = &emu_src_ck, .rates = div2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -3018,14 +3018,14 @@ static struct clk traceclk_src_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate traceclk_rates[] = {
>> > +static struct clksel_rate traceclk_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
>> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel traceclk_clksel[] = {
>> > +static struct clksel traceclk_clksel[] = {
>> >  	{ .parent = &traceclk_src_fck, .rates = traceclk_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > diff --git a/arch/arm/mach-omap2/clock44xx_data.c
> b/arch/arm/mach-omap2/clock44xx_data.c
>> > index e8cb32f..b02bfae 100644
>> > --- a/arch/arm/mach-omap2/clock44xx_data.c
>> > +++ b/arch/arm/mach-omap2/clock44xx_data.c
>> > @@ -127,47 +127,47 @@ static struct clk virt_38400000_ck = {
>> >  	.rate		= 38400000,
>> >  };
>> >
>> > -static const struct clksel_rate div_1_0_rates[] = {
>> > +static struct clksel_rate div_1_0_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_1_rates[] = {
>> > +static struct clksel_rate div_1_1_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_2_rates[] = {
>> > +static struct clksel_rate div_1_2_rates[] = {
>> >  	{ .div = 1, .val = 2, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_3_rates[] = {
>> > +static struct clksel_rate div_1_3_rates[] = {
>> >  	{ .div = 1, .val = 3, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_4_rates[] = {
>> > +static struct clksel_rate div_1_4_rates[] = {
>> >  	{ .div = 1, .val = 4, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_5_rates[] = {
>> > +static struct clksel_rate div_1_5_rates[] = {
>> >  	{ .div = 1, .val = 5, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_6_rates[] = {
>> > +static struct clksel_rate div_1_6_rates[] = {
>> >  	{ .div = 1, .val = 6, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel_rate div_1_7_rates[] = {
>> > +static struct clksel_rate div_1_7_rates[] = {
>> >  	{ .div = 1, .val = 7, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel sys_clkin_sel[] = {
>> > +static struct clksel sys_clkin_sel[] = {
>> >  	{ .parent = &virt_12000000_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &virt_13000000_ck, .rates = div_1_2_rates },
>> >  	{ .parent = &virt_16800000_ck, .rates = div_1_3_rates },
>> > @@ -221,7 +221,7 @@ static struct clk xclk60motg_ck = {
>> >
>> >  /* Module clocks and DPLL outputs */
>> >
>> > -static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
>> > +static struct clksel abe_dpll_bypass_clk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -283,7 +283,7 @@ static struct clk dpll_abe_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div31_1to31_rates[] = {
>> > +static struct clksel_rate div31_1to31_rates[] = {
>> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 2, .val = 2, .flags = RATE_IN_4430 },
>> >  	{ .div = 3, .val = 3, .flags = RATE_IN_4430 },
>> > @@ -318,7 +318,7 @@ static const struct clksel_rate
> div31_1to31_rates[] = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel dpll_abe_m2x2_div[] = {
>> > +static struct clksel dpll_abe_m2x2_div[] = {
>> >  	{ .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -343,14 +343,14 @@ static struct clk abe_24m_fclk = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div3_1to4_rates[] = {
>> > +static struct clksel_rate div3_1to4_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel abe_clk_div[] = {
>> > +static struct clksel abe_clk_div[] = {
>> >  	{ .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -367,13 +367,13 @@ static struct clk abe_clk = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel_rate div2_1to2_rates[] = {
>> > +static struct clksel_rate div2_1to2_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel aess_fclk_div[] = {
>> > +static struct clksel aess_fclk_div[] = {
>> >  	{ .parent = &abe_clk, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -402,7 +402,7 @@ static struct clk dpll_abe_m3x2_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel core_hsd_byp_clk_mux_sel[] = {
>> > +static struct clksel core_hsd_byp_clk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -455,7 +455,7 @@ static struct clk dpll_core_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_core_m6x2_div[] = {
>> > +static struct clksel dpll_core_m6x2_div[] = {
>> >  	{ .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -472,7 +472,7 @@ static struct clk dpll_core_m6x2_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel dbgclk_mux_sel[] = {
>> > +static struct clksel dbgclk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -485,7 +485,7 @@ static struct clk dbgclk_mux_ck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_core_m2_div[] = {
>> > +static struct clksel dpll_core_m2_div[] = {
>> >  	{ .parent = &dpll_core_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -522,7 +522,7 @@ static struct clk dpll_core_m5x2_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel div_core_div[] = {
>> > +static struct clksel div_core_div[] = {
>> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -539,7 +539,7 @@ static struct clk div_core_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel_rate div4_1to8_rates[] = {
>> > +static struct clksel_rate div4_1to8_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
>> > @@ -547,7 +547,7 @@ static const struct clksel_rate div4_1to8_rates[]
> = {
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel div_iva_hs_clk_div[] = {
>> > +static struct clksel div_iva_hs_clk_div[] = {
>> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -596,7 +596,7 @@ static struct clk dll_clk_div_ck = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_abe_m2_div[] = {
>> > +static struct clksel dpll_abe_m2_div[] = {
>> >  	{ .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -639,7 +639,7 @@ static struct clk dpll_core_m7x2_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
>> > +static struct clksel iva_hsd_byp_clk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -694,7 +694,7 @@ static struct clk dpll_iva_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_iva_m4x2_div[] = {
>> > +static struct clksel dpll_iva_m4x2_div[] = {
>> >  	{ .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -754,7 +754,7 @@ static struct clk dpll_mpu_ck = {
>> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
>> >  };
>> >
>> > -static const struct clksel dpll_mpu_m2_div[] = {
>> > +static struct clksel dpll_mpu_m2_div[] = {
>> >  	{ .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -779,7 +779,7 @@ static struct clk per_hs_clk_div_ck = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel per_hsd_byp_clk_mux_sel[] = {
>> > +static struct clksel per_hsd_byp_clk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -827,7 +827,7 @@ static struct clk dpll_per_ck = {
>> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
>> >  };
>> >
>> > -static const struct clksel dpll_per_m2_div[] = {
>> > +static struct clksel dpll_per_m2_div[] = {
>> >  	{ .parent = &dpll_per_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -851,7 +851,7 @@ static struct clk dpll_per_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_per_m2x2_div[] = {
>> > +static struct clksel dpll_per_m2x2_div[] = {
>> >  	{ .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -969,7 +969,7 @@ static struct clk dpll_unipro_x2_ck = {
>> >  	.recalc		= &omap3_clkoutx2_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_unipro_m2x2_div[] = {
>> > +static struct clksel dpll_unipro_m2x2_div[] = {
>> >  	{ .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1033,7 +1033,7 @@ static struct clk dpll_usb_clkdcoldo_ck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel dpll_usb_m2_div[] = {
>> > +static struct clksel dpll_usb_m2_div[] = {
>> >  	{ .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1050,7 +1050,7 @@ static struct clk dpll_usb_m2_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel ducati_clk_mux_sel[] = {
>> > +static struct clksel ducati_clk_mux_sel[] = {
>> >  	{ .parent = &div_core_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -1091,13 +1091,13 @@ static struct clk func_24mc_fclk = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div2_4to8_rates[] = {
>> > +static struct clksel_rate div2_4to8_rates[] = {
>> >  	{ .div = 4, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_48m_fclk_div[] = {
>> > +static struct clksel func_48m_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1122,13 +1122,13 @@ static struct clk func_48mc_fclk = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div2_2to4_rates[] = {
>> > +static struct clksel_rate div2_2to4_rates[] = {
>> >  	{ .div = 2, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 4, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel func_64m_fclk_div[] = {
>> > +static struct clksel func_64m_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1145,7 +1145,7 @@ static struct clk func_64m_fclk = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel func_96m_fclk_div[] = {
>> > +static struct clksel func_96m_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1162,7 +1162,7 @@ static struct clk func_96m_fclk = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel hsmmc6_fclk_sel[] = {
>> > +static struct clksel hsmmc6_fclk_sel[] = {
>> >  	{ .parent = &func_64m_fclk, .rates = div_1_0_rates },
>> >  	{ .parent = &func_96m_fclk, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -1175,13 +1175,13 @@ static struct clk hsmmc6_fclk = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div2_1to8_rates[] = {
>> > +static struct clksel_rate div2_1to8_rates[] = {
>> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel init_60m_fclk_div[] = {
>> > +static struct clksel init_60m_fclk_div[] = {
>> >  	{ .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1198,7 +1198,7 @@ static struct clk init_60m_fclk = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel l3_div_div[] = {
>> > +static struct clksel l3_div_div[] = {
>> >  	{ .parent = &div_core_ck, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1215,7 +1215,7 @@ static struct clk l3_div_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel l4_div_div[] = {
>> > +static struct clksel l4_div_div[] = {
>> >  	{ .parent = &l3_div_ck, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1240,7 +1240,7 @@ static struct clk lp_clk_div_ck = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel l4_wkup_clk_mux_sel[] = {
>> > +static struct clksel l4_wkup_clk_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -1257,7 +1257,7 @@ static struct clk l4_wkup_clk_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel per_abe_nc_fclk_div[] = {
>> > +static struct clksel per_abe_nc_fclk_div[] = {
>> >  	{ .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1274,7 +1274,7 @@ static struct clk per_abe_nc_fclk = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel mcasp2_fclk_sel[] = {
>> > +static struct clksel mcasp2_fclk_sel[] = {
>> >  	{ .parent = &func_96m_fclk, .rates = div_1_0_rates },
>> >  	{ .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -1309,7 +1309,7 @@ static struct clk per_abe_24m_fclk = {
>> >  	.recalc		= &omap_fixed_divisor_recalc,
>> >  };
>> >
>> > -static const struct clksel pmd_stm_clock_mux_sel[] = {
>> > +static struct clksel pmd_stm_clock_mux_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
>> > @@ -1330,7 +1330,7 @@ static struct clk pmd_trace_clk_mux_ck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel syc_clk_div_div[] = {
>> > +static struct clksel syc_clk_div_div[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1399,7 +1399,7 @@ static struct clk des3des_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel dmic_sync_mux_sel[] = {
>> > +static struct clksel dmic_sync_mux_sel[] = {
>> >  	{ .parent = &abe_24m_fclk, .rates = div_1_0_rates },
>> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &func_24m_clk, .rates = div_1_2_rates },
>> > @@ -1417,7 +1417,7 @@ static struct clk dmic_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel func_dmic_abe_gfclk_sel[] = {
>> > +static struct clksel func_dmic_abe_gfclk_sel[] = {
>> >  	{ .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
>> > @@ -1531,7 +1531,7 @@ static struct clk emif2_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel fdif_fclk_div[] = {
>> > +static struct clksel fdif_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1692,7 +1692,7 @@ static struct clk gpmc_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel sgx_clk_mux_sel[] = {
>> > +static struct clksel sgx_clk_mux_sel[] = {
>> >  	{ .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -1723,7 +1723,7 @@ static struct clk hdq1w_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel hsi_fclk_div[] = {
>> > +static struct clksel hsi_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -1867,7 +1867,7 @@ static struct clk mcasp_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel func_mcasp_abe_gfclk_sel[] = {
>> > +static struct clksel func_mcasp_abe_gfclk_sel[] = {
>> >  	{ .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
>> > @@ -1900,7 +1900,7 @@ static struct clk mcbsp1_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel func_mcbsp1_gfclk_sel[] = {
>> > +static struct clksel func_mcbsp1_gfclk_sel[] = {
>> >  	{ .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
>> > @@ -1933,7 +1933,7 @@ static struct clk mcbsp2_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel func_mcbsp2_gfclk_sel[] = {
>> > +static struct clksel func_mcbsp2_gfclk_sel[] = {
>> >  	{ .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
>> > @@ -1966,7 +1966,7 @@ static struct clk mcbsp3_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel func_mcbsp3_gfclk_sel[] = {
>> > +static struct clksel func_mcbsp3_gfclk_sel[] = {
>> >  	{ .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
>> > @@ -1999,7 +1999,7 @@ static struct clk mcbsp4_sync_mux_ck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > -static const struct clksel per_mcbsp4_gfclk_sel[] = {
>> > +static struct clksel per_mcbsp4_gfclk_sel[] = {
>> >  	{ .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -2401,7 +2401,7 @@ static struct clk timer4_fck = {
>> >  	.clkdm_name	= "l4_per_clkdm",
>> >  };
>> >
>> > -static const struct clksel timer5_sync_mux_sel[] = {
>> > +static struct clksel timer5_sync_mux_sel[] = {
>> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -2532,7 +2532,7 @@ static struct clk usb_host_fs_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel utmi_p1_gfclk_sel[] = {
>> > +static struct clksel utmi_p1_gfclk_sel[] = {
>> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
>> >  	{ .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -2559,7 +2559,7 @@ static struct clk usb_host_hs_utmi_p1_clk = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel utmi_p2_gfclk_sel[] = {
>> > +static struct clksel utmi_p2_gfclk_sel[] = {
>> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
>> >  	{ .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -2656,7 +2656,7 @@ static struct clk usb_host_hs_fck = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel otg_60m_gfclk_sel[] = {
>> > +static struct clksel otg_60m_gfclk_sel[] = {
>> >  	{ .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &xclk60motg_ck, .rates = div_1_1_rates },
>> >  	{ .parent = NULL },
>> > @@ -2743,13 +2743,13 @@ static struct clk usb_tll_hs_ick = {
>> >  	.recalc		= &followparent_recalc,
>> >  };
>> >
>> > -static const struct clksel_rate div2_14to18_rates[] = {
>> > +static struct clksel_rate div2_14to18_rates[] = {
>> >  	{ .div = 14, .val = 0, .flags = RATE_IN_4430 },
>> >  	{ .div = 18, .val = 1, .flags = RATE_IN_4430 },
>> >  	{ .div = 0 },
>> >  };
>> >
>> > -static const struct clksel usim_fclk_div[] = {
>> > +static struct clksel usim_fclk_div[] = {
>> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2807,7 +2807,7 @@ static struct clk wd_timer3_fck = {
>> >  };
>> >
>> >  /* Remaining optional clocks */
>> > -static const struct clksel stm_clk_div_div[] = {
>> > +static struct clksel stm_clk_div_div[] = {
>> >  	{ .parent = &pmd_stm_clock_mux_ck, .rates = div3_1to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2824,7 +2824,7 @@ static struct clk stm_clk_div_ck = {
>> >  	.set_rate	= &omap2_clksel_set_rate,
>> >  };
>> >
>> > -static const struct clksel trace_clk_div_div[] = {
>> > +static struct clksel trace_clk_div_div[] = {
>> >  	{ .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
>> >  	{ .parent = NULL },
>> >  };
>> > @@ -2843,7 +2843,7 @@ static struct clk trace_clk_div_ck = {
>> >
>> >  /* SCRM aux clk nodes */
>> >
>> > -static const struct clksel auxclk_sel[] = {
>> > +static struct clksel auxclk_sel[] = {
>> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
>> > @@ -2927,7 +2927,7 @@ static struct clk auxclk5_ck = {
>> >  	.enable_bit	= OMAP4_ENABLE_SHIFT,
>> >  };
>> >
>> > -static const struct clksel auxclkreq_sel[] = {
>> > +static struct clksel auxclkreq_sel[] = {
>> >  	{ .parent = &auxclk0_ck, .rates = div_1_0_rates },
>> >  	{ .parent = &auxclk1_ck, .rates = div_1_1_rates },
>> >  	{ .parent = &auxclk2_ck, .rates = div_1_2_rates },
>> > diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
>> > index fc62fb5..9bfd193 100644
>> > --- a/arch/arm/plat-omap/clock.c
>> > +++ b/arch/arm/plat-omap/clock.c
>> > @@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
>> >  	}
>> >  }
>> >
>> > +static struct clk *_omap_clk_get_by_name(const char *name)
>> > +{
>> > +	struct clk *c;
>> > +
>> > +	list_for_each_entry(c, &clocks, node)
>> > +		if (!strcmp(c->name, name))
>> > +			return c;
>> > +	return NULL;
>> > +}
>> > +
>> >  /**
>> >   * omap_clk_get_by_name - locate OMAP struct clk by its name
>> >   * @name: name of the struct clk to locate
>> > @@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
>> >   */
>> >  struct clk *omap_clk_get_by_name(const char *name)
>> >  {
>> > -	struct clk *c;
>> >  	struct clk *ret = NULL;
>> >
>> >  	mutex_lock(&clocks_mutex);
>> > +	ret = _omap_clk_get_by_name(name);
>> > +	mutex_unlock(&clocks_mutex);
>> > +
>> > +	return ret;
>> > +}
>> > +
>> > +static inline void omap_init_dpll_data_clk_pts(struct dpll_data *dd)
>> > +{
>> > +	if (!dd->clk_ref && dd->clk_ref_name)
>> > +		dd->clk_ref = _omap_clk_get_by_name(dd->clk_ref_name);
>> > +	if (!dd->clk_bypass && dd->clk_bypass_name)
>> > +		dd->clk_bypass =
> _omap_clk_get_by_name(dd->clk_bypass_name);
>> > +}
>> > +
>> > +static inline void omap_init_clksel_clk_pts(struct clksel *clks)
>> > +{
>> > +	if (!clks->parent && clks->parent_name)
>> > +		clks->parent = _omap_clk_get_by_name(clks->parent_name);
>> > +}
>> > +
>> > +void omap_init_clk_pts(void)
>> > +{
>> > +	struct clk *c;
>> > +
>> > +	mutex_lock(&clocks_mutex);
>> >
>> >  	list_for_each_entry(c, &clocks, node) {
>> > -		if (!strcmp(c->name, name)) {
>> > -			ret = c;
>> > -			break;
>> > -		}
>> > +		if (!c->parent && c->parent_name)
>> > +			c->parent = _omap_clk_get_by_name(c->parent_name);
>> > +		if (c->dpll_data)
>> > +			omap_init_dpll_data_clk_pts(c->dpll_data);
>> > +		if (c->clksel)
>> > +			omap_init_clksel_clk_pts(c->clksel);
>> >  	}
>> >
>> >  	mutex_unlock(&clocks_mutex);
>> > -
>> > -	return ret;
>> >  }
>> >
>> >  /*
>> > diff --git a/arch/arm/plat-omap/include/plat/clock.h
> b/arch/arm/plat-omap/include/plat/clock.h
>> > index 8eb0ada..dc0d9fd 100644
>> > --- a/arch/arm/plat-omap/include/plat/clock.h
>> > +++ b/arch/arm/plat-omap/include/plat/clock.h
>> > @@ -85,6 +85,7 @@ struct clksel_rate {
>> >  /**
>> >   * struct clksel - available parent clocks, and a pointer to their
> divisors
>> >   * @parent: struct clk * to a possible parent clock
>> > + * @parent_name: Name of the possible parent clock
>> >   * @rates: available divisors for this parent clock
>> >   *
>> >   * A struct clksel is always associated with one or more struct clks
>> > @@ -92,6 +93,7 @@ struct clksel_rate {
>> >   */
>> >  struct clksel {
>> >  	struct clk		 *parent;
>> > +	const char		 *parent_name;
>> >  	const struct clksel_rate *rates;
>> >  };
>> >
>> > @@ -101,7 +103,9 @@ struct clksel {
>> >   * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
>> >   * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
>> >   * @clk_bypass: struct clk pointer to the clock's bypass clock input
>> > + * @clk_bypass_name: Name of the clock's bypass clock input
>> >   * @clk_ref: struct clk pointer to the clock's reference clock input
>> > + * @clk_ref_name: Name of the clock's reference clock input
>> >   * @control_reg: register containing the DPLL mode bitfield
>> >   * @enable_mask: mask of the DPLL mode bitfield in @control_reg
>> >   * @rate_tolerance: maximum variance allowed from target rate (in Hz)
>> > @@ -143,7 +147,9 @@ struct dpll_data {
>> >  	u32			mult_mask;
>> >  	u32			div1_mask;
>> >  	struct clk		*clk_bypass;
>> > +	const char		*clk_bypass_name;
>> >  	struct clk		*clk_ref;
>> > +	const char		*clk_ref_name;
>> >  	void __iomem		*control_reg;
>> >  	u32			enable_mask;
>> >  	unsigned int		rate_tolerance;
>> > @@ -230,6 +236,7 @@ struct clk {
>> >  	const struct clkops	*ops;
>> >  	const char		*name;
>> >  	struct clk		*parent;
>> > +	const char		*parent_name;
>> >  	struct list_head	children;
>> >  	struct list_head	sibling;	/* node for children */
>> >  	unsigned long		rate;
>> > @@ -245,7 +252,7 @@ struct clk {
>> >  #ifdef CONFIG_ARCH_OMAP2PLUS
>> >  	void __iomem		*clksel_reg;
>> >  	u32			clksel_mask;
>> > -	const struct clksel	*clksel;
>> > +	struct clksel		*clksel;
>> >  	struct dpll_data	*dpll_data;
>> >  	const char		*clkdm_name;
>> >  	struct clockdomain	*clkdm;
>> > @@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct
> cpufreq_frequency_table **table);
>> >  extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table
> **table);
>> >  #endif
>> >  extern struct clk *omap_clk_get_by_name(const char *name);
>> > -
>> > +extern void omap_init_clk_pts(void);
>> >  extern const struct clkops clkops_null;
>> >
>> >  extern struct clk dummy_ck;

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS
  2011-01-25  7:24       ` Rajendra Nayak
@ 2011-01-25 15:58         ` Kevin Hilman
  2011-01-27  2:43           ` Rajendra Nayak
  0 siblings, 1 reply; 17+ messages in thread
From: Kevin Hilman @ 2011-01-25 15:58 UTC (permalink / raw)
  To: Rajendra Nayak; +Cc: linux-omap, paul

Rajendra Nayak <rnayak@ti.com> writes:

> Hi Kevin,
>
>> -----Original Message-----
>> From: Kevin Hilman [mailto:khilman@ti.com]
>> Sent: Tuesday, January 25, 2011 3:39 AM
>> To: Rajendra Nayak
>> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
>> Subject: Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on
> 3430ES2PLUS
>>
>> Rajendra Nayak <rnayak@ti.com> writes:
>>
>> > The IVA2_CLK_SRC and MPU_CLK_SRC for OMAP3430 ES2
>> > and above are 3 bit fields.
>> > Define new masks for them, and since they are used
>> > in a couple of clock nodes, model separate clock
>> > nodes for 3430ES1 and 3430ES2+.
>>
>> This part should probably be separated out as a fix for the -rc cycle.
>
> The reason I clubbed this fix here was because it had a dependency on the
> 'reference by name' approach added by the previous patch.
>
> Else I was looking at creating too many duplicate nodes, since the clock
> nodes which get added in this patch (dpll1_fck_3430es2/dpll2_fck_3430es2)
> are part of dpll_data.

OK, thanks for the clarifiation.  Might help to add that bit of
description in the changelog, or after the '---' for the sake of
reviewers.

Thanks,

Kevin

>>
>> Kevin
>>
>> > Also change reference to these new clock nodes
>> > from clk pointers to clk name and make a call
>> > to omap_init_clk_pts to init the pointers at
>> > run time.
>> >
>> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
>> > ---
>> >  arch/arm/mach-omap2/clock3xxx_data.c  |   39
> ++++++++++++++++++++++++++------
>> >  arch/arm/mach-omap2/cm-regbits-34xx.h |    2 +
>> >  2 files changed, 33 insertions(+), 8 deletions(-)
>> >
>> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
> b/arch/arm/mach-omap2/clock3xxx_data.c
>> > index 9c87adb..c3a7ff5 100644
>> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
>> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
>> > @@ -53,10 +53,6 @@
>> >   * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
>> >   */
>> >
>> > -/* Forward declarations for DPLL bypass clocks */
>> > -static struct clk dpll1_fck;
>> > -static struct clk dpll2_fck;
>> > -
>> >  /* PRM CLOCKS */
>> >
>> >  /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz
> clock. */
>> > @@ -275,7 +271,7 @@ static struct dpll_data dpll1_dd = {
>> >  	.mult_div1_reg	= OMAP_CM_REGADDR(MPU_MOD,
> OMAP3430_CM_CLKSEL1_PLL),
>> >  	.mult_mask	= OMAP3430_MPU_DPLL_MULT_MASK,
>> >  	.div1_mask	= OMAP3430_MPU_DPLL_DIV_MASK,
>> > -	.clk_bypass	= &dpll1_fck,
>> > +	.clk_bypass_name	= "dpll1_fck",
>> >  	.clk_ref	= &sys_ck,
>> >  	.freqsel_mask	= OMAP3430_MPU_DPLL_FREQSEL_MASK,
>> >  	.control_reg	= OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
>> > @@ -347,7 +343,7 @@ static struct dpll_data dpll2_dd = {
>> >  	.mult_div1_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> OMAP3430_CM_CLKSEL1_PLL),
>> >  	.mult_mask	= OMAP3430_IVA2_DPLL_MULT_MASK,
>> >  	.div1_mask	= OMAP3430_IVA2_DPLL_DIV_MASK,
>> > -	.clk_bypass	= &dpll2_fck,
>> > +	.clk_bypass_name	= "dpll2_fck",
>> >  	.clk_ref	= &sys_ck,
>> >  	.freqsel_mask	= OMAP3430_IVA2_DPLL_FREQSEL_MASK,
>> >  	.control_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> OMAP3430_CM_CLKEN_PLL),
>> > @@ -1077,6 +1073,17 @@ static struct clk dpll1_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > +static struct clk dpll1_fck_3430es2 = {
>> > +	.name		= "dpll1_fck",
>> > +	.ops		= &clkops_null,
>> > +	.parent		= &core_ck,
>> > +	.init		= &omap2_init_clksel_parent,
>> > +	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD,
> OMAP3430_CM_CLKSEL1_PLL),
>> > +	.clksel_mask	= OMAP3430ES2_MPU_CLK_SRC_MASK,
>> > +	.clksel		= div4_core_clksel,
>> > +	.recalc		= &omap2_clksel_recalc,
>> > +};
>> > +
>> >  static struct clk mpu_ck = {
>> >  	.name		= "mpu_ck",
>> >  	.ops		= &clkops_null,
>> > @@ -1133,6 +1140,17 @@ static struct clk dpll2_fck = {
>> >  	.recalc		= &omap2_clksel_recalc,
>> >  };
>> >
>> > +static struct clk dpll2_fck_3430es2 = {
>> > +	.name		= "dpll2_fck",
>> > +	.ops		= &clkops_null,
>> > +	.parent		= &core_ck,
>> > +	.init		= &omap2_init_clksel_parent,
>> > +	.clksel_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> OMAP3430_CM_CLKSEL1_PLL),
>> > +	.clksel_mask	= OMAP3430ES2_IVA2_CLK_SRC_MASK,
>> > +	.clksel		= div4_core_clksel,
>> > +	.recalc		= &omap2_clksel_recalc,
>> > +};
>> > +
>> >  static struct clk iva2_ck = {
>> >  	.name		= "iva2_ck",
>> >  	.ops		= &clkops_omap2_dflt_wait,
>> > @@ -3261,11 +3279,13 @@ static struct omap_clk omap3xxx_clks[] = {
>> >  	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
>> >  	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX),
>> >  	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX),
>> > -	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX),
>> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3430ES1),
>> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck_3430es2,
> CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
>> >  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX),
>> >  	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX),
>> >  	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
>> > -	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX |
> CK_36XX),
>> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_3430ES1),
>> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck_3430es2,
> CK_3430ES2PLUS | CK_36XX),
>> >  	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX |
> CK_36XX),
>> >  	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX),
>> >  	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX),
>> > @@ -3535,6 +3555,9 @@ int __init omap3xxx_clk_init(void)
>> >  			omap2_init_clk_clkdm(c->lk.clk);
>> >  		}
>> >
>> > +	/* Initialise clk pointers for parent/ref/bypass clks */
>> > +	omap_init_clk_pts();
>> > +
>> >  	recalculate_root_clocks();
>> >
>> >  	pr_info("Clocking rate (Crystal/Core/MPU): %ld.%01ld/%ld/%ld
> MHz\n",
>> > diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h
> b/arch/arm/mach-omap2/cm-regbits-34xx.h
>> > index b912759..fd80872 100644
>> > --- a/arch/arm/mach-omap2/cm-regbits-34xx.h
>> > +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
>> > @@ -80,6 +80,7 @@
>> >  /* CM_CLKSEL1_PLL_IVA2 */
>> >  #define OMAP3430_IVA2_CLK_SRC_SHIFT			19
>> >  #define OMAP3430_IVA2_CLK_SRC_MASK			(0x3 << 19)
>> > +#define OMAP3430ES2_IVA2_CLK_SRC_MASK			(0x7 <<
> 19)
>> >  #define OMAP3430_IVA2_DPLL_MULT_SHIFT			8
>> >  #define OMAP3430_IVA2_DPLL_MULT_MASK			(0x7ff <<
> 8)
>> >  #define OMAP3430_IVA2_DPLL_DIV_SHIFT			0
>> > @@ -125,6 +126,7 @@
>> >  /* CM_CLKSEL1_PLL_MPU */
>> >  #define OMAP3430_MPU_CLK_SRC_SHIFT			19
>> >  #define OMAP3430_MPU_CLK_SRC_MASK			(0x3 << 19)
>> > +#define OMAP3430ES2_MPU_CLK_SRC_MASK			(0x7 <<
> 19)
>> >  #define OMAP3430_MPU_DPLL_MULT_SHIFT			8
>> >  #define OMAP3430_MPU_DPLL_MULT_MASK			(0x7ff <<
> 8)
>> >  #define OMAP3430_MPU_DPLL_DIV_SHIFT			0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers
  2011-01-25 15:57       ` Kevin Hilman
@ 2011-01-27  2:42         ` Rajendra Nayak
  0 siblings, 0 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-27  2:42 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, paul

Hi Kevin,

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@ti.com]
> Sent: Tuesday, January 25, 2011 9:28 PM
> To: Rajendra Nayak
> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
pointers
>
> Hi Rajendra,
>
> Rajendra Nayak <rnayak@ti.com> writes:
>
> >> -----Original Message-----
> >> From: Kevin Hilman [mailto:khilman@ti.com]
> >> Sent: Tuesday, January 25, 2011 3:38 AM
> >> To: Rajendra Nayak
> >> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> >> Subject: Re: [RFC 1/3] OMAP: clocks: Use clk names instead of clk
> > pointers
> >>
> >> Rajendra Nayak <rnayak@ti.com> writes:
> >>
> >> > There are various instances of clk pointers being
> >> > embedded within structures in the clock framework
> >> > to refer to clk parents, reference clocks, bypass
> >> > clocks etc.
> >> > The right way to reference these is by their name
> >> > and not by embedding direct pointers to these clks.
> >> >
> >> > Hence make provision to be able to provide clock
> >> > names to refer to parents and bypass/ref clks and
> >> > populate the clk pointers at runtime.
> >> >
> >> > This requires the const qualifier to be dropped for
> >> > struct clksel within struct clk and hence needs
> >> > clksel struct definitions to be changed in all
> >> > clock*_data.c files.
> >> >
> >> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
> >>
> >> I think the changelog needs a little more description about when the
> >> names are used instead of the pointers.  It looks like the names are
> >> only used at init time to select the right pointers, but the rest of
the
> >> framework continues to use pointers as before, right?  This isnt'
very
> >> clear from the changelog.
> >
> > Right, the basic idea was to prevent the binding of clk pointers at
> > compile time and instead do it at runtime. The rest of the code which
> > uses pointers would still go ahead and use them.
> > This is similar to what happens in other frameworks like hwmod
> > (which has the main_clk name populated and runtime maps to
> > the relevant clk pointer) or clock framework itself (to identify
> > the clockdomains associated with the clks)
> >
> > Also the patch leaves all the existing clk pointer associations at
> > compile time as is and only uses this reference by name for a
> > few nodes that get added in the later patches in the series.
> >
> > If the approach seems ok, then a patch to replace all the
> > existing pointer based referencing with the name based
> > referencing can also be pushed.
>
> The approach seems OK to me.  I just think the changelog needs to be a
> bit clearer since on first read, it sounded (to me) like names were
> going to replace pointers for more than just init time.

I will update the changelog with the additional details.

Thanks,
Rajendra

>
> Kevin
>
> > Regards,
> > Rajendra
> >
> >>
> >> Kevin
> >>
> >>
> >> > ---
> >> >  arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++++---------
> >> >  arch/arm/mach-omap2/clock2430_data.c    |   88
++++++++++----------
> >> >  arch/arm/mach-omap2/clock3xxx_data.c    |  144
> > +++++++++++++++---------------
> >> >  arch/arm/mach-omap2/clock44xx_data.c    |  136
> > +++++++++++++++---------------
> >> >  arch/arm/plat-omap/clock.c              |   48 +++++++++--
> >> >  arch/arm/plat-omap/include/plat/clock.h |   11 ++-
> >> >  6 files changed, 277 insertions(+), 236 deletions(-)
> >> >
> >> > diff --git a/arch/arm/mach-omap2/clock2420_data.c
> > b/arch/arm/mach-omap2/clock2420_data.c
> >> > index 0a992bc..5662e51 100644
> >> > --- a/arch/arm/mach-omap2/clock2420_data.c
> >> > +++ b/arch/arm/mach-omap2/clock2420_data.c
> >> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
> >> >
> >> >  /* func_54m_ck */
> >> >
> >> > -static const struct clksel_rate func_54m_apll54_rates[] = {
> >> > +static struct clksel_rate func_54m_apll54_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate func_54m_alt_rates[] = {
> >> > +static struct clksel_rate func_54m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_54m_clksel[] = {
> >> > +static struct clksel func_54m_clksel[] = {
> >> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
> >> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
> >> >  	{ .parent = NULL },
> >> > @@ -207,17 +207,17 @@ static struct clk func_96m_ck = {
> >> >
> >> >  /* func_48m_ck */
> >> >
> >> > -static const struct clksel_rate func_48m_apll96_rates[] = {
> >> > +static struct clksel_rate func_48m_apll96_rates[] = {
> >> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate func_48m_alt_rates[] = {
> >> > +static struct clksel_rate func_48m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_48m_clksel[] = {
> >> > +static struct clksel func_48m_clksel[] = {
> >> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
> >> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -262,27 +262,27 @@ static struct clk wdt1_osc_ck = {
> >> >   * 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[] = {
> >> > +static struct clksel_rate common_clkout_src_core_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel common_clkout_src_clksel[] = {
> >> > +static 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 },
> >> > @@ -306,7 +306,7 @@ static struct clk sys_clkout_src = {
> >> >  	.set_rate	= &omap2_clksel_set_rate
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_rates[] = {
> >> > +static struct clksel_rate common_clkout_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> >> > @@ -315,7 +315,7 @@ static const struct clksel_rate
> > common_clkout_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel sys_clkout_clksel[] = {
> >> > +static struct clksel sys_clkout_clksel[] = {
> >> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates
},
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -350,7 +350,7 @@ static struct clk sys_clkout2_src = {
> >> >  	.set_rate	= &omap2_clksel_set_rate
> >> >  };
> >> >
> >> > -static const struct clksel sys_clkout2_clksel[] = {
> >> > +static struct clksel sys_clkout2_clksel[] = {
> >> >  	{ .parent = &sys_clkout2_src, .rates = common_clkout_rates
},
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -390,7 +390,7 @@ static struct clk emul_ck = {
> >> >   * - Base divider comes from: CM_CLKSEL_MPU
> >> >   *
> >> >   */
> >> > -static const struct clksel_rate mpu_core_rates[] = {
> >> > +static struct clksel_rate mpu_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_242X },
> >> > @@ -399,7 +399,7 @@ static const struct clksel_rate
mpu_core_rates[] =
> > {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel mpu_clksel[] = {
> >> > +static struct clksel mpu_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -426,7 +426,7 @@ static struct clk mpu_ck = {	/* Control cpu */
> >> >   * controls. The other branch gets further divided by 2 then
possibly
> >> >   * routed into a synchronizer and out of clocks abc.
> >> >   */
> >> > -static const struct clksel_rate dsp_fck_core_rates[] = {
> >> > +static struct clksel_rate dsp_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 },
> >> > @@ -437,7 +437,7 @@ static const struct clksel_rate
> > dsp_fck_core_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel dsp_fck_clksel[] = {
> >> > +static struct clksel dsp_fck_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -456,13 +456,13 @@ static struct clk dsp_fck = {
> >> >  };
> >> >
> >> >  /* DSP interface clock */
> >> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
> >> > +static struct clksel_rate dsp_irate_ick_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel dsp_irate_ick_clksel[] = {
> >> > +static struct clksel dsp_irate_ick_clksel[] = {
> >> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -536,7 +536,7 @@ static struct clk iva1_mpu_int_ifck = {
> >> >   * may very well need notification when the clock changes.
Currently
> > for low
> >> >   * operating points, these are taken care of in sleep.S.
> >> >   */
> >> > -static const struct clksel_rate core_l3_core_rates[] = {
> >> > +static struct clksel_rate core_l3_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_242X },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >> > @@ -547,7 +547,7 @@ static const struct clksel_rate
> > core_l3_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel core_l3_clksel[] = {
> >> > +static struct clksel core_l3_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -564,14 +564,14 @@ static struct clk core_l3_ck = {	/* Used
> > for ick and fck, interconnect */
> >> >  };
> >> >
> >> >  /* usb_l4_ick */
> >> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel usb_l4_ick_clksel[] = {
> >> > +static struct clksel usb_l4_ick_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -597,13 +597,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
> > interface clock */
> >> >   * functional clocks.	Fixed APLL functional source clocks are
> > managed in
> >> >   * this domain.
> >> >   */
> >> > -static const struct clksel_rate l4_core_l3_rates[] = {
> >> > +static struct clksel_rate l4_core_l3_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel l4_clksel[] = {
> >> > +static struct clksel l4_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -627,7 +627,7 @@ static struct clk l4_ck = {		/* used
> > both as an ick and fck */
> >> >   *
> >> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
> >> >   */
> >> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> >> > +static struct clksel_rate ssi_ssr_sst_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 },
> >> > @@ -637,7 +637,7 @@ static const struct clksel_rate
> > ssi_ssr_sst_fck_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> >> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates
},
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -683,7 +683,7 @@ static struct clk ssi_l4_ick = {
> >> >   */
> >> >
> >> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck
*/
> >> > -static const struct clksel gfx_fck_clksel[] = {
> >> > +static struct clksel gfx_fck_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -736,12 +736,12 @@ static struct clk gfx_ick = {
> >> >   */
> >> >  /* XXX Add RATE_NOT_VALIDATED */
> >> >
> >> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
> >> > +static struct clksel_rate dss1_fck_sys_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss1_fck_core_rates[] = {
> >> > +static 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 },
> >> > @@ -755,7 +755,7 @@ static const struct clksel_rate
> > dss1_fck_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel dss1_fck_clksel[] = {
> >> > +static struct clksel dss1_fck_clksel[] = {
> >> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
> >> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -785,17 +785,17 @@ static struct clk dss1_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
> >> > +static struct clksel_rate dss2_fck_sys_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
> >> > +static struct clksel_rate dss2_fck_48m_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel dss2_fck_clksel[] = {
> >> > +static struct clksel dss2_fck_clksel[] = {
> >> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
> >> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -831,12 +831,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
> > used in power management */
> >> >   * here will likely have an L4 interface parent, and may have
> > multiple
> >> >   * functional clock parents.
> >> >   */
> >> > -static const struct clksel_rate gpt_alt_rates[] = {
> >> > +static struct clksel_rate gpt_alt_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel omap24xx_gpt_clksel[] = {
> >> > +static 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 },
> >> > @@ -1142,17 +1142,17 @@ static struct clk mcbsp1_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> >> > +static 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[] = {
> >> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel mcbsp_fck_clksel[] = {
> >> > +static struct clksel mcbsp_fck_clksel[] = {
> >> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates
},
> >> >  	{ .parent = &mcbsp_clks,   .rates =
common_mcbsp_mcbsp_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -1618,12 +1618,12 @@ static struct clk vlynq_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate vlynq_fck_96m_rates[] = {
> >> > +static struct clksel_rate vlynq_fck_96m_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_242X },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate vlynq_fck_core_rates[] = {
> >> > +static 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 },
> >> > @@ -1637,7 +1637,7 @@ static const struct clksel_rate
> > vlynq_fck_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel vlynq_fck_clksel[] = {
> >> > +static struct clksel vlynq_fck_clksel[] = {
> >> >  	{ .parent = &func_96m_ck, .rates = vlynq_fck_96m_rates },
> >> >  	{ .parent = &core_ck,	  .rates = vlynq_fck_core_rates },
> >> >  	{ .parent = NULL }
> >> > diff --git a/arch/arm/mach-omap2/clock2430_data.c
> > b/arch/arm/mach-omap2/clock2430_data.c
> >> > index c047dcd..6f08a57 100644
> >> > --- a/arch/arm/mach-omap2/clock2430_data.c
> >> > +++ b/arch/arm/mach-omap2/clock2430_data.c
> >> > @@ -161,17 +161,17 @@ static struct clk apll54_ck = {
> >> >
> >> >  /* func_54m_ck */
> >> >
> >> > -static const struct clksel_rate func_54m_apll54_rates[] = {
> >> > +static struct clksel_rate func_54m_apll54_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate func_54m_alt_rates[] = {
> >> > +static struct clksel_rate func_54m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_54m_clksel[] = {
> >> > +static struct clksel func_54m_clksel[] = {
> >> >  	{ .parent = &apll54_ck, .rates = func_54m_apll54_rates, },
> >> >  	{ .parent = &alt_ck,	.rates = func_54m_alt_rates, },
> >> >  	{ .parent = NULL },
> >> > @@ -198,17 +198,17 @@ static struct clk core_ck = {
> >> >  };
> >> >
> >> >  /* func_96m_ck */
> >> > -static const struct clksel_rate func_96m_apll96_rates[] = {
> >> > +static struct clksel_rate func_96m_apll96_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate func_96m_alt_rates[] = {
> >> > +static struct clksel_rate func_96m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_96m_clksel[] = {
> >> > +static struct clksel func_96m_clksel[] = {
> >> >  	{ .parent = &apll96_ck,	.rates = func_96m_apll96_rates },
> >> >  	{ .parent = &alt_ck,	.rates = func_96m_alt_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -228,17 +228,17 @@ static struct clk func_96m_ck = {
> >> >
> >> >  /* func_48m_ck */
> >> >
> >> > -static const struct clksel_rate func_48m_apll96_rates[] = {
> >> > +static struct clksel_rate func_48m_apll96_rates[] = {
> >> >  	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate func_48m_alt_rates[] = {
> >> > +static struct clksel_rate func_48m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_48m_clksel[] = {
> >> > +static struct clksel func_48m_clksel[] = {
> >> >  	{ .parent = &apll96_ck,	.rates = func_48m_apll96_rates },
> >> >  	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -283,27 +283,27 @@ static struct clk wdt1_osc_ck = {
> >> >   * 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[] = {
> >> > +static struct clksel_rate common_clkout_src_core_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_sys_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_sys_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_96m_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_96m_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_src_54m_rates[] = {
> >> > +static struct clksel_rate common_clkout_src_54m_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel common_clkout_src_clksel[] = {
> >> > +static 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 },
> >> > @@ -327,7 +327,7 @@ static struct clk sys_clkout_src = {
> >> >  	.set_rate	= &omap2_clksel_set_rate
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_clkout_rates[] = {
> >> > +static struct clksel_rate common_clkout_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 2, .flags = RATE_IN_24XX },
> >> > @@ -336,7 +336,7 @@ static const struct clksel_rate
> > common_clkout_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel sys_clkout_clksel[] = {
> >> > +static struct clksel sys_clkout_clksel[] = {
> >> >  	{ .parent = &sys_clkout_src, .rates = common_clkout_rates
},
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -375,13 +375,13 @@ static struct clk emul_ck = {
> >> >   * - Base divider comes from: CM_CLKSEL_MPU
> >> >   *
> >> >   */
> >> > -static const struct clksel_rate mpu_core_rates[] = {
> >> > +static struct clksel_rate mpu_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel mpu_clksel[] = {
> >> > +static struct clksel mpu_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = mpu_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -408,7 +408,7 @@ static struct clk mpu_ck = {	/* Control cpu */
> >> >   * controls. The other branch gets further divided by 2 then
possibly
> >> >   * routed into a synchronizer and out of clocks abc.
> >> >   */
> >> > -static const struct clksel_rate dsp_fck_core_rates[] = {
> >> > +static struct clksel_rate dsp_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 },
> >> > @@ -416,7 +416,7 @@ static const struct clksel_rate
> > dsp_fck_core_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel dsp_fck_clksel[] = {
> >> > +static struct clksel dsp_fck_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -435,14 +435,14 @@ static struct clk dsp_fck = {
> >> >  };
> >> >
> >> >  /* DSP interface clock */
> >> > -static const struct clksel_rate dsp_irate_ick_rates[] = {
> >> > +static struct clksel_rate dsp_irate_ick_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_243X },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel dsp_irate_ick_clksel[] = {
> >> > +static struct clksel dsp_irate_ick_clksel[] = {
> >> >  	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -486,14 +486,14 @@ static struct clk iva2_1_ick = {
> >> >   * may very well need notification when the clock changes.
Currently
> > for low
> >> >   * operating points, these are taken care of in sleep.S.
> >> >   */
> >> > -static const struct clksel_rate core_l3_core_rates[] = {
> >> > +static struct clksel_rate core_l3_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >> >  	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel core_l3_clksel[] = {
> >> > +static struct clksel core_l3_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = core_l3_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -510,14 +510,14 @@ static struct clk core_l3_ck = {	/* Used
> > for ick and fck, interconnect */
> >> >  };
> >> >
> >> >  /* usb_l4_ick */
> >> > -static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >> > +static struct clksel_rate usb_l4_ick_core_l3_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel usb_l4_ick_clksel[] = {
> >> > +static struct clksel usb_l4_ick_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -543,13 +543,13 @@ static struct clk usb_l4_ick = {	/* FS-USB
> > interface clock */
> >> >   * functional clocks.	Fixed APLL functional source clocks are
> > managed in
> >> >   * this domain.
> >> >   */
> >> > -static const struct clksel_rate l4_core_l3_rates[] = {
> >> > +static struct clksel_rate l4_core_l3_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel l4_clksel[] = {
> >> > +static struct clksel l4_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = l4_core_l3_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -573,7 +573,7 @@ static struct clk l4_ck = {		/* used
> > both as an ick and fck */
> >> >   *
> >> >   * ssr = core/1/2/3/4/5, sst = 1/2 ssr.
> >> >   */
> >> > -static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
> >> > +static struct clksel_rate ssi_ssr_sst_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 },
> >> > @@ -582,7 +582,7 @@ static const struct clksel_rate
> > ssi_ssr_sst_fck_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel ssi_ssr_sst_fck_clksel[] = {
> >> > +static struct clksel ssi_ssr_sst_fck_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates
},
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -628,7 +628,7 @@ static struct clk ssi_l4_ick = {
> >> >   */
> >> >
> >> >  /* This clksel struct is shared between gfx_3d_fck and gfx_2d_fck
*/
> >> > -static const struct clksel gfx_fck_clksel[] = {
> >> > +static struct clksel gfx_fck_clksel[] = {
> >> >  	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -678,7 +678,7 @@ static struct clk gfx_ick = {
> >> >   *		MDM_ICLK
> >> >   * These clocks are usable in chassis mode only.
> >> >   */
> >> > -static const struct clksel_rate mdm_ick_core_rates[] = {
> >> > +static struct clksel_rate mdm_ick_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
> >> >  	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
> >> > @@ -686,7 +686,7 @@ static const struct clksel_rate
> > mdm_ick_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel mdm_ick_clksel[] = {
> >> > +static struct clksel mdm_ick_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -724,12 +724,12 @@ static struct clk mdm_osc_ck = {
> >> >   */
> >> >  /* XXX Add RATE_NOT_VALIDATED */
> >> >
> >> > -static const struct clksel_rate dss1_fck_sys_rates[] = {
> >> > +static struct clksel_rate dss1_fck_sys_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss1_fck_core_rates[] = {
> >> > +static 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 },
> >> > @@ -743,7 +743,7 @@ static const struct clksel_rate
> > dss1_fck_core_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel dss1_fck_clksel[] = {
> >> > +static struct clksel dss1_fck_clksel[] = {
> >> >  	{ .parent = &sys_ck,  .rates = dss1_fck_sys_rates },
> >> >  	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -773,17 +773,17 @@ static struct clk dss1_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss2_fck_sys_rates[] = {
> >> > +static struct clksel_rate dss2_fck_sys_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate dss2_fck_48m_rates[] = {
> >> > +static struct clksel_rate dss2_fck_48m_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel dss2_fck_clksel[] = {
> >> > +static struct clksel dss2_fck_clksel[] = {
> >> >  	{ .parent = &sys_ck,	  .rates = dss2_fck_sys_rates },
> >> >  	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -819,12 +819,12 @@ static struct clk dss_54m_fck = {	/* Alt clk
> > used in power management */
> >> >   * here will likely have an L4 interface parent, and may have
> > multiple
> >> >   * functional clock parents.
> >> >   */
> >> > -static const struct clksel_rate gpt_alt_rates[] = {
> >> > +static struct clksel_rate gpt_alt_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel omap24xx_gpt_clksel[] = {
> >> > +static 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 },
> >> > @@ -1130,17 +1130,17 @@ static struct clk mcbsp1_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> >> > +static 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[] = {
> >> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel mcbsp_fck_clksel[] = {
> >> > +static struct clksel mcbsp_fck_clksel[] = {
> >> >  	{ .parent = &func_96m_ck,  .rates = common_mcbsp_96m_rates
},
> >> >  	{ .parent = &mcbsp_clks,   .rates =
common_mcbsp_mcbsp_rates },
> >> >  	{ .parent = NULL }
> >> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
> > b/arch/arm/mach-omap2/clock3xxx_data.c
> >> > index 403a4a1..9c87adb 100644
> >> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
> >> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> >> > @@ -109,37 +109,37 @@ static struct clk virt_38_4m_ck = {
> >> >  	.rate		= 38400000,
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_12m_rates[] = {
> >> > +static struct clksel_rate osc_sys_12m_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_13m_rates[] = {
> >> > +static struct clksel_rate osc_sys_13m_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_16_8m_rates[] = {
> >> > +static struct clksel_rate osc_sys_16_8m_rates[] = {
> >> >  	{ .div = 1, .val = 5, .flags = RATE_IN_3430ES2PLUS_36XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_19_2m_rates[] = {
> >> > +static struct clksel_rate osc_sys_19_2m_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_26m_rates[] = {
> >> > +static struct clksel_rate osc_sys_26m_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate osc_sys_38_4m_rates[] = {
> >> > +static struct clksel_rate osc_sys_38_4m_rates[] = {
> >> >  	{ .div = 1, .val = 4, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel osc_sys_clksel[] = {
> >> > +static struct clksel osc_sys_clksel[] = {
> >> >  	{ .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
> >> >  	{ .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
> >> >  	{ .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates
},
> >> > @@ -162,13 +162,13 @@ static struct clk osc_sys_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_rates[] = {
> >> > +static struct clksel_rate div2_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel sys_clksel[] = {
> >> > +static struct clksel sys_clksel[] = {
> >> >  	{ .parent = &osc_sys_ck, .rates = div2_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -212,7 +212,7 @@ static struct clk sys_clkout1 = {
> >> >
> >> >  /* CM CLOCKS */
> >> >
> >> > -static const struct clksel_rate div16_dpll_rates[] = {
> >> > +static struct clksel_rate div16_dpll_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >> > @@ -232,7 +232,7 @@ static const struct clksel_rate
div16_dpll_rates[]
> > = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate dpll4_rates[] = {
> >> > +static struct clksel_rate dpll4_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >> > @@ -318,7 +318,7 @@ static struct clk dpll1_x2_ck = {
> >> >  };
> >> >
> >> >  /* On DPLL1, unlike other DPLLs, the divider is downstream from
> > CLKOUTX2 */
> >> > -static const struct clksel div16_dpll1_x2m2_clksel[] = {
> >> > +static struct clksel div16_dpll1_x2m2_clksel[] = {
> >> >  	{ .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -378,7 +378,7 @@ static struct clk dpll2_ck = {
> >> >  	.recalc		= &omap3_dpll_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel div16_dpll2_m2x2_clksel[] = {
> >> > +static struct clksel div16_dpll2_m2x2_clksel[] = {
> >> >  	{ .parent = &dpll2_ck, .rates = div16_dpll_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -449,7 +449,7 @@ static struct clk dpll3_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div31_dpll3_rates[] = {
> >> > +static struct clksel_rate div31_dpll3_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3430ES2PLUS_36XX },
> >> > @@ -484,7 +484,7 @@ static const struct clksel_rate
> > div31_dpll3_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel div31_dpll3m2_clksel[] = {
> >> > +static struct clksel div31_dpll3m2_clksel[] = {
> >> >  	{ .parent = &dpll3_ck, .rates = div31_dpll3_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -520,7 +520,7 @@ static struct clk dpll3_m2x2_ck = {
> >> >  };
> >> >
> >> >  /* The PWRDN bit is apparently only available on 3430ES2 and above
*/
> >> > -static const struct clksel div16_dpll3_clksel[] = {
> >> > +static struct clksel div16_dpll3_clksel[] = {
> >> >  	{ .parent = &dpll3_ck, .rates = div16_dpll_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -635,7 +635,7 @@ static struct clk dpll4_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll4_clksel[] = {
> >> > +static struct clksel dpll4_clksel[] = {
> >> >  	{ .parent = &dpll4_ck, .rates = dpll4_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -680,23 +680,23 @@ static struct clk omap_192m_alwon_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_96m_alwon_fck_rates[] = {
> >> > +static struct clksel_rate omap_96m_alwon_fck_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_36XX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_36XX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel omap_96m_alwon_fck_clksel[] = {
> >> > +static struct clksel omap_96m_alwon_fck_clksel[] = {
> >> >  	{ .parent = &omap_192m_alwon_fck, .rates =
> > omap_96m_alwon_fck_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_96m_dpll_rates[] = {
> >> > +static struct clksel_rate omap_96m_dpll_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_96m_sys_rates[] = {
> >> > +static struct clksel_rate omap_96m_sys_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> > @@ -726,7 +726,7 @@ static struct clk cm_96m_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel omap_96m_fck_clksel[] = {
> >> > +static struct clksel omap_96m_fck_clksel[] = {
> >> >  	{ .parent = &cm_96m_fck, .rates = omap_96m_dpll_rates },
> >> >  	{ .parent = &sys_ck,	 .rates = omap_96m_sys_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -768,17 +768,17 @@ static struct clk dpll4_m3x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
> >> > +static struct clksel_rate omap_54m_d4m3x2_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_54m_alt_rates[] = {
> >> > +static struct clksel_rate omap_54m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel omap_54m_clksel[] = {
> >> > +static struct clksel omap_54m_clksel[] = {
> >> >  	{ .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates
},
> >> >  	{ .parent = &sys_altclk,    .rates = omap_54m_alt_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -794,17 +794,17 @@ static struct clk omap_54m_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_48m_cm96m_rates[] = {
> >> > +static struct clksel_rate omap_48m_cm96m_rates[] = {
> >> >  	{ .div = 2, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate omap_48m_alt_rates[] = {
> >> > +static struct clksel_rate omap_48m_alt_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel omap_48m_clksel[] = {
> >> > +static struct clksel omap_48m_clksel[] = {
> >> >  	{ .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
> >> >  	{ .parent = &sys_altclk, .rates = omap_48m_alt_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -953,7 +953,7 @@ static struct clk dpll5_ck = {
> >> >  	.recalc		= &omap3_dpll_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel div16_dpll5_clksel[] = {
> >> > +static struct clksel div16_dpll5_clksel[] = {
> >> >  	{ .parent = &dpll5_ck, .rates = div16_dpll_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -972,27 +972,27 @@ static struct clk dpll5_m2_ck = {
> >> >
> >> >  /* CM EXTERNAL CLOCK OUTPUTS */
> >> >
> >> > -static const struct clksel_rate clkout2_src_core_rates[] = {
> >> > +static struct clksel_rate clkout2_src_core_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate clkout2_src_sys_rates[] = {
> >> > +static struct clksel_rate clkout2_src_sys_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate clkout2_src_96m_rates[] = {
> >> > +static struct clksel_rate clkout2_src_96m_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate clkout2_src_54m_rates[] = {
> >> > +static struct clksel_rate clkout2_src_54m_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel clkout2_src_clksel[] = {
> >> > +static struct clksel clkout2_src_clksel[] = {
> >> >  	{ .parent = &core_ck,		.rates =
clkout2_src_core_rates },
> >> >  	{ .parent = &sys_ck,		.rates =
clkout2_src_sys_rates },
> >> >  	{ .parent = &cm_96m_fck,	.rates =
clkout2_src_96m_rates },
> >> > @@ -1013,7 +1013,7 @@ static struct clk clkout2_src_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate sys_clkout2_rates[] = {
> >> > +static struct clksel_rate sys_clkout2_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4, .val = 2, .flags = RATE_IN_3XXX },
> >> > @@ -1022,7 +1022,7 @@ static const struct clksel_rate
> > sys_clkout2_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel sys_clkout2_clksel[] = {
> >> > +static struct clksel sys_clkout2_clksel[] = {
> >> >  	{ .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1050,14 +1050,14 @@ static struct clk corex2_fck = {
> >> >
> >> >  /* DPLL power domain clock controls */
> >> >
> >> > -static const struct clksel_rate div4_rates[] = {
> >> > +static struct clksel_rate div4_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel div4_core_clksel[] = {
> >> > +static struct clksel div4_core_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = div4_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1086,13 +1086,13 @@ static struct clk mpu_ck = {
> >> >  };
> >> >
> >> >  /* arm_fck is divided by two when DPLL1 locked; otherwise,
> > passthrough mpu_ck */
> >> > -static const struct clksel_rate arm_fck_rates[] = {
> >> > +static struct clksel_rate arm_fck_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel arm_fck_clksel[] = {
> >> > +static struct clksel arm_fck_clksel[] = {
> >> >  	{ .parent = &mpu_ck, .rates = arm_fck_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1145,7 +1145,7 @@ static struct clk iva2_ck = {
> >> >
> >> >  /* Common interface clocks */
> >> >
> >> > -static const struct clksel div2_core_clksel[] = {
> >> > +static struct clksel div2_core_clksel[] = {
> >> >  	{ .parent = &core_ck, .rates = div2_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1162,7 +1162,7 @@ static struct clk l3_ick = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel div2_l3_clksel[] = {
> >> > +static struct clksel div2_l3_clksel[] = {
> >> >  	{ .parent = &l3_ick, .rates = div2_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1180,7 +1180,7 @@ static struct clk l4_ick = {
> >> >
> >> >  };
> >> >
> >> > -static const struct clksel div2_l4_clksel[] = {
> >> > +static struct clksel div2_l4_clksel[] = {
> >> >  	{ .parent = &l4_ick, .rates = div2_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1200,7 +1200,7 @@ static struct clk rm_ick = {
> >> >
> >> >  /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX
> > instead */
> >> >
> >> > -static const struct clksel gfx_l3_clksel[] = {
> >> > +static struct clksel gfx_l3_clksel[] = {
> >> >  	{ .parent = &l3_ick, .rates = gfx_l3_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -1257,7 +1257,7 @@ static struct clk gfx_cg2_ck = {
> >> >
> >> >  /* SGX power domain - 3430ES2 only */
> >> >
> >> > -static const struct clksel_rate sgx_core_rates[] = {
> >> > +static struct clksel_rate sgx_core_rates[] = {
> >> >  	{ .div = 2, .val = 5, .flags = RATE_IN_36XX },
> >> >  	{ .div = 3, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4, .val = 1, .flags = RATE_IN_3XXX },
> >> > @@ -1265,23 +1265,23 @@ static const struct clksel_rate
> > sgx_core_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate sgx_192m_rates[] = {
> >> > +static struct clksel_rate sgx_192m_rates[] = {
> >> >  	{ .div = 1,  .val = 4, .flags = RATE_IN_36XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate sgx_corex2_rates[] = {
> >> > +static struct clksel_rate sgx_corex2_rates[] = {
> >> >  	{ .div = 3, .val = 6, .flags = RATE_IN_36XX },
> >> >  	{ .div = 5, .val = 7, .flags = RATE_IN_36XX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate sgx_96m_rates[] = {
> >> > +static struct clksel_rate sgx_96m_rates[] = {
> >> >  	{ .div = 1,  .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel sgx_clksel[] = {
> >> > +static struct clksel sgx_clksel[] = {
> >> >  	{ .parent = &core_ck,	 .rates = sgx_core_rates },
> >> >  	{ .parent = &cm_96m_fck, .rates = sgx_96m_rates },
> >> >  	{ .parent = &omap_192m_alwon_fck, .rates = sgx_192m_rates
},
> >> > @@ -1356,7 +1356,7 @@ static struct clk mad2d_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel omap343x_gpt_clksel[] = {
> >> > +static struct clksel omap343x_gpt_clksel[] = {
> >> >  	{ .parent = &omap_32k_fck, .rates = gpt_32k_rates },
> >> >  	{ .parent = &sys_ck,	   .rates = gpt_sys_rates },
> >> >  	{ .parent = NULL}
> >> > @@ -1501,17 +1501,17 @@ static struct clk i2c1_fck = {
> >> >   * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
> >> >   * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
> >> >   */
> >> > -static const struct clksel_rate common_mcbsp_96m_rates[] = {
> >> > +static struct clksel_rate common_mcbsp_96m_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >> > +static struct clksel_rate common_mcbsp_mcbsp_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel mcbsp_15_clksel[] = {
> >> > +static struct clksel mcbsp_15_clksel[] = {
> >> >  	{ .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates
},
> >> >  	{ .parent = &mcbsp_clks,   .rates =
common_mcbsp_mcbsp_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -1643,7 +1643,7 @@ static struct clk hdq_fck = {
> >> >
> >> >  /* DPLL3-derived clock */
> >> >
> >> > -static const struct clksel_rate ssi_ssr_corex2_rates[] = {
> >> > +static struct clksel_rate ssi_ssr_corex2_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >> > @@ -1653,7 +1653,7 @@ static const struct clksel_rate
> > ssi_ssr_corex2_rates[] = {
> >> >  	{ .div = 0 }
> >> >  };
> >> >
> >> > -static const struct clksel ssi_ssr_clksel[] = {
> >> > +static struct clksel ssi_ssr_clksel[] = {
> >> >  	{ .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
> >> >  	{ .parent = NULL }
> >> >  };
> >> > @@ -2078,7 +2078,7 @@ static struct clk ssi_ick_3430es2 = {
> >> >  /* REVISIT: Technically the TRM claims that this is CORE_CLK
based,
> >> >   * but l4_ick makes more sense to me */
> >> >
> >> > -static const struct clksel usb_l4_clksel[] = {
> >> > +static struct clksel usb_l4_clksel[] = {
> >> >  	{ .parent = &l4_ick, .rates = div2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2282,7 +2282,7 @@ static struct clk usbhost_ick = {
> >> >
> >> >  /* WKUP */
> >> >
> >> > -static const struct clksel_rate usim_96m_rates[] = {
> >> > +static struct clksel_rate usim_96m_rates[] = {
> >> >  	{ .div = 2,  .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4,  .val = 4, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 8,  .val = 5, .flags = RATE_IN_3XXX },
> >> > @@ -2290,7 +2290,7 @@ static const struct clksel_rate
usim_96m_rates[]
> > = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate usim_120m_rates[] = {
> >> > +static struct clksel_rate usim_120m_rates[] = {
> >> >  	{ .div = 4,  .val = 7,	.flags = RATE_IN_3XXX },
> >> >  	{ .div = 8,  .val = 8,	.flags = RATE_IN_3XXX },
> >> >  	{ .div = 16, .val = 9,	.flags = RATE_IN_3XXX },
> >> > @@ -2298,7 +2298,7 @@ static const struct clksel_rate
> > usim_120m_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel usim_clksel[] = {
> >> > +static struct clksel usim_clksel[] = {
> >> >  	{ .parent = &omap_96m_fck,	.rates = usim_96m_rates },
> >> >  	{ .parent = &dpll5_m2_ck,	.rates = usim_120m_rates
},
> >> >  	{ .parent = &sys_ck,		.rates = div2_rates },
> >> > @@ -2851,7 +2851,7 @@ static struct clk mcbsp4_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel mcbsp_234_clksel[] = {
> >> > +static struct clksel mcbsp_234_clksel[] = {
> >> >  	{ .parent = &per_96m_fck,  .rates = common_mcbsp_96m_rates
},
> >> >  	{ .parent = &mcbsp_clks,   .rates =
common_mcbsp_mcbsp_rates },
> >> >  	{ .parent = NULL }
> >> > @@ -2900,27 +2900,27 @@ static struct clk mcbsp4_fck = {
> >> >
> >> >  /* More information: ARM Cortex-A8 Technical Reference Manual,
sect
> > 10.1 */
> >> >
> >> > -static const struct clksel_rate emu_src_sys_rates[] = {
> >> > +static struct clksel_rate emu_src_sys_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate emu_src_core_rates[] = {
> >> > +static struct clksel_rate emu_src_core_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate emu_src_per_rates[] = {
> >> > +static struct clksel_rate emu_src_per_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate emu_src_mpu_rates[] = {
> >> > +static struct clksel_rate emu_src_mpu_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel emu_src_clksel[] = {
> >> > +static struct clksel emu_src_clksel[] = {
> >> >  	{ .parent = &sys_ck,		.rates = emu_src_sys_rates
},
> >> >  	{ .parent = &emu_core_alwon_ck, .rates =
emu_src_core_rates },
> >> >  	{ .parent = &emu_per_alwon_ck,	.rates = emu_src_per_rates
},
> >> > @@ -2944,7 +2944,7 @@ static struct clk emu_src_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate pclk_emu_rates[] = {
> >> > +static struct clksel_rate pclk_emu_rates[] = {
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> >> > @@ -2952,7 +2952,7 @@ static const struct clksel_rate
pclk_emu_rates[]
> > = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel pclk_emu_clksel[] = {
> >> > +static struct clksel pclk_emu_clksel[] = {
> >> >  	{ .parent = &emu_src_ck, .rates = pclk_emu_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2968,14 +2968,14 @@ static struct clk pclk_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate pclkx2_emu_rates[] = {
> >> > +static struct clksel_rate pclkx2_emu_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel pclkx2_emu_clksel[] = {
> >> > +static struct clksel pclkx2_emu_clksel[] = {
> >> >  	{ .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2991,7 +2991,7 @@ static struct clk pclkx2_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel atclk_emu_clksel[] = {
> >> > +static struct clksel atclk_emu_clksel[] = {
> >> >  	{ .parent = &emu_src_ck, .rates = div2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -3018,14 +3018,14 @@ static struct clk traceclk_src_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate traceclk_rates[] = {
> >> > +static struct clksel_rate traceclk_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 4, .val = 4, .flags = RATE_IN_3XXX },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel traceclk_clksel[] = {
> >> > +static struct clksel traceclk_clksel[] = {
> >> >  	{ .parent = &traceclk_src_fck, .rates = traceclk_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > diff --git a/arch/arm/mach-omap2/clock44xx_data.c
> > b/arch/arm/mach-omap2/clock44xx_data.c
> >> > index e8cb32f..b02bfae 100644
> >> > --- a/arch/arm/mach-omap2/clock44xx_data.c
> >> > +++ b/arch/arm/mach-omap2/clock44xx_data.c
> >> > @@ -127,47 +127,47 @@ static struct clk virt_38400000_ck = {
> >> >  	.rate		= 38400000,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_0_rates[] = {
> >> > +static struct clksel_rate div_1_0_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_1_rates[] = {
> >> > +static struct clksel_rate div_1_1_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_2_rates[] = {
> >> > +static struct clksel_rate div_1_2_rates[] = {
> >> >  	{ .div = 1, .val = 2, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_3_rates[] = {
> >> > +static struct clksel_rate div_1_3_rates[] = {
> >> >  	{ .div = 1, .val = 3, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_4_rates[] = {
> >> > +static struct clksel_rate div_1_4_rates[] = {
> >> >  	{ .div = 1, .val = 4, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_5_rates[] = {
> >> > +static struct clksel_rate div_1_5_rates[] = {
> >> >  	{ .div = 1, .val = 5, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_6_rates[] = {
> >> > +static struct clksel_rate div_1_6_rates[] = {
> >> >  	{ .div = 1, .val = 6, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel_rate div_1_7_rates[] = {
> >> > +static struct clksel_rate div_1_7_rates[] = {
> >> >  	{ .div = 1, .val = 7, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel sys_clkin_sel[] = {
> >> > +static struct clksel sys_clkin_sel[] = {
> >> >  	{ .parent = &virt_12000000_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &virt_13000000_ck, .rates = div_1_2_rates },
> >> >  	{ .parent = &virt_16800000_ck, .rates = div_1_3_rates },
> >> > @@ -221,7 +221,7 @@ static struct clk xclk60motg_ck = {
> >> >
> >> >  /* Module clocks and DPLL outputs */
> >> >
> >> > -static const struct clksel abe_dpll_bypass_clk_mux_sel[] = {
> >> > +static struct clksel abe_dpll_bypass_clk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -283,7 +283,7 @@ static struct clk dpll_abe_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div31_1to31_rates[] = {
> >> > +static struct clksel_rate div31_1to31_rates[] = {
> >> >  	{ .div = 1, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 2, .val = 2, .flags = RATE_IN_4430 },
> >> >  	{ .div = 3, .val = 3, .flags = RATE_IN_4430 },
> >> > @@ -318,7 +318,7 @@ static const struct clksel_rate
> > div31_1to31_rates[] = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel dpll_abe_m2x2_div[] = {
> >> > +static struct clksel dpll_abe_m2x2_div[] = {
> >> >  	{ .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -343,14 +343,14 @@ static struct clk abe_24m_fclk = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div3_1to4_rates[] = {
> >> > +static struct clksel_rate div3_1to4_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel abe_clk_div[] = {
> >> > +static struct clksel abe_clk_div[] = {
> >> >  	{ .parent = &dpll_abe_m2x2_ck, .rates = div3_1to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -367,13 +367,13 @@ static struct clk abe_clk = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_1to2_rates[] = {
> >> > +static struct clksel_rate div2_1to2_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel aess_fclk_div[] = {
> >> > +static struct clksel aess_fclk_div[] = {
> >> >  	{ .parent = &abe_clk, .rates = div2_1to2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -402,7 +402,7 @@ static struct clk dpll_abe_m3x2_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel core_hsd_byp_clk_mux_sel[] = {
> >> > +static struct clksel core_hsd_byp_clk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_abe_m3x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -455,7 +455,7 @@ static struct clk dpll_core_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_core_m6x2_div[] = {
> >> > +static struct clksel dpll_core_m6x2_div[] = {
> >> >  	{ .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -472,7 +472,7 @@ static struct clk dpll_core_m6x2_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel dbgclk_mux_sel[] = {
> >> > +static struct clksel dbgclk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -485,7 +485,7 @@ static struct clk dbgclk_mux_ck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_core_m2_div[] = {
> >> > +static struct clksel dpll_core_m2_div[] = {
> >> >  	{ .parent = &dpll_core_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -522,7 +522,7 @@ static struct clk dpll_core_m5x2_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel div_core_div[] = {
> >> > +static struct clksel div_core_div[] = {
> >> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div2_1to2_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -539,7 +539,7 @@ static struct clk div_core_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div4_1to8_rates[] = {
> >> > +static struct clksel_rate div4_1to8_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 2, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 4, .val = 2, .flags = RATE_IN_4430 },
> >> > @@ -547,7 +547,7 @@ static const struct clksel_rate
div4_1to8_rates[]
> > = {
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel div_iva_hs_clk_div[] = {
> >> > +static struct clksel div_iva_hs_clk_div[] = {
> >> >  	{ .parent = &dpll_core_m5x2_ck, .rates = div4_1to8_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -596,7 +596,7 @@ static struct clk dll_clk_div_ck = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_abe_m2_div[] = {
> >> > +static struct clksel dpll_abe_m2_div[] = {
> >> >  	{ .parent = &dpll_abe_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -639,7 +639,7 @@ static struct clk dpll_core_m7x2_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel iva_hsd_byp_clk_mux_sel[] = {
> >> > +static struct clksel iva_hsd_byp_clk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &div_iva_hs_clk, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -694,7 +694,7 @@ static struct clk dpll_iva_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_iva_m4x2_div[] = {
> >> > +static struct clksel dpll_iva_m4x2_div[] = {
> >> >  	{ .parent = &dpll_iva_x2_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -754,7 +754,7 @@ static struct clk dpll_mpu_ck = {
> >> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_mpu_m2_div[] = {
> >> > +static struct clksel dpll_mpu_m2_div[] = {
> >> >  	{ .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -779,7 +779,7 @@ static struct clk per_hs_clk_div_ck = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel per_hsd_byp_clk_mux_sel[] = {
> >> > +static struct clksel per_hsd_byp_clk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &per_hs_clk_div_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -827,7 +827,7 @@ static struct clk dpll_per_ck = {
> >> >  	.set_rate	= &omap3_noncore_dpll_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_per_m2_div[] = {
> >> > +static struct clksel dpll_per_m2_div[] = {
> >> >  	{ .parent = &dpll_per_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -851,7 +851,7 @@ static struct clk dpll_per_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_per_m2x2_div[] = {
> >> > +static struct clksel dpll_per_m2x2_div[] = {
> >> >  	{ .parent = &dpll_per_x2_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -969,7 +969,7 @@ static struct clk dpll_unipro_x2_ck = {
> >> >  	.recalc		= &omap3_clkoutx2_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_unipro_m2x2_div[] = {
> >> > +static struct clksel dpll_unipro_m2x2_div[] = {
> >> >  	{ .parent = &dpll_unipro_x2_ck, .rates = div31_1to31_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1033,7 +1033,7 @@ static struct clk dpll_usb_clkdcoldo_ck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dpll_usb_m2_div[] = {
> >> > +static struct clksel dpll_usb_m2_div[] = {
> >> >  	{ .parent = &dpll_usb_ck, .rates = div31_1to31_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1050,7 +1050,7 @@ static struct clk dpll_usb_m2_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel ducati_clk_mux_sel[] = {
> >> > +static struct clksel ducati_clk_mux_sel[] = {
> >> >  	{ .parent = &div_core_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_per_m6x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -1091,13 +1091,13 @@ static struct clk func_24mc_fclk = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_4to8_rates[] = {
> >> > +static struct clksel_rate div2_4to8_rates[] = {
> >> >  	{ .div = 4, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_48m_fclk_div[] = {
> >> > +static struct clksel func_48m_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_4to8_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1122,13 +1122,13 @@ static struct clk func_48mc_fclk = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_2to4_rates[] = {
> >> > +static struct clksel_rate div2_2to4_rates[] = {
> >> >  	{ .div = 2, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 4, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel func_64m_fclk_div[] = {
> >> > +static struct clksel func_64m_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_2to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1145,7 +1145,7 @@ static struct clk func_64m_fclk = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel func_96m_fclk_div[] = {
> >> > +static struct clksel func_96m_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div2_2to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1162,7 +1162,7 @@ static struct clk func_96m_fclk = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel hsmmc6_fclk_sel[] = {
> >> > +static struct clksel hsmmc6_fclk_sel[] = {
> >> >  	{ .parent = &func_64m_fclk, .rates = div_1_0_rates },
> >> >  	{ .parent = &func_96m_fclk, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -1175,13 +1175,13 @@ static struct clk hsmmc6_fclk = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_1to8_rates[] = {
> >> > +static struct clksel_rate div2_1to8_rates[] = {
> >> >  	{ .div = 1, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 8, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel init_60m_fclk_div[] = {
> >> > +static struct clksel init_60m_fclk_div[] = {
> >> >  	{ .parent = &dpll_usb_m2_ck, .rates = div2_1to8_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1198,7 +1198,7 @@ static struct clk init_60m_fclk = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel l3_div_div[] = {
> >> > +static struct clksel l3_div_div[] = {
> >> >  	{ .parent = &div_core_ck, .rates = div2_1to2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1215,7 +1215,7 @@ static struct clk l3_div_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel l4_div_div[] = {
> >> > +static struct clksel l4_div_div[] = {
> >> >  	{ .parent = &l3_div_ck, .rates = div2_1to2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1240,7 +1240,7 @@ static struct clk lp_clk_div_ck = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel l4_wkup_clk_mux_sel[] = {
> >> > +static struct clksel l4_wkup_clk_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &lp_clk_div_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -1257,7 +1257,7 @@ static struct clk l4_wkup_clk_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel per_abe_nc_fclk_div[] = {
> >> > +static struct clksel per_abe_nc_fclk_div[] = {
> >> >  	{ .parent = &dpll_abe_m2_ck, .rates = div2_1to2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1274,7 +1274,7 @@ static struct clk per_abe_nc_fclk = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel mcasp2_fclk_sel[] = {
> >> > +static struct clksel mcasp2_fclk_sel[] = {
> >> >  	{ .parent = &func_96m_fclk, .rates = div_1_0_rates },
> >> >  	{ .parent = &per_abe_nc_fclk, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -1309,7 +1309,7 @@ static struct clk per_abe_24m_fclk = {
> >> >  	.recalc		= &omap_fixed_divisor_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel pmd_stm_clock_mux_sel[] = {
> >> > +static struct clksel pmd_stm_clock_mux_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_core_m6x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &tie_low_clock_ck, .rates = div_1_2_rates },
> >> > @@ -1330,7 +1330,7 @@ static struct clk pmd_trace_clk_mux_ck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel syc_clk_div_div[] = {
> >> > +static struct clksel syc_clk_div_div[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div2_1to2_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1399,7 +1399,7 @@ static struct clk des3des_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel dmic_sync_mux_sel[] = {
> >> > +static struct clksel dmic_sync_mux_sel[] = {
> >> >  	{ .parent = &abe_24m_fclk, .rates = div_1_0_rates },
> >> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &func_24m_clk, .rates = div_1_2_rates },
> >> > @@ -1417,7 +1417,7 @@ static struct clk dmic_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel func_dmic_abe_gfclk_sel[] = {
> >> > +static struct clksel func_dmic_abe_gfclk_sel[] = {
> >> >  	{ .parent = &dmic_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> >> > @@ -1531,7 +1531,7 @@ static struct clk emif2_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel fdif_fclk_div[] = {
> >> > +static struct clksel fdif_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div3_1to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1692,7 +1692,7 @@ static struct clk gpmc_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel sgx_clk_mux_sel[] = {
> >> > +static struct clksel sgx_clk_mux_sel[] = {
> >> >  	{ .parent = &dpll_core_m7x2_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_per_m7x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -1723,7 +1723,7 @@ static struct clk hdq1w_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel hsi_fclk_div[] = {
> >> > +static struct clksel hsi_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m2x2_ck, .rates = div3_1to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -1867,7 +1867,7 @@ static struct clk mcasp_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel func_mcasp_abe_gfclk_sel[] = {
> >> > +static struct clksel func_mcasp_abe_gfclk_sel[] = {
> >> >  	{ .parent = &mcasp_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> >> > @@ -1900,7 +1900,7 @@ static struct clk mcbsp1_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel func_mcbsp1_gfclk_sel[] = {
> >> > +static struct clksel func_mcbsp1_gfclk_sel[] = {
> >> >  	{ .parent = &mcbsp1_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> >> > @@ -1933,7 +1933,7 @@ static struct clk mcbsp2_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel func_mcbsp2_gfclk_sel[] = {
> >> > +static struct clksel func_mcbsp2_gfclk_sel[] = {
> >> >  	{ .parent = &mcbsp2_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> >> > @@ -1966,7 +1966,7 @@ static struct clk mcbsp3_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel func_mcbsp3_gfclk_sel[] = {
> >> > +static struct clksel func_mcbsp3_gfclk_sel[] = {
> >> >  	{ .parent = &mcbsp3_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &slimbus_clk, .rates = div_1_2_rates },
> >> > @@ -1999,7 +1999,7 @@ static struct clk mcbsp4_sync_mux_ck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel per_mcbsp4_gfclk_sel[] = {
> >> > +static struct clksel per_mcbsp4_gfclk_sel[] = {
> >> >  	{ .parent = &mcbsp4_sync_mux_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &pad_clks_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -2401,7 +2401,7 @@ static struct clk timer4_fck = {
> >> >  	.clkdm_name	= "l4_per_clkdm",
> >> >  };
> >> >
> >> > -static const struct clksel timer5_sync_mux_sel[] = {
> >> > +static struct clksel timer5_sync_mux_sel[] = {
> >> >  	{ .parent = &syc_clk_div_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &sys_32k_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -2532,7 +2532,7 @@ static struct clk usb_host_fs_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel utmi_p1_gfclk_sel[] = {
> >> > +static struct clksel utmi_p1_gfclk_sel[] = {
> >> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
> >> >  	{ .parent = &xclk60mhsp1_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -2559,7 +2559,7 @@ static struct clk usb_host_hs_utmi_p1_clk = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel utmi_p2_gfclk_sel[] = {
> >> > +static struct clksel utmi_p2_gfclk_sel[] = {
> >> >  	{ .parent = &init_60m_fclk, .rates = div_1_0_rates },
> >> >  	{ .parent = &xclk60mhsp2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -2656,7 +2656,7 @@ static struct clk usb_host_hs_fck = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel otg_60m_gfclk_sel[] = {
> >> > +static struct clksel otg_60m_gfclk_sel[] = {
> >> >  	{ .parent = &utmi_phy_clkout_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &xclk60motg_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = NULL },
> >> > @@ -2743,13 +2743,13 @@ static struct clk usb_tll_hs_ick = {
> >> >  	.recalc		= &followparent_recalc,
> >> >  };
> >> >
> >> > -static const struct clksel_rate div2_14to18_rates[] = {
> >> > +static struct clksel_rate div2_14to18_rates[] = {
> >> >  	{ .div = 14, .val = 0, .flags = RATE_IN_4430 },
> >> >  	{ .div = 18, .val = 1, .flags = RATE_IN_4430 },
> >> >  	{ .div = 0 },
> >> >  };
> >> >
> >> > -static const struct clksel usim_fclk_div[] = {
> >> > +static struct clksel usim_fclk_div[] = {
> >> >  	{ .parent = &dpll_per_m4x2_ck, .rates = div2_14to18_rates
},
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2807,7 +2807,7 @@ static struct clk wd_timer3_fck = {
> >> >  };
> >> >
> >> >  /* Remaining optional clocks */
> >> > -static const struct clksel stm_clk_div_div[] = {
> >> > +static struct clksel stm_clk_div_div[] = {
> >> >  	{ .parent = &pmd_stm_clock_mux_ck, .rates =
div3_1to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2824,7 +2824,7 @@ static struct clk stm_clk_div_ck = {
> >> >  	.set_rate	= &omap2_clksel_set_rate,
> >> >  };
> >> >
> >> > -static const struct clksel trace_clk_div_div[] = {
> >> > +static struct clksel trace_clk_div_div[] = {
> >> >  	{ .parent = &pmd_trace_clk_mux_ck, .rates =
div3_1to4_rates },
> >> >  	{ .parent = NULL },
> >> >  };
> >> > @@ -2843,7 +2843,7 @@ static struct clk trace_clk_div_ck = {
> >> >
> >> >  /* SCRM aux clk nodes */
> >> >
> >> > -static const struct clksel auxclk_sel[] = {
> >> > +static struct clksel auxclk_sel[] = {
> >> >  	{ .parent = &sys_clkin_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
> >> > @@ -2927,7 +2927,7 @@ static struct clk auxclk5_ck = {
> >> >  	.enable_bit	= OMAP4_ENABLE_SHIFT,
> >> >  };
> >> >
> >> > -static const struct clksel auxclkreq_sel[] = {
> >> > +static struct clksel auxclkreq_sel[] = {
> >> >  	{ .parent = &auxclk0_ck, .rates = div_1_0_rates },
> >> >  	{ .parent = &auxclk1_ck, .rates = div_1_1_rates },
> >> >  	{ .parent = &auxclk2_ck, .rates = div_1_2_rates },
> >> > diff --git a/arch/arm/plat-omap/clock.c
b/arch/arm/plat-omap/clock.c
> >> > index fc62fb5..9bfd193 100644
> >> > --- a/arch/arm/plat-omap/clock.c
> >> > +++ b/arch/arm/plat-omap/clock.c
> >> > @@ -308,6 +308,16 @@ void clk_enable_init_clocks(void)
> >> >  	}
> >> >  }
> >> >
> >> > +static struct clk *_omap_clk_get_by_name(const char *name)
> >> > +{
> >> > +	struct clk *c;
> >> > +
> >> > +	list_for_each_entry(c, &clocks, node)
> >> > +		if (!strcmp(c->name, name))
> >> > +			return c;
> >> > +	return NULL;
> >> > +}
> >> > +
> >> >  /**
> >> >   * omap_clk_get_by_name - locate OMAP struct clk by its name
> >> >   * @name: name of the struct clk to locate
> >> > @@ -318,21 +328,45 @@ void clk_enable_init_clocks(void)
> >> >   */
> >> >  struct clk *omap_clk_get_by_name(const char *name)
> >> >  {
> >> > -	struct clk *c;
> >> >  	struct clk *ret = NULL;
> >> >
> >> >  	mutex_lock(&clocks_mutex);
> >> > +	ret = _omap_clk_get_by_name(name);
> >> > +	mutex_unlock(&clocks_mutex);
> >> > +
> >> > +	return ret;
> >> > +}
> >> > +
> >> > +static inline void omap_init_dpll_data_clk_pts(struct dpll_data
*dd)
> >> > +{
> >> > +	if (!dd->clk_ref && dd->clk_ref_name)
> >> > +		dd->clk_ref =
_omap_clk_get_by_name(dd->clk_ref_name);
> >> > +	if (!dd->clk_bypass && dd->clk_bypass_name)
> >> > +		dd->clk_bypass =
> > _omap_clk_get_by_name(dd->clk_bypass_name);
> >> > +}
> >> > +
> >> > +static inline void omap_init_clksel_clk_pts(struct clksel *clks)
> >> > +{
> >> > +	if (!clks->parent && clks->parent_name)
> >> > +		clks->parent =
_omap_clk_get_by_name(clks->parent_name);
> >> > +}
> >> > +
> >> > +void omap_init_clk_pts(void)
> >> > +{
> >> > +	struct clk *c;
> >> > +
> >> > +	mutex_lock(&clocks_mutex);
> >> >
> >> >  	list_for_each_entry(c, &clocks, node) {
> >> > -		if (!strcmp(c->name, name)) {
> >> > -			ret = c;
> >> > -			break;
> >> > -		}
> >> > +		if (!c->parent && c->parent_name)
> >> > +			c->parent =
_omap_clk_get_by_name(c->parent_name);
> >> > +		if (c->dpll_data)
> >> > +			omap_init_dpll_data_clk_pts(c->dpll_data);
> >> > +		if (c->clksel)
> >> > +			omap_init_clksel_clk_pts(c->clksel);
> >> >  	}
> >> >
> >> >  	mutex_unlock(&clocks_mutex);
> >> > -
> >> > -	return ret;
> >> >  }
> >> >
> >> >  /*
> >> > diff --git a/arch/arm/plat-omap/include/plat/clock.h
> > b/arch/arm/plat-omap/include/plat/clock.h
> >> > index 8eb0ada..dc0d9fd 100644
> >> > --- a/arch/arm/plat-omap/include/plat/clock.h
> >> > +++ b/arch/arm/plat-omap/include/plat/clock.h
> >> > @@ -85,6 +85,7 @@ struct clksel_rate {
> >> >  /**
> >> >   * struct clksel - available parent clocks, and a pointer to their
> > divisors
> >> >   * @parent: struct clk * to a possible parent clock
> >> > + * @parent_name: Name of the possible parent clock
> >> >   * @rates: available divisors for this parent clock
> >> >   *
> >> >   * A struct clksel is always associated with one or more struct
clks
> >> > @@ -92,6 +93,7 @@ struct clksel_rate {
> >> >   */
> >> >  struct clksel {
> >> >  	struct clk		 *parent;
> >> > +	const char		 *parent_name;
> >> >  	const struct clksel_rate *rates;
> >> >  };
> >> >
> >> > @@ -101,7 +103,9 @@ struct clksel {
> >> >   * @mult_mask: mask of the DPLL M bitfield in @mult_div1_reg
> >> >   * @div1_mask: mask of the DPLL N bitfield in @mult_div1_reg
> >> >   * @clk_bypass: struct clk pointer to the clock's bypass clock
input
> >> > + * @clk_bypass_name: Name of the clock's bypass clock input
> >> >   * @clk_ref: struct clk pointer to the clock's reference clock
input
> >> > + * @clk_ref_name: Name of the clock's reference clock input
> >> >   * @control_reg: register containing the DPLL mode bitfield
> >> >   * @enable_mask: mask of the DPLL mode bitfield in @control_reg
> >> >   * @rate_tolerance: maximum variance allowed from target rate (in
Hz)
> >> > @@ -143,7 +147,9 @@ struct dpll_data {
> >> >  	u32			mult_mask;
> >> >  	u32			div1_mask;
> >> >  	struct clk		*clk_bypass;
> >> > +	const char		*clk_bypass_name;
> >> >  	struct clk		*clk_ref;
> >> > +	const char		*clk_ref_name;
> >> >  	void __iomem		*control_reg;
> >> >  	u32			enable_mask;
> >> >  	unsigned int		rate_tolerance;
> >> > @@ -230,6 +236,7 @@ struct clk {
> >> >  	const struct clkops	*ops;
> >> >  	const char		*name;
> >> >  	struct clk		*parent;
> >> > +	const char		*parent_name;
> >> >  	struct list_head	children;
> >> >  	struct list_head	sibling;	/* node for
children */
> >> >  	unsigned long		rate;
> >> > @@ -245,7 +252,7 @@ struct clk {
> >> >  #ifdef CONFIG_ARCH_OMAP2PLUS
> >> >  	void __iomem		*clksel_reg;
> >> >  	u32			clksel_mask;
> >> > -	const struct clksel	*clksel;
> >> > +	struct clksel		*clksel;
> >> >  	struct dpll_data	*dpll_data;
> >> >  	const char		*clkdm_name;
> >> >  	struct clockdomain	*clkdm;
> >> > @@ -292,7 +299,7 @@ extern void clk_init_cpufreq_table(struct
> > cpufreq_frequency_table **table);
> >> >  extern void clk_exit_cpufreq_table(struct cpufreq_frequency_table
> > **table);
> >> >  #endif
> >> >  extern struct clk *omap_clk_get_by_name(const char *name);
> >> > -
> >> > +extern void omap_init_clk_pts(void);
> >> >  extern const struct clkops clkops_null;
> >> >
> >> >  extern struct clk dummy_ck;

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS
  2011-01-25 15:58         ` Kevin Hilman
@ 2011-01-27  2:43           ` Rajendra Nayak
  0 siblings, 0 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-01-27  2:43 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, paul

Hi Kevin,

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@ti.com]
> Sent: Tuesday, January 25, 2011 9:29 PM
> To: Rajendra Nayak
> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> Subject: Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on
3430ES2PLUS
>
> Rajendra Nayak <rnayak@ti.com> writes:
>
> > Hi Kevin,
> >
> >> -----Original Message-----
> >> From: Kevin Hilman [mailto:khilman@ti.com]
> >> Sent: Tuesday, January 25, 2011 3:39 AM
> >> To: Rajendra Nayak
> >> Cc: linux-omap@vger.kernel.org; paul@pwsan.com
> >> Subject: Re: [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU
on
> > 3430ES2PLUS
> >>
> >> Rajendra Nayak <rnayak@ti.com> writes:
> >>
> >> > The IVA2_CLK_SRC and MPU_CLK_SRC for OMAP3430 ES2
> >> > and above are 3 bit fields.
> >> > Define new masks for them, and since they are used
> >> > in a couple of clock nodes, model separate clock
> >> > nodes for 3430ES1 and 3430ES2+.
> >>
> >> This part should probably be separated out as a fix for the -rc
cycle.
> >
> > The reason I clubbed this fix here was because it had a dependency on
the
> > 'reference by name' approach added by the previous patch.
> >
> > Else I was looking at creating too many duplicate nodes, since the
clock
> > nodes which get added in this patch
(dpll1_fck_3430es2/dpll2_fck_3430es2)
> > are part of dpll_data.
>
> OK, thanks for the clarifiation.  Might help to add that bit of
> description in the changelog, or after the '---' for the sake of
> reviewers.

Sure, will do that.

Regards,
Rajendra
>
> Thanks,
>
> Kevin
>
> >>
> >> Kevin
> >>
> >> > Also change reference to these new clock nodes
> >> > from clk pointers to clk name and make a call
> >> > to omap_init_clk_pts to init the pointers at
> >> > run time.
> >> >
> >> > Signed-off-by: Rajendra Nayak <rnayak@ti.com>
> >> > ---
> >> >  arch/arm/mach-omap2/clock3xxx_data.c  |   39
> > ++++++++++++++++++++++++++------
> >> >  arch/arm/mach-omap2/cm-regbits-34xx.h |    2 +
> >> >  2 files changed, 33 insertions(+), 8 deletions(-)
> >> >
> >> > diff --git a/arch/arm/mach-omap2/clock3xxx_data.c
> > b/arch/arm/mach-omap2/clock3xxx_data.c
> >> > index 9c87adb..c3a7ff5 100644
> >> > --- a/arch/arm/mach-omap2/clock3xxx_data.c
> >> > +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> >> > @@ -53,10 +53,6 @@
> >> >   * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
> >> >   */
> >> >
> >> > -/* Forward declarations for DPLL bypass clocks */
> >> > -static struct clk dpll1_fck;
> >> > -static struct clk dpll2_fck;
> >> > -
> >> >  /* PRM CLOCKS */
> >> >
> >> >  /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz
> > clock. */
> >> > @@ -275,7 +271,7 @@ static struct dpll_data dpll1_dd = {
> >> >  	.mult_div1_reg	= OMAP_CM_REGADDR(MPU_MOD,
> > OMAP3430_CM_CLKSEL1_PLL),
> >> >  	.mult_mask	= OMAP3430_MPU_DPLL_MULT_MASK,
> >> >  	.div1_mask	= OMAP3430_MPU_DPLL_DIV_MASK,
> >> > -	.clk_bypass	= &dpll1_fck,
> >> > +	.clk_bypass_name	= "dpll1_fck",
> >> >  	.clk_ref	= &sys_ck,
> >> >  	.freqsel_mask	= OMAP3430_MPU_DPLL_FREQSEL_MASK,
> >> >  	.control_reg	= OMAP_CM_REGADDR(MPU_MOD,
OMAP3430_CM_CLKEN_PLL),
> >> > @@ -347,7 +343,7 @@ static struct dpll_data dpll2_dd = {
> >> >  	.mult_div1_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> > OMAP3430_CM_CLKSEL1_PLL),
> >> >  	.mult_mask	= OMAP3430_IVA2_DPLL_MULT_MASK,
> >> >  	.div1_mask	= OMAP3430_IVA2_DPLL_DIV_MASK,
> >> > -	.clk_bypass	= &dpll2_fck,
> >> > +	.clk_bypass_name	= "dpll2_fck",
> >> >  	.clk_ref	= &sys_ck,
> >> >  	.freqsel_mask	= OMAP3430_IVA2_DPLL_FREQSEL_MASK,
> >> >  	.control_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> > OMAP3430_CM_CLKEN_PLL),
> >> > @@ -1077,6 +1073,17 @@ static struct clk dpll1_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > +static struct clk dpll1_fck_3430es2 = {
> >> > +	.name		= "dpll1_fck",
> >> > +	.ops		= &clkops_null,
> >> > +	.parent		= &core_ck,
> >> > +	.init		= &omap2_init_clksel_parent,
> >> > +	.clksel_reg	= OMAP_CM_REGADDR(MPU_MOD,
> > OMAP3430_CM_CLKSEL1_PLL),
> >> > +	.clksel_mask	= OMAP3430ES2_MPU_CLK_SRC_MASK,
> >> > +	.clksel		= div4_core_clksel,
> >> > +	.recalc		= &omap2_clksel_recalc,
> >> > +};
> >> > +
> >> >  static struct clk mpu_ck = {
> >> >  	.name		= "mpu_ck",
> >> >  	.ops		= &clkops_null,
> >> > @@ -1133,6 +1140,17 @@ static struct clk dpll2_fck = {
> >> >  	.recalc		= &omap2_clksel_recalc,
> >> >  };
> >> >
> >> > +static struct clk dpll2_fck_3430es2 = {
> >> > +	.name		= "dpll2_fck",
> >> > +	.ops		= &clkops_null,
> >> > +	.parent		= &core_ck,
> >> > +	.init		= &omap2_init_clksel_parent,
> >> > +	.clksel_reg	= OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
> > OMAP3430_CM_CLKSEL1_PLL),
> >> > +	.clksel_mask	= OMAP3430ES2_IVA2_CLK_SRC_MASK,
> >> > +	.clksel		= div4_core_clksel,
> >> > +	.recalc		= &omap2_clksel_recalc,
> >> > +};
> >> > +
> >> >  static struct clk iva2_ck = {
> >> >  	.name		= "iva2_ck",
> >> >  	.ops		= &clkops_omap2_dflt_wait,
> >> > @@ -3261,11 +3279,13 @@ static struct omap_clk omap3xxx_clks[] = {
> >> >  	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck,
CK_3XXX),
> >> >  	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX),
> >> >  	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX),
> >> > -	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX),
> >> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck,
CK_3430ES1),
> >> > +	CLK(NULL,	"dpll1_fck",	&dpll1_fck_3430es2,
> > CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
> >> >  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX),
> >> >  	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX),
> >> >  	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck,
CK_3XXX),
> >> > -	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX |
> > CK_36XX),
> >> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck,
CK_3430ES1),
> >> > +	CLK(NULL,	"dpll2_fck",	&dpll2_fck_3430es2,
> > CK_3430ES2PLUS | CK_36XX),
> >> >  	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX |
> > CK_36XX),
> >> >  	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX),
> >> >  	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX),
> >> > @@ -3535,6 +3555,9 @@ int __init omap3xxx_clk_init(void)
> >> >  			omap2_init_clk_clkdm(c->lk.clk);
> >> >  		}
> >> >
> >> > +	/* Initialise clk pointers for parent/ref/bypass clks */
> >> > +	omap_init_clk_pts();
> >> > +
> >> >  	recalculate_root_clocks();
> >> >
> >> >  	pr_info("Clocking rate (Crystal/Core/MPU):
%ld.%01ld/%ld/%ld
> > MHz\n",
> >> > diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h
> > b/arch/arm/mach-omap2/cm-regbits-34xx.h
> >> > index b912759..fd80872 100644
> >> > --- a/arch/arm/mach-omap2/cm-regbits-34xx.h
> >> > +++ b/arch/arm/mach-omap2/cm-regbits-34xx.h
> >> > @@ -80,6 +80,7 @@
> >> >  /* CM_CLKSEL1_PLL_IVA2 */
> >> >  #define OMAP3430_IVA2_CLK_SRC_SHIFT			19
> >> >  #define OMAP3430_IVA2_CLK_SRC_MASK			(0x3 <<
19)
> >> > +#define OMAP3430ES2_IVA2_CLK_SRC_MASK			(0x7 <<
> > 19)
> >> >  #define OMAP3430_IVA2_DPLL_MULT_SHIFT			8
> >> >  #define OMAP3430_IVA2_DPLL_MULT_MASK			(0x7ff <<
> > 8)
> >> >  #define OMAP3430_IVA2_DPLL_DIV_SHIFT			0
> >> > @@ -125,6 +126,7 @@
> >> >  /* CM_CLKSEL1_PLL_MPU */
> >> >  #define OMAP3430_MPU_CLK_SRC_SHIFT			19
> >> >  #define OMAP3430_MPU_CLK_SRC_MASK			(0x3 <<
19)
> >> > +#define OMAP3430ES2_MPU_CLK_SRC_MASK			(0x7 <<
> > 19)
> >> >  #define OMAP3430_MPU_DPLL_MULT_SHIFT			8
> >> >  #define OMAP3430_MPU_DPLL_MULT_MASK			(0x7ff <<
> > 8)
> >> >  #define OMAP3430_MPU_DPLL_DIV_SHIFT			0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC 0/3] Use clknames to reference parent/bypass/ref clks
  2011-01-19 14:14 [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak
  2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
@ 2011-02-16 12:22 ` Rajendra Nayak
  1 sibling, 0 replies; 17+ messages in thread
From: Rajendra Nayak @ 2011-02-16 12:22 UTC (permalink / raw)
  To: Rajendra Nayak, linux-omap; +Cc: paul, khilman

Hi Paul,

> -----Original Message-----
> From: Rajendra Nayak [mailto:rnayak@ti.com]
> Sent: Wednesday, January 19, 2011 7:44 PM
> To: linux-omap@vger.kernel.org
> Cc: paul@pwsan.com; khilman@deeprootsystems.com; Rajendra Nayak
> Subject: [RFC 0/3] Use clknames to reference parent/bypass/ref clks
>
> This RFC series adds support to allow clock
> framework to reference clk parents, reference
> clocks and bypass clocks (for DPLL's) by names
> along with the current support to reference
> them by pointers.

Did you get a chance to look at this RFC series?
I was waiting to hear from you before I repost
based on Felipe and Kevin's comments on the
patches.

Regards,
Rajendra

>
> Referencing through clk pointers makes it difficult
> to support different revs of a single chip when
> seperate clk nodes, one for each rev have to be modelled,
> and especially when these are non-leaf nodes.
> A case for this exists in the current series as well.
>
> The series is boot tested on 3430sdp and fixes the
> multiple WARN's otherwise seen like the one below
>
> [    0.000000] ------------[ cut here ]------------
> [    0.000000] WARNING: at arch/arm/mach-omap2/clkt_clksel.c:194
omap2_clksel_recalc+0xd4/0xe4()
> [    0.000000] clock: Could not find fieldval 0 for clock dpll2_fck
parent core_ck
> [    0.000000] Modules linked in:
> [    0.000000] [<c006208c>] (unwind_backtrace+0x0/0xe4) from
[<c0092bfc>] (warn_slowpath_common+0x4c/0x64)
> [    0.000000] [<c0092bfc>] (warn_slowpath_common+0x4c/0x64) from
[<c0092c94>]
> (warn_slowpath_fmt+0x2c/0x3c)
> [    0.000000] [<c0092c94>] (warn_slowpath_fmt+0x2c/0x3c) from
[<c0073dc4>] (omap2_clksel_recalc+0xd4/0xe4)
> [    0.000000] [<c0073dc4>] (omap2_clksel_recalc+0xd4/0xe4) from
[<c0077e1c>] (propagate_rate+0x24/0x50)
> [    0.000000] [<c0077e1c>] (propagate_rate+0x24/0x50) from [<c0077e28>]
(propagate_rate+0x30/0x50)
> [    0.000000] ---[ end trace 1b75b31a2719ed1d ]---
>
> Rajendra Nayak (3):
>   OMAP: clocks: Use clk names instead of clk pointers
>   OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2
>   OMAP4: clocks: Remove unused clksel definitions
>
>  arch/arm/mach-omap2/clock2420_data.c    |   86 +++++++-------
>  arch/arm/mach-omap2/clock2430_data.c    |   88 ++++++++--------
>  arch/arm/mach-omap2/clock3xxx_data.c    |  183
+++++++++++++++++--------------
>  arch/arm/mach-omap2/clock44xx_data.c    |  145 +++++++++++-------------
>  arch/arm/mach-omap2/cm-regbits-34xx.h   |    2 +
>  arch/arm/plat-omap/clock.c              |   48 +++++++-
>  arch/arm/plat-omap/include/plat/clock.h |   11 ++-
>  7 files changed, 308 insertions(+), 255 deletions(-)

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2011-02-16 12:22 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-19 14:14 [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak
2011-01-19 14:14 ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Rajendra Nayak
2011-01-19 14:14   ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Rajendra Nayak
2011-01-19 14:14     ` [RFC 3/3] OMAP4: clocks: Remove unused clksel definitions Rajendra Nayak
2011-01-24 22:09     ` [RFC 2/3] OMAP3: PM: Fix CLK_SRC mask for IVA2 and MPU on 3430ES2PLUS Kevin Hilman
2011-01-25  7:24       ` Rajendra Nayak
2011-01-25 15:58         ` Kevin Hilman
2011-01-27  2:43           ` Rajendra Nayak
2011-01-19 15:19   ` [RFC 1/3] OMAP: clocks: Use clk names instead of clk pointers Felipe Balbi
2011-01-20  5:33     ` Rajendra Nayak
2011-01-20  6:26       ` Felipe Balbi
2011-01-20  6:28         ` Rajendra Nayak
2011-01-24 22:08   ` Kevin Hilman
2011-01-25  7:21     ` Rajendra Nayak
2011-01-25 15:57       ` Kevin Hilman
2011-01-27  2:42         ` Rajendra Nayak
2011-02-16 12:22 ` [RFC 0/3] Use clknames to reference parent/bypass/ref clks Rajendra Nayak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.