Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1/*
   2 * OMAP2430 clock data
   3 *
   4 * Copyright (C) 2005-2009, 2012 Texas Instruments, Inc.
   5 * Copyright (C) 2004-2011 Nokia Corporation
   6 *
   7 * Contacts:
   8 * Richard Woodruff <r-woodruff2@ti.com>
   9 * Paul Walmsley
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License version 2 as
  13 * published by the Free Software Foundation.
  14 */
  15
  16#include <linux/kernel.h>
  17#include <linux/clk.h>
  18#include <linux/clk-private.h>
  19#include <linux/list.h>
  20
  21#include "soc.h"
  22#include "iomap.h"
  23#include "clock.h"
  24#include "clock2xxx.h"
  25#include "opp2xxx.h"
  26#include "cm2xxx.h"
  27#include "prm2xxx.h"
  28#include "prm-regbits-24xx.h"
  29#include "cm-regbits-24xx.h"
  30#include "sdrc.h"
  31#include "control.h"
  32
  33#define OMAP_CM_REGADDR			OMAP2430_CM_REGADDR
  34
  35/*
  36 * 2430 clock tree.
  37 *
  38 * NOTE:In many cases here we are assigning a 'default' parent. In
  39 *	many cases the parent is selectable. The set parent calls will
  40 *	also switch sources.
  41 *
  42 *	Several sources are given initial rates which may be wrong, this will
  43 *	be fixed up in the init func.
  44 *
  45 *	Things are broadly separated below by clock domains. It is
  46 *	noteworthy that most peripherals have dependencies on multiple clock
  47 *	domains. Many get their interface clocks from the L4 domain, but get
  48 *	functional clocks from fixed sources or other core domain derived
  49 *	clocks.
  50 */
  51
  52DEFINE_CLK_FIXED_RATE(alt_ck, CLK_IS_ROOT, 54000000, 0x0);
  53
  54DEFINE_CLK_FIXED_RATE(func_32k_ck, CLK_IS_ROOT, 32768, 0x0);
  55
  56DEFINE_CLK_FIXED_RATE(mcbsp_clks, CLK_IS_ROOT, 0x0, 0x0);
  57
  58static struct clk osc_ck;
  59
  60static const struct clk_ops osc_ck_ops = {
  61	.enable		= &omap2_enable_osc_ck,
  62	.disable	= omap2_disable_osc_ck,
  63	.recalc_rate	= &omap2_osc_clk_recalc,
  64};
  65
  66static struct clk_hw_omap osc_ck_hw = {
  67	.hw = {
  68		.clk = &osc_ck,
  69	},
  70};
  71
  72static struct clk osc_ck = {
  73	.name	= "osc_ck",
  74	.ops	= &osc_ck_ops,
  75	.hw	= &osc_ck_hw.hw,
  76	.flags	= CLK_IS_ROOT,
  77};
  78
  79DEFINE_CLK_FIXED_RATE(secure_32k_ck, CLK_IS_ROOT, 32768, 0x0);
  80
  81static struct clk sys_ck;
  82
  83static const char *sys_ck_parent_names[] = {
  84	"osc_ck",
  85};
  86
  87static const struct clk_ops sys_ck_ops = {
  88	.init		= &omap2_init_clk_clkdm,
  89	.recalc_rate	= &omap2xxx_sys_clk_recalc,
  90};
  91
  92DEFINE_STRUCT_CLK_HW_OMAP(sys_ck, "wkup_clkdm");
  93DEFINE_STRUCT_CLK(sys_ck, sys_ck_parent_names, sys_ck_ops);
  94
  95static struct dpll_data dpll_dd = {
  96	.mult_div1_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  97	.mult_mask	= OMAP24XX_DPLL_MULT_MASK,
  98	.div1_mask	= OMAP24XX_DPLL_DIV_MASK,
  99	.clk_bypass	= &sys_ck,
 100	.clk_ref	= &sys_ck,
 101	.control_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
 102	.enable_mask	= OMAP24XX_EN_DPLL_MASK,
 103	.max_multiplier	= 1023,
 104	.min_divider	= 1,
 105	.max_divider	= 16,
 106};
 107
 108static struct clk dpll_ck;
 109
 110static const char *dpll_ck_parent_names[] = {
 111	"sys_ck",
 112};
 113
 114static const struct clk_ops dpll_ck_ops = {
 115	.init		= &omap2_init_clk_clkdm,
 116	.get_parent	= &omap2_init_dpll_parent,
 117	.recalc_rate	= &omap2_dpllcore_recalc,
 118	.round_rate	= &omap2_dpll_round_rate,
 119	.set_rate	= &omap2_reprogram_dpllcore,
 120};
 121
 122static struct clk_hw_omap dpll_ck_hw = {
 123	.hw = {
 124		.clk = &dpll_ck,
 125	},
 126	.ops		= &clkhwops_omap2xxx_dpll,
 127	.dpll_data	= &dpll_dd,
 128	.clkdm_name	= "wkup_clkdm",
 129};
 130
 131DEFINE_STRUCT_CLK(dpll_ck, dpll_ck_parent_names, dpll_ck_ops);
 132
 133static struct clk core_ck;
 134
 135static const char *core_ck_parent_names[] = {
 136	"dpll_ck",
 137};
 138
 139static const struct clk_ops core_ck_ops = {
 140	.init		= &omap2_init_clk_clkdm,
 141};
 142
 143DEFINE_STRUCT_CLK_HW_OMAP(core_ck, "wkup_clkdm");
 144DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops);
 145
 146DEFINE_CLK_DIVIDER(core_l3_ck, "core_ck", &core_ck, 0x0,
 147		   OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
 148		   OMAP24XX_CLKSEL_L3_SHIFT, OMAP24XX_CLKSEL_L3_WIDTH,
 149		   CLK_DIVIDER_ONE_BASED, NULL);
 150
 151DEFINE_CLK_DIVIDER(l4_ck, "core_l3_ck", &core_l3_ck, 0x0,
 152		   OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
 153		   OMAP24XX_CLKSEL_L4_SHIFT, OMAP24XX_CLKSEL_L4_WIDTH,
 154		   CLK_DIVIDER_ONE_BASED, NULL);
 155
 156static struct clk aes_ick;
 157
 158static const char *aes_ick_parent_names[] = {
 159	"l4_ck",
 160};
 161
 162static const struct clk_ops aes_ick_ops = {
 163	.init		= &omap2_init_clk_clkdm,
 164	.enable		= &omap2_dflt_clk_enable,
 165	.disable	= &omap2_dflt_clk_disable,
 166	.is_enabled	= &omap2_dflt_clk_is_enabled,
 167};
 168
 169static struct clk_hw_omap aes_ick_hw = {
 170	.hw = {
 171		.clk = &aes_ick,
 172	},
 173	.ops		= &clkhwops_iclk_wait,
 174	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 175	.enable_bit	= OMAP24XX_EN_AES_SHIFT,
 176	.clkdm_name	= "core_l4_clkdm",
 177};
 178
 179DEFINE_STRUCT_CLK(aes_ick, aes_ick_parent_names, aes_ick_ops);
 180
 181static struct clk apll54_ck;
 182
 183static const struct clk_ops apll54_ck_ops = {
 184	.init		= &omap2_init_clk_clkdm,
 185	.enable		= &omap2_clk_apll54_enable,
 186	.disable	= &omap2_clk_apll54_disable,
 187	.recalc_rate	= &omap2_clk_apll54_recalc,
 188};
 189
 190static struct clk_hw_omap apll54_ck_hw = {
 191	.hw = {
 192		.clk = &apll54_ck,
 193	},
 194	.ops		= &clkhwops_apll54,
 195	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
 196	.enable_bit	= OMAP24XX_EN_54M_PLL_SHIFT,
 197	.flags		= ENABLE_ON_INIT,
 198	.clkdm_name	= "wkup_clkdm",
 199};
 200
 201DEFINE_STRUCT_CLK(apll54_ck, dpll_ck_parent_names, apll54_ck_ops);
 202
 203static struct clk apll96_ck;
 204
 205static const struct clk_ops apll96_ck_ops = {
 206	.init		= &omap2_init_clk_clkdm,
 207	.enable		= &omap2_clk_apll96_enable,
 208	.disable	= &omap2_clk_apll96_disable,
 209	.recalc_rate	= &omap2_clk_apll96_recalc,
 210};
 211
 212static struct clk_hw_omap apll96_ck_hw = {
 213	.hw = {
 214		.clk = &apll96_ck,
 215	},
 216	.ops		= &clkhwops_apll96,
 217	.enable_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
 218	.enable_bit	= OMAP24XX_EN_96M_PLL_SHIFT,
 219	.flags		= ENABLE_ON_INIT,
 220	.clkdm_name	= "wkup_clkdm",
 221};
 222
 223DEFINE_STRUCT_CLK(apll96_ck, dpll_ck_parent_names, apll96_ck_ops);
 224
 225static const char *func_96m_ck_parent_names[] = {
 226	"apll96_ck", "alt_ck",
 227};
 228
 229DEFINE_CLK_MUX(func_96m_ck, func_96m_ck_parent_names, NULL, 0x0,
 230	       OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), OMAP2430_96M_SOURCE_SHIFT,
 231	       OMAP2430_96M_SOURCE_WIDTH, 0x0, NULL);
 232
 233static struct clk cam_fck;
 234
 235static const char *cam_fck_parent_names[] = {
 236	"func_96m_ck",
 237};
 238
 239static struct clk_hw_omap cam_fck_hw = {
 240	.hw = {
 241		.clk = &cam_fck,
 242	},
 243	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 244	.enable_bit	= OMAP24XX_EN_CAM_SHIFT,
 245	.clkdm_name	= "core_l3_clkdm",
 246};
 247
 248DEFINE_STRUCT_CLK(cam_fck, cam_fck_parent_names, aes_ick_ops);
 249
 250static struct clk cam_ick;
 251
 252static struct clk_hw_omap cam_ick_hw = {
 253	.hw = {
 254		.clk = &cam_ick,
 255	},
 256	.ops		= &clkhwops_iclk,
 257	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 258	.enable_bit	= OMAP24XX_EN_CAM_SHIFT,
 259	.clkdm_name	= "core_l4_clkdm",
 260};
 261
 262DEFINE_STRUCT_CLK(cam_ick, aes_ick_parent_names, aes_ick_ops);
 263
 264static struct clk des_ick;
 265
 266static struct clk_hw_omap des_ick_hw = {
 267	.hw = {
 268		.clk = &des_ick,
 269	},
 270	.ops		= &clkhwops_iclk_wait,
 271	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 272	.enable_bit	= OMAP24XX_EN_DES_SHIFT,
 273	.clkdm_name	= "core_l4_clkdm",
 274};
 275
 276DEFINE_STRUCT_CLK(des_ick, aes_ick_parent_names, aes_ick_ops);
 277
 278static const struct clksel_rate dsp_fck_core_rates[] = {
 279	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 280	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 281	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
 282	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
 283	{ .div = 0 }
 284};
 285
 286static const struct clksel dsp_fck_clksel[] = {
 287	{ .parent = &core_ck, .rates = dsp_fck_core_rates },
 288	{ .parent = NULL },
 289};
 290
 291static const char *dsp_fck_parent_names[] = {
 292	"core_ck",
 293};
 294
 295static struct clk dsp_fck;
 296
 297static const struct clk_ops dsp_fck_ops = {
 298	.init		= &omap2_init_clk_clkdm,
 299	.enable		= &omap2_dflt_clk_enable,
 300	.disable	= &omap2_dflt_clk_disable,
 301	.is_enabled	= &omap2_dflt_clk_is_enabled,
 302	.recalc_rate	= &omap2_clksel_recalc,
 303	.set_rate	= &omap2_clksel_set_rate,
 304	.round_rate	= &omap2_clksel_round_rate,
 305};
 306
 307DEFINE_CLK_OMAP_MUX_GATE(dsp_fck, "dsp_clkdm", dsp_fck_clksel,
 308			 OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
 309			 OMAP24XX_CLKSEL_DSP_MASK,
 310			 OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
 311			 OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, &clkhwops_wait,
 312			 dsp_fck_parent_names, dsp_fck_ops);
 313
 314static const struct clksel_rate dss1_fck_sys_rates[] = {
 315	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 316	{ .div = 0 }
 317};
 318
 319static const struct clksel_rate dss1_fck_core_rates[] = {
 320	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 321	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
 322	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
 323	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
 324	{ .div = 5, .val = 5, .flags = RATE_IN_24XX },
 325	{ .div = 6, .val = 6, .flags = RATE_IN_24XX },
 326	{ .div = 8, .val = 8, .flags = RATE_IN_24XX },
 327	{ .div = 9, .val = 9, .flags = RATE_IN_24XX },
 328	{ .div = 12, .val = 12, .flags = RATE_IN_24XX },
 329	{ .div = 16, .val = 16, .flags = RATE_IN_24XX },
 330	{ .div = 0 }
 331};
 332
 333static const struct clksel dss1_fck_clksel[] = {
 334	{ .parent = &sys_ck, .rates = dss1_fck_sys_rates },
 335	{ .parent = &core_ck, .rates = dss1_fck_core_rates },
 336	{ .parent = NULL },
 337};
 338
 339static const char *dss1_fck_parent_names[] = {
 340	"sys_ck", "core_ck",
 341};
 342
 343static const struct clk_ops dss1_fck_ops = {
 344	.init		= &omap2_init_clk_clkdm,
 345	.enable		= &omap2_dflt_clk_enable,
 346	.disable	= &omap2_dflt_clk_disable,
 347	.is_enabled	= &omap2_dflt_clk_is_enabled,
 348	.recalc_rate	= &omap2_clksel_recalc,
 349	.get_parent	= &omap2_clksel_find_parent_index,
 350	.set_parent	= &omap2_clksel_set_parent,
 351};
 352
 353DEFINE_CLK_OMAP_MUX_GATE(dss1_fck, "dss_clkdm", dss1_fck_clksel,
 354			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
 355			 OMAP24XX_CLKSEL_DSS1_MASK,
 356			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 357			 OMAP24XX_EN_DSS1_SHIFT, NULL,
 358			 dss1_fck_parent_names, dss1_fck_ops);
 359
 360static const struct clksel_rate dss2_fck_sys_rates[] = {
 361	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
 362	{ .div = 0 }
 363};
 364
 365static const struct clksel_rate dss2_fck_48m_rates[] = {
 366	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 367	{ .div = 0 }
 368};
 369
 370static const struct clksel_rate func_48m_apll96_rates[] = {
 371	{ .div = 2, .val = 0, .flags = RATE_IN_24XX },
 372	{ .div = 0 }
 373};
 374
 375static const struct clksel_rate func_48m_alt_rates[] = {
 376	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
 377	{ .div = 0 }
 378};
 379
 380static const struct clksel func_48m_clksel[] = {
 381	{ .parent = &apll96_ck, .rates = func_48m_apll96_rates },
 382	{ .parent = &alt_ck, .rates = func_48m_alt_rates },
 383	{ .parent = NULL },
 384};
 385
 386static const char *func_48m_ck_parent_names[] = {
 387	"apll96_ck", "alt_ck",
 388};
 389
 390static struct clk func_48m_ck;
 391
 392static const struct clk_ops func_48m_ck_ops = {
 393	.init		= &omap2_init_clk_clkdm,
 394	.recalc_rate	= &omap2_clksel_recalc,
 395	.set_rate	= &omap2_clksel_set_rate,
 396	.round_rate	= &omap2_clksel_round_rate,
 397	.get_parent	= &omap2_clksel_find_parent_index,
 398	.set_parent	= &omap2_clksel_set_parent,
 399};
 400
 401static struct clk_hw_omap func_48m_ck_hw = {
 402	.hw = {
 403		.clk = &func_48m_ck,
 404	},
 405	.clksel		= func_48m_clksel,
 406	.clksel_reg	= OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
 407	.clksel_mask	= OMAP24XX_48M_SOURCE_MASK,
 408	.clkdm_name	= "wkup_clkdm",
 409};
 410
 411DEFINE_STRUCT_CLK(func_48m_ck, func_48m_ck_parent_names, func_48m_ck_ops);
 412
 413static const struct clksel dss2_fck_clksel[] = {
 414	{ .parent = &sys_ck, .rates = dss2_fck_sys_rates },
 415	{ .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
 416	{ .parent = NULL },
 417};
 418
 419static const char *dss2_fck_parent_names[] = {
 420	"sys_ck", "func_48m_ck",
 421};
 422
 423DEFINE_CLK_OMAP_MUX_GATE(dss2_fck, "dss_clkdm", dss2_fck_clksel,
 424			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
 425			 OMAP24XX_CLKSEL_DSS2_MASK,
 426			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 427			 OMAP24XX_EN_DSS2_SHIFT, NULL,
 428			 dss2_fck_parent_names, dss1_fck_ops);
 429
 430static const char *func_54m_ck_parent_names[] = {
 431	"apll54_ck", "alt_ck",
 432};
 433
 434DEFINE_CLK_MUX(func_54m_ck, func_54m_ck_parent_names, NULL, 0x0,
 435	       OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
 436	       OMAP24XX_54M_SOURCE_SHIFT, OMAP24XX_54M_SOURCE_WIDTH, 0x0, NULL);
 437
 438static struct clk dss_54m_fck;
 439
 440static const char *dss_54m_fck_parent_names[] = {
 441	"func_54m_ck",
 442};
 443
 444static struct clk_hw_omap dss_54m_fck_hw = {
 445	.hw = {
 446		.clk = &dss_54m_fck,
 447	},
 448	.ops		= &clkhwops_wait,
 449	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 450	.enable_bit	= OMAP24XX_EN_TV_SHIFT,
 451	.clkdm_name	= "dss_clkdm",
 452};
 453
 454DEFINE_STRUCT_CLK(dss_54m_fck, dss_54m_fck_parent_names, aes_ick_ops);
 455
 456static struct clk dss_ick;
 457
 458static struct clk_hw_omap dss_ick_hw = {
 459	.hw = {
 460		.clk = &dss_ick,
 461	},
 462	.ops		= &clkhwops_iclk,
 463	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 464	.enable_bit	= OMAP24XX_EN_DSS1_SHIFT,
 465	.clkdm_name	= "dss_clkdm",
 466};
 467
 468DEFINE_STRUCT_CLK(dss_ick, aes_ick_parent_names, aes_ick_ops);
 469
 470static struct clk emul_ck;
 471
 472static struct clk_hw_omap emul_ck_hw = {
 473	.hw = {
 474		.clk = &emul_ck,
 475	},
 476	.enable_reg	= OMAP2430_PRCM_CLKEMUL_CTRL,
 477	.enable_bit	= OMAP24XX_EMULATION_EN_SHIFT,
 478	.clkdm_name	= "wkup_clkdm",
 479};
 480
 481DEFINE_STRUCT_CLK(emul_ck, dss_54m_fck_parent_names, aes_ick_ops);
 482
 483DEFINE_CLK_FIXED_FACTOR(func_12m_ck, "func_48m_ck", &func_48m_ck, 0x0, 1, 4);
 484
 485static struct clk fac_fck;
 486
 487static const char *fac_fck_parent_names[] = {
 488	"func_12m_ck",
 489};
 490
 491static struct clk_hw_omap fac_fck_hw = {
 492	.hw = {
 493		.clk = &fac_fck,
 494	},
 495	.ops		= &clkhwops_wait,
 496	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 497	.enable_bit	= OMAP24XX_EN_FAC_SHIFT,
 498	.clkdm_name	= "core_l4_clkdm",
 499};
 500
 501DEFINE_STRUCT_CLK(fac_fck, fac_fck_parent_names, aes_ick_ops);
 502
 503static struct clk fac_ick;
 504
 505static struct clk_hw_omap fac_ick_hw = {
 506	.hw = {
 507		.clk = &fac_ick,
 508	},
 509	.ops		= &clkhwops_iclk_wait,
 510	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 511	.enable_bit	= OMAP24XX_EN_FAC_SHIFT,
 512	.clkdm_name	= "core_l4_clkdm",
 513};
 514
 515DEFINE_STRUCT_CLK(fac_ick, aes_ick_parent_names, aes_ick_ops);
 516
 517static const struct clksel gfx_fck_clksel[] = {
 518	{ .parent = &core_l3_ck, .rates = gfx_l3_rates },
 519	{ .parent = NULL },
 520};
 521
 522static const char *gfx_2d_fck_parent_names[] = {
 523	"core_l3_ck",
 524};
 525
 526DEFINE_CLK_OMAP_MUX_GATE(gfx_2d_fck, "gfx_clkdm", gfx_fck_clksel,
 527			 OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
 528			 OMAP_CLKSEL_GFX_MASK,
 529			 OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
 530			 OMAP24XX_EN_2D_SHIFT, &clkhwops_wait,
 531			 gfx_2d_fck_parent_names, dsp_fck_ops);
 532
 533DEFINE_CLK_OMAP_MUX_GATE(gfx_3d_fck, "gfx_clkdm", gfx_fck_clksel,
 534			 OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
 535			 OMAP_CLKSEL_GFX_MASK,
 536			 OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
 537			 OMAP24XX_EN_3D_SHIFT, &clkhwops_wait,
 538			 gfx_2d_fck_parent_names, dsp_fck_ops);
 539
 540static struct clk gfx_ick;
 541
 542static const char *gfx_ick_parent_names[] = {
 543	"core_l3_ck",
 544};
 545
 546static struct clk_hw_omap gfx_ick_hw = {
 547	.hw = {
 548		.clk = &gfx_ick,
 549	},
 550	.ops		= &clkhwops_wait,
 551	.enable_reg	= OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
 552	.enable_bit	= OMAP_EN_GFX_SHIFT,
 553	.clkdm_name	= "gfx_clkdm",
 554};
 555
 556DEFINE_STRUCT_CLK(gfx_ick, gfx_ick_parent_names, aes_ick_ops);
 557
 558static struct clk gpio5_fck;
 559
 560static const char *gpio5_fck_parent_names[] = {
 561	"func_32k_ck",
 562};
 563
 564static struct clk_hw_omap gpio5_fck_hw = {
 565	.hw = {
 566		.clk = &gpio5_fck,
 567	},
 568	.ops		= &clkhwops_wait,
 569	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
 570	.enable_bit	= OMAP2430_EN_GPIO5_SHIFT,
 571	.clkdm_name	= "core_l4_clkdm",
 572};
 573
 574DEFINE_STRUCT_CLK(gpio5_fck, gpio5_fck_parent_names, aes_ick_ops);
 575
 576static struct clk gpio5_ick;
 577
 578static struct clk_hw_omap gpio5_ick_hw = {
 579	.hw = {
 580		.clk = &gpio5_ick,
 581	},
 582	.ops		= &clkhwops_iclk_wait,
 583	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 584	.enable_bit	= OMAP2430_EN_GPIO5_SHIFT,
 585	.clkdm_name	= "core_l4_clkdm",
 586};
 587
 588DEFINE_STRUCT_CLK(gpio5_ick, aes_ick_parent_names, aes_ick_ops);
 589
 590static struct clk gpios_fck;
 591
 592static struct clk_hw_omap gpios_fck_hw = {
 593	.hw = {
 594		.clk = &gpios_fck,
 595	},
 596	.ops		= &clkhwops_wait,
 597	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
 598	.enable_bit	= OMAP24XX_EN_GPIOS_SHIFT,
 599	.clkdm_name	= "wkup_clkdm",
 600};
 601
 602DEFINE_STRUCT_CLK(gpios_fck, gpio5_fck_parent_names, aes_ick_ops);
 603
 604static struct clk gpios_ick;
 605
 606static const char *gpios_ick_parent_names[] = {
 607	"sys_ck",
 608};
 609
 610static struct clk_hw_omap gpios_ick_hw = {
 611	.hw = {
 612		.clk = &gpios_ick,
 613	},
 614	.ops		= &clkhwops_iclk_wait,
 615	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
 616	.enable_bit	= OMAP24XX_EN_GPIOS_SHIFT,
 617	.clkdm_name	= "wkup_clkdm",
 618};
 619
 620DEFINE_STRUCT_CLK(gpios_ick, gpios_ick_parent_names, aes_ick_ops);
 621
 622static struct clk gpmc_fck;
 623
 624static struct clk_hw_omap gpmc_fck_hw = {
 625	.hw = {
 626		.clk = &gpmc_fck,
 627	},
 628	.ops		= &clkhwops_iclk,
 629	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
 630	.enable_bit	= OMAP24XX_AUTO_GPMC_SHIFT,
 631	.flags		= ENABLE_ON_INIT,
 632	.clkdm_name	= "core_l3_clkdm",
 633};
 634
 635DEFINE_STRUCT_CLK(gpmc_fck, gfx_ick_parent_names, core_ck_ops);
 636
 637static const struct clksel_rate gpt_alt_rates[] = {
 638	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
 639	{ .div = 0 }
 640};
 641
 642static const struct clksel omap24xx_gpt_clksel[] = {
 643	{ .parent = &func_32k_ck, .rates = gpt_32k_rates },
 644	{ .parent = &sys_ck, .rates = gpt_sys_rates },
 645	{ .parent = &alt_ck, .rates = gpt_alt_rates },
 646	{ .parent = NULL },
 647};
 648
 649static const char *gpt10_fck_parent_names[] = {
 650	"func_32k_ck", "sys_ck", "alt_ck",
 651};
 652
 653DEFINE_CLK_OMAP_MUX_GATE(gpt10_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 654			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 655			 OMAP24XX_CLKSEL_GPT10_MASK,
 656			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 657			 OMAP24XX_EN_GPT10_SHIFT, &clkhwops_wait,
 658			 gpt10_fck_parent_names, dss1_fck_ops);
 659
 660static struct clk gpt10_ick;
 661
 662static struct clk_hw_omap gpt10_ick_hw = {
 663	.hw = {
 664		.clk = &gpt10_ick,
 665	},
 666	.ops		= &clkhwops_iclk_wait,
 667	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 668	.enable_bit	= OMAP24XX_EN_GPT10_SHIFT,
 669	.clkdm_name	= "core_l4_clkdm",
 670};
 671
 672DEFINE_STRUCT_CLK(gpt10_ick, aes_ick_parent_names, aes_ick_ops);
 673
 674DEFINE_CLK_OMAP_MUX_GATE(gpt11_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 675			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 676			 OMAP24XX_CLKSEL_GPT11_MASK,
 677			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 678			 OMAP24XX_EN_GPT11_SHIFT, &clkhwops_wait,
 679			 gpt10_fck_parent_names, dss1_fck_ops);
 680
 681static struct clk gpt11_ick;
 682
 683static struct clk_hw_omap gpt11_ick_hw = {
 684	.hw = {
 685		.clk = &gpt11_ick,
 686	},
 687	.ops		= &clkhwops_iclk_wait,
 688	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 689	.enable_bit	= OMAP24XX_EN_GPT11_SHIFT,
 690	.clkdm_name	= "core_l4_clkdm",
 691};
 692
 693DEFINE_STRUCT_CLK(gpt11_ick, aes_ick_parent_names, aes_ick_ops);
 694
 695DEFINE_CLK_OMAP_MUX_GATE(gpt12_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 696			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 697			 OMAP24XX_CLKSEL_GPT12_MASK,
 698			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 699			 OMAP24XX_EN_GPT12_SHIFT, &clkhwops_wait,
 700			 gpt10_fck_parent_names, dss1_fck_ops);
 701
 702static struct clk gpt12_ick;
 703
 704static struct clk_hw_omap gpt12_ick_hw = {
 705	.hw = {
 706		.clk = &gpt12_ick,
 707	},
 708	.ops		= &clkhwops_iclk_wait,
 709	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 710	.enable_bit	= OMAP24XX_EN_GPT12_SHIFT,
 711	.clkdm_name	= "core_l4_clkdm",
 712};
 713
 714DEFINE_STRUCT_CLK(gpt12_ick, aes_ick_parent_names, aes_ick_ops);
 715
 716static const struct clk_ops gpt1_fck_ops = {
 717	.init		= &omap2_init_clk_clkdm,
 718	.enable		= &omap2_dflt_clk_enable,
 719	.disable	= &omap2_dflt_clk_disable,
 720	.is_enabled	= &omap2_dflt_clk_is_enabled,
 721	.recalc_rate	= &omap2_clksel_recalc,
 722	.set_rate	= &omap2_clksel_set_rate,
 723	.round_rate	= &omap2_clksel_round_rate,
 724	.get_parent	= &omap2_clksel_find_parent_index,
 725	.set_parent	= &omap2_clksel_set_parent,
 726};
 727
 728DEFINE_CLK_OMAP_MUX_GATE(gpt1_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 729			 OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL1),
 730			 OMAP24XX_CLKSEL_GPT1_MASK,
 731			 OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
 732			 OMAP24XX_EN_GPT1_SHIFT, &clkhwops_wait,
 733			 gpt10_fck_parent_names, gpt1_fck_ops);
 734
 735static struct clk gpt1_ick;
 736
 737static struct clk_hw_omap gpt1_ick_hw = {
 738	.hw = {
 739		.clk = &gpt1_ick,
 740	},
 741	.ops		= &clkhwops_iclk_wait,
 742	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
 743	.enable_bit	= OMAP24XX_EN_GPT1_SHIFT,
 744	.clkdm_name	= "wkup_clkdm",
 745};
 746
 747DEFINE_STRUCT_CLK(gpt1_ick, gpios_ick_parent_names, aes_ick_ops);
 748
 749DEFINE_CLK_OMAP_MUX_GATE(gpt2_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 750			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 751			 OMAP24XX_CLKSEL_GPT2_MASK,
 752			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 753			 OMAP24XX_EN_GPT2_SHIFT, &clkhwops_wait,
 754			 gpt10_fck_parent_names, dss1_fck_ops);
 755
 756static struct clk gpt2_ick;
 757
 758static struct clk_hw_omap gpt2_ick_hw = {
 759	.hw = {
 760		.clk = &gpt2_ick,
 761	},
 762	.ops		= &clkhwops_iclk_wait,
 763	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 764	.enable_bit	= OMAP24XX_EN_GPT2_SHIFT,
 765	.clkdm_name	= "core_l4_clkdm",
 766};
 767
 768DEFINE_STRUCT_CLK(gpt2_ick, aes_ick_parent_names, aes_ick_ops);
 769
 770DEFINE_CLK_OMAP_MUX_GATE(gpt3_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 771			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 772			 OMAP24XX_CLKSEL_GPT3_MASK,
 773			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 774			 OMAP24XX_EN_GPT3_SHIFT, &clkhwops_wait,
 775			 gpt10_fck_parent_names, dss1_fck_ops);
 776
 777static struct clk gpt3_ick;
 778
 779static struct clk_hw_omap gpt3_ick_hw = {
 780	.hw = {
 781		.clk = &gpt3_ick,
 782	},
 783	.ops		= &clkhwops_iclk_wait,
 784	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 785	.enable_bit	= OMAP24XX_EN_GPT3_SHIFT,
 786	.clkdm_name	= "core_l4_clkdm",
 787};
 788
 789DEFINE_STRUCT_CLK(gpt3_ick, aes_ick_parent_names, aes_ick_ops);
 790
 791DEFINE_CLK_OMAP_MUX_GATE(gpt4_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 792			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 793			 OMAP24XX_CLKSEL_GPT4_MASK,
 794			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 795			 OMAP24XX_EN_GPT4_SHIFT, &clkhwops_wait,
 796			 gpt10_fck_parent_names, dss1_fck_ops);
 797
 798static struct clk gpt4_ick;
 799
 800static struct clk_hw_omap gpt4_ick_hw = {
 801	.hw = {
 802		.clk = &gpt4_ick,
 803	},
 804	.ops		= &clkhwops_iclk_wait,
 805	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 806	.enable_bit	= OMAP24XX_EN_GPT4_SHIFT,
 807	.clkdm_name	= "core_l4_clkdm",
 808};
 809
 810DEFINE_STRUCT_CLK(gpt4_ick, aes_ick_parent_names, aes_ick_ops);
 811
 812DEFINE_CLK_OMAP_MUX_GATE(gpt5_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 813			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 814			 OMAP24XX_CLKSEL_GPT5_MASK,
 815			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 816			 OMAP24XX_EN_GPT5_SHIFT, &clkhwops_wait,
 817			 gpt10_fck_parent_names, dss1_fck_ops);
 818
 819static struct clk gpt5_ick;
 820
 821static struct clk_hw_omap gpt5_ick_hw = {
 822	.hw = {
 823		.clk = &gpt5_ick,
 824	},
 825	.ops		= &clkhwops_iclk_wait,
 826	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 827	.enable_bit	= OMAP24XX_EN_GPT5_SHIFT,
 828	.clkdm_name	= "core_l4_clkdm",
 829};
 830
 831DEFINE_STRUCT_CLK(gpt5_ick, aes_ick_parent_names, aes_ick_ops);
 832
 833DEFINE_CLK_OMAP_MUX_GATE(gpt6_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 834			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 835			 OMAP24XX_CLKSEL_GPT6_MASK,
 836			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 837			 OMAP24XX_EN_GPT6_SHIFT, &clkhwops_wait,
 838			 gpt10_fck_parent_names, dss1_fck_ops);
 839
 840static struct clk gpt6_ick;
 841
 842static struct clk_hw_omap gpt6_ick_hw = {
 843	.hw = {
 844		.clk = &gpt6_ick,
 845	},
 846	.ops		= &clkhwops_iclk_wait,
 847	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 848	.enable_bit	= OMAP24XX_EN_GPT6_SHIFT,
 849	.clkdm_name	= "core_l4_clkdm",
 850};
 851
 852DEFINE_STRUCT_CLK(gpt6_ick, aes_ick_parent_names, aes_ick_ops);
 853
 854DEFINE_CLK_OMAP_MUX_GATE(gpt7_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 855			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 856			 OMAP24XX_CLKSEL_GPT7_MASK,
 857			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 858			 OMAP24XX_EN_GPT7_SHIFT, &clkhwops_wait,
 859			 gpt10_fck_parent_names, dss1_fck_ops);
 860
 861static struct clk gpt7_ick;
 862
 863static struct clk_hw_omap gpt7_ick_hw = {
 864	.hw = {
 865		.clk = &gpt7_ick,
 866	},
 867	.ops		= &clkhwops_iclk_wait,
 868	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 869	.enable_bit	= OMAP24XX_EN_GPT7_SHIFT,
 870	.clkdm_name	= "core_l4_clkdm",
 871};
 872
 873DEFINE_STRUCT_CLK(gpt7_ick, aes_ick_parent_names, aes_ick_ops);
 874
 875static struct clk gpt8_fck;
 876
 877DEFINE_CLK_OMAP_MUX_GATE(gpt8_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 878			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 879			 OMAP24XX_CLKSEL_GPT8_MASK,
 880			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 881			 OMAP24XX_EN_GPT8_SHIFT, &clkhwops_wait,
 882			 gpt10_fck_parent_names, dss1_fck_ops);
 883
 884static struct clk gpt8_ick;
 885
 886static struct clk_hw_omap gpt8_ick_hw = {
 887	.hw = {
 888		.clk = &gpt8_ick,
 889	},
 890	.ops		= &clkhwops_iclk_wait,
 891	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 892	.enable_bit	= OMAP24XX_EN_GPT8_SHIFT,
 893	.clkdm_name	= "core_l4_clkdm",
 894};
 895
 896DEFINE_STRUCT_CLK(gpt8_ick, aes_ick_parent_names, aes_ick_ops);
 897
 898DEFINE_CLK_OMAP_MUX_GATE(gpt9_fck, "core_l4_clkdm", omap24xx_gpt_clksel,
 899			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL2),
 900			 OMAP24XX_CLKSEL_GPT9_MASK,
 901			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 902			 OMAP24XX_EN_GPT9_SHIFT, &clkhwops_wait,
 903			 gpt10_fck_parent_names, dss1_fck_ops);
 904
 905static struct clk gpt9_ick;
 906
 907static struct clk_hw_omap gpt9_ick_hw = {
 908	.hw = {
 909		.clk = &gpt9_ick,
 910	},
 911	.ops		= &clkhwops_iclk_wait,
 912	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 913	.enable_bit	= OMAP24XX_EN_GPT9_SHIFT,
 914	.clkdm_name	= "core_l4_clkdm",
 915};
 916
 917DEFINE_STRUCT_CLK(gpt9_ick, aes_ick_parent_names, aes_ick_ops);
 918
 919static struct clk hdq_fck;
 920
 921static struct clk_hw_omap hdq_fck_hw = {
 922	.hw = {
 923		.clk = &hdq_fck,
 924	},
 925	.ops		= &clkhwops_wait,
 926	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
 927	.enable_bit	= OMAP24XX_EN_HDQ_SHIFT,
 928	.clkdm_name	= "core_l4_clkdm",
 929};
 930
 931DEFINE_STRUCT_CLK(hdq_fck, fac_fck_parent_names, aes_ick_ops);
 932
 933static struct clk hdq_ick;
 934
 935static struct clk_hw_omap hdq_ick_hw = {
 936	.hw = {
 937		.clk = &hdq_ick,
 938	},
 939	.ops		= &clkhwops_iclk_wait,
 940	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 941	.enable_bit	= OMAP24XX_EN_HDQ_SHIFT,
 942	.clkdm_name	= "core_l4_clkdm",
 943};
 944
 945DEFINE_STRUCT_CLK(hdq_ick, aes_ick_parent_names, aes_ick_ops);
 946
 947static struct clk i2c1_ick;
 948
 949static struct clk_hw_omap i2c1_ick_hw = {
 950	.hw = {
 951		.clk = &i2c1_ick,
 952	},
 953	.ops		= &clkhwops_iclk_wait,
 954	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 955	.enable_bit	= OMAP2420_EN_I2C1_SHIFT,
 956	.clkdm_name	= "core_l4_clkdm",
 957};
 958
 959DEFINE_STRUCT_CLK(i2c1_ick, aes_ick_parent_names, aes_ick_ops);
 960
 961static struct clk i2c2_ick;
 962
 963static struct clk_hw_omap i2c2_ick_hw = {
 964	.hw = {
 965		.clk = &i2c2_ick,
 966	},
 967	.ops		= &clkhwops_iclk_wait,
 968	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 969	.enable_bit	= OMAP2420_EN_I2C2_SHIFT,
 970	.clkdm_name	= "core_l4_clkdm",
 971};
 972
 973DEFINE_STRUCT_CLK(i2c2_ick, aes_ick_parent_names, aes_ick_ops);
 974
 975static struct clk i2chs1_fck;
 976
 977static struct clk_hw_omap i2chs1_fck_hw = {
 978	.hw = {
 979		.clk = &i2chs1_fck,
 980	},
 981	.ops		= &clkhwops_omap2430_i2chs_wait,
 982	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
 983	.enable_bit	= OMAP2430_EN_I2CHS1_SHIFT,
 984	.clkdm_name	= "core_l4_clkdm",
 985};
 986
 987DEFINE_STRUCT_CLK(i2chs1_fck, cam_fck_parent_names, aes_ick_ops);
 988
 989static struct clk i2chs2_fck;
 990
 991static struct clk_hw_omap i2chs2_fck_hw = {
 992	.hw = {
 993		.clk = &i2chs2_fck,
 994	},
 995	.ops		= &clkhwops_omap2430_i2chs_wait,
 996	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
 997	.enable_bit	= OMAP2430_EN_I2CHS2_SHIFT,
 998	.clkdm_name	= "core_l4_clkdm",
 999};
1000
1001DEFINE_STRUCT_CLK(i2chs2_fck, cam_fck_parent_names, aes_ick_ops);
1002
1003static struct clk icr_ick;
1004
1005static struct clk_hw_omap icr_ick_hw = {
1006	.hw = {
1007		.clk = &icr_ick,
1008	},
1009	.ops		= &clkhwops_iclk_wait,
1010	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1011	.enable_bit	= OMAP2430_EN_ICR_SHIFT,
1012	.clkdm_name	= "wkup_clkdm",
1013};
1014
1015DEFINE_STRUCT_CLK(icr_ick, gpios_ick_parent_names, aes_ick_ops);
1016
1017static const struct clksel dsp_ick_clksel[] = {
1018	{ .parent = &dsp_fck, .rates = dsp_ick_rates },
1019	{ .parent = NULL },
1020};
1021
1022static const char *iva2_1_ick_parent_names[] = {
1023	"dsp_fck",
1024};
1025
1026DEFINE_CLK_OMAP_MUX_GATE(iva2_1_ick, "dsp_clkdm", dsp_ick_clksel,
1027			 OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
1028			 OMAP24XX_CLKSEL_DSP_IF_MASK,
1029			 OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
1030			 OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, &clkhwops_wait,
1031			 iva2_1_ick_parent_names, dsp_fck_ops);
1032
1033static struct clk mailboxes_ick;
1034
1035static struct clk_hw_omap mailboxes_ick_hw = {
1036	.hw = {
1037		.clk = &mailboxes_ick,
1038	},
1039	.ops		= &clkhwops_iclk_wait,
1040	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1041	.enable_bit	= OMAP24XX_EN_MAILBOXES_SHIFT,
1042	.clkdm_name	= "core_l4_clkdm",
1043};
1044
1045DEFINE_STRUCT_CLK(mailboxes_ick, aes_ick_parent_names, aes_ick_ops);
1046
1047static const struct clksel_rate common_mcbsp_96m_rates[] = {
1048	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
1049	{ .div = 0 }
1050};
1051
1052static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1053	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
1054	{ .div = 0 }
1055};
1056
1057static const struct clksel mcbsp_fck_clksel[] = {
1058	{ .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates },
1059	{ .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1060	{ .parent = NULL },
1061};
1062
1063static const char *mcbsp1_fck_parent_names[] = {
1064	"func_96m_ck", "mcbsp_clks",
1065};
1066
1067DEFINE_CLK_OMAP_MUX_GATE(mcbsp1_fck, "core_l4_clkdm", mcbsp_fck_clksel,
1068			 OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1069			 OMAP2_MCBSP1_CLKS_MASK,
1070			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1071			 OMAP24XX_EN_MCBSP1_SHIFT, &clkhwops_wait,
1072			 mcbsp1_fck_parent_names, dss1_fck_ops);
1073
1074static struct clk mcbsp1_ick;
1075
1076static struct clk_hw_omap mcbsp1_ick_hw = {
1077	.hw = {
1078		.clk = &mcbsp1_ick,
1079	},
1080	.ops		= &clkhwops_iclk_wait,
1081	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1082	.enable_bit	= OMAP24XX_EN_MCBSP1_SHIFT,
1083	.clkdm_name	= "core_l4_clkdm",
1084};
1085
1086DEFINE_STRUCT_CLK(mcbsp1_ick, aes_ick_parent_names, aes_ick_ops);
1087
1088DEFINE_CLK_OMAP_MUX_GATE(mcbsp2_fck, "core_l4_clkdm", mcbsp_fck_clksel,
1089			 OMAP243X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1090			 OMAP2_MCBSP2_CLKS_MASK,
1091			 OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1092			 OMAP24XX_EN_MCBSP2_SHIFT, &clkhwops_wait,
1093			 mcbsp1_fck_parent_names, dss1_fck_ops);
1094
1095static struct clk mcbsp2_ick;
1096
1097static struct clk_hw_omap mcbsp2_ick_hw = {
1098	.hw = {
1099		.clk = &mcbsp2_ick,
1100	},
1101	.ops		= &clkhwops_iclk_wait,
1102	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1103	.enable_bit	= OMAP24XX_EN_MCBSP2_SHIFT,
1104	.clkdm_name	= "core_l4_clkdm",
1105};
1106
1107DEFINE_STRUCT_CLK(mcbsp2_ick, aes_ick_parent_names, aes_ick_ops);
1108
1109DEFINE_CLK_OMAP_MUX_GATE(mcbsp3_fck, "core_l4_clkdm", mcbsp_fck_clksel,
1110			 OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1111			 OMAP2_MCBSP3_CLKS_MASK,
1112			 OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1113			 OMAP2430_EN_MCBSP3_SHIFT, &clkhwops_wait,
1114			 mcbsp1_fck_parent_names, dss1_fck_ops);
1115
1116static struct clk mcbsp3_ick;
1117
1118static struct clk_hw_omap mcbsp3_ick_hw = {
1119	.hw = {
1120		.clk = &mcbsp3_ick,
1121	},
1122	.ops		= &clkhwops_iclk_wait,
1123	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1124	.enable_bit	= OMAP2430_EN_MCBSP3_SHIFT,
1125	.clkdm_name	= "core_l4_clkdm",
1126};
1127
1128DEFINE_STRUCT_CLK(mcbsp3_ick, aes_ick_parent_names, aes_ick_ops);
1129
1130DEFINE_CLK_OMAP_MUX_GATE(mcbsp4_fck, "core_l4_clkdm", mcbsp_fck_clksel,
1131			 OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1132			 OMAP2_MCBSP4_CLKS_MASK,
1133			 OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1134			 OMAP2430_EN_MCBSP4_SHIFT, &clkhwops_wait,
1135			 mcbsp1_fck_parent_names, dss1_fck_ops);
1136
1137static struct clk mcbsp4_ick;
1138
1139static struct clk_hw_omap mcbsp4_ick_hw = {
1140	.hw = {
1141		.clk = &mcbsp4_ick,
1142	},
1143	.ops		= &clkhwops_iclk_wait,
1144	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1145	.enable_bit	= OMAP2430_EN_MCBSP4_SHIFT,
1146	.clkdm_name	= "core_l4_clkdm",
1147};
1148
1149DEFINE_STRUCT_CLK(mcbsp4_ick, aes_ick_parent_names, aes_ick_ops);
1150
1151DEFINE_CLK_OMAP_MUX_GATE(mcbsp5_fck, "core_l4_clkdm", mcbsp_fck_clksel,
1152			 OMAP243X_CTRL_REGADDR(OMAP243X_CONTROL_DEVCONF1),
1153			 OMAP2_MCBSP5_CLKS_MASK,
1154			 OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1155			 OMAP2430_EN_MCBSP5_SHIFT, &clkhwops_wait,
1156			 mcbsp1_fck_parent_names, dss1_fck_ops);
1157
1158static struct clk mcbsp5_ick;
1159
1160static struct clk_hw_omap mcbsp5_ick_hw = {
1161	.hw = {
1162		.clk = &mcbsp5_ick,
1163	},
1164	.ops		= &clkhwops_iclk_wait,
1165	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1166	.enable_bit	= OMAP2430_EN_MCBSP5_SHIFT,
1167	.clkdm_name	= "core_l4_clkdm",
1168};
1169
1170DEFINE_STRUCT_CLK(mcbsp5_ick, aes_ick_parent_names, aes_ick_ops);
1171
1172static struct clk mcspi1_fck;
1173
1174static const char *mcspi1_fck_parent_names[] = {
1175	"func_48m_ck",
1176};
1177
1178static struct clk_hw_omap mcspi1_fck_hw = {
1179	.hw = {
1180		.clk = &mcspi1_fck,
1181	},
1182	.ops		= &clkhwops_wait,
1183	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1184	.enable_bit	= OMAP24XX_EN_MCSPI1_SHIFT,
1185	.clkdm_name	= "core_l4_clkdm",
1186};
1187
1188DEFINE_STRUCT_CLK(mcspi1_fck, mcspi1_fck_parent_names, aes_ick_ops);
1189
1190static struct clk mcspi1_ick;
1191
1192static struct clk_hw_omap mcspi1_ick_hw = {
1193	.hw = {
1194		.clk = &mcspi1_ick,
1195	},
1196	.ops		= &clkhwops_iclk_wait,
1197	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1198	.enable_bit	= OMAP24XX_EN_MCSPI1_SHIFT,
1199	.clkdm_name	= "core_l4_clkdm",
1200};
1201
1202DEFINE_STRUCT_CLK(mcspi1_ick, aes_ick_parent_names, aes_ick_ops);
1203
1204static struct clk mcspi2_fck;
1205
1206static struct clk_hw_omap mcspi2_fck_hw = {
1207	.hw = {
1208		.clk = &mcspi2_fck,
1209	},
1210	.ops		= &clkhwops_wait,
1211	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1212	.enable_bit	= OMAP24XX_EN_MCSPI2_SHIFT,
1213	.clkdm_name	= "core_l4_clkdm",
1214};
1215
1216DEFINE_STRUCT_CLK(mcspi2_fck, mcspi1_fck_parent_names, aes_ick_ops);
1217
1218static struct clk mcspi2_ick;
1219
1220static struct clk_hw_omap mcspi2_ick_hw = {
1221	.hw = {
1222		.clk = &mcspi2_ick,
1223	},
1224	.ops		= &clkhwops_iclk_wait,
1225	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1226	.enable_bit	= OMAP24XX_EN_MCSPI2_SHIFT,
1227	.clkdm_name	= "core_l4_clkdm",
1228};
1229
1230DEFINE_STRUCT_CLK(mcspi2_ick, aes_ick_parent_names, aes_ick_ops);
1231
1232static struct clk mcspi3_fck;
1233
1234static struct clk_hw_omap mcspi3_fck_hw = {
1235	.hw = {
1236		.clk = &mcspi3_fck,
1237	},
1238	.ops		= &clkhwops_wait,
1239	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1240	.enable_bit	= OMAP2430_EN_MCSPI3_SHIFT,
1241	.clkdm_name	= "core_l4_clkdm",
1242};
1243
1244DEFINE_STRUCT_CLK(mcspi3_fck, mcspi1_fck_parent_names, aes_ick_ops);
1245
1246static struct clk mcspi3_ick;
1247
1248static struct clk_hw_omap mcspi3_ick_hw = {
1249	.hw = {
1250		.clk = &mcspi3_ick,
1251	},
1252	.ops		= &clkhwops_iclk_wait,
1253	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1254	.enable_bit	= OMAP2430_EN_MCSPI3_SHIFT,
1255	.clkdm_name	= "core_l4_clkdm",
1256};
1257
1258DEFINE_STRUCT_CLK(mcspi3_ick, aes_ick_parent_names, aes_ick_ops);
1259
1260static const struct clksel_rate mdm_ick_core_rates[] = {
1261	{ .div = 1, .val = 1, .flags = RATE_IN_243X },
1262	{ .div = 4, .val = 4, .flags = RATE_IN_243X },
1263	{ .div = 6, .val = 6, .flags = RATE_IN_243X },
1264	{ .div = 9, .val = 9, .flags = RATE_IN_243X },
1265	{ .div = 0 }
1266};
1267
1268static const struct clksel mdm_ick_clksel[] = {
1269	{ .parent = &core_ck, .rates = mdm_ick_core_rates },
1270	{ .parent = NULL },
1271};
1272
1273static const char *mdm_ick_parent_names[] = {
1274	"core_ck",
1275};
1276
1277DEFINE_CLK_OMAP_MUX_GATE(mdm_ick, "mdm_clkdm", mdm_ick_clksel,
1278			 OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_CLKSEL),
1279			 OMAP2430_CLKSEL_MDM_MASK,
1280			 OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN),
1281			 OMAP2430_CM_ICLKEN_MDM_EN_MDM_SHIFT,
1282			 &clkhwops_iclk_wait, mdm_ick_parent_names,
1283			 dsp_fck_ops);
1284
1285static struct clk mdm_intc_ick;
1286
1287static struct clk_hw_omap mdm_intc_ick_hw = {
1288	.hw = {
1289		.clk = &mdm_intc_ick,
1290	},
1291	.ops		= &clkhwops_iclk_wait,
1292	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1293	.enable_bit	= OMAP2430_EN_MDM_INTC_SHIFT,
1294	.clkdm_name	= "core_l4_clkdm",
1295};
1296
1297DEFINE_STRUCT_CLK(mdm_intc_ick, aes_ick_parent_names, aes_ick_ops);
1298
1299static struct clk mdm_osc_ck;
1300
1301static struct clk_hw_omap mdm_osc_ck_hw = {
1302	.hw = {
1303		.clk = &mdm_osc_ck,
1304	},
1305	.ops		= &clkhwops_iclk_wait,
1306	.enable_reg	= OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN),
1307	.enable_bit	= OMAP2430_EN_OSC_SHIFT,
1308	.clkdm_name	= "mdm_clkdm",
1309};
1310
1311DEFINE_STRUCT_CLK(mdm_osc_ck, sys_ck_parent_names, aes_ick_ops);
1312
1313static struct clk mmchs1_fck;
1314
1315static struct clk_hw_omap mmchs1_fck_hw = {
1316	.hw = {
1317		.clk = &mmchs1_fck,
1318	},
1319	.ops		= &clkhwops_wait,
1320	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1321	.enable_bit	= OMAP2430_EN_MMCHS1_SHIFT,
1322	.clkdm_name	= "core_l4_clkdm",
1323};
1324
1325DEFINE_STRUCT_CLK(mmchs1_fck, cam_fck_parent_names, aes_ick_ops);
1326
1327static struct clk mmchs1_ick;
1328
1329static struct clk_hw_omap mmchs1_ick_hw = {
1330	.hw = {
1331		.clk = &mmchs1_ick,
1332	},
1333	.ops		= &clkhwops_iclk_wait,
1334	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1335	.enable_bit	= OMAP2430_EN_MMCHS1_SHIFT,
1336	.clkdm_name	= "core_l4_clkdm",
1337};
1338
1339DEFINE_STRUCT_CLK(mmchs1_ick, aes_ick_parent_names, aes_ick_ops);
1340
1341static struct clk mmchs2_fck;
1342
1343static struct clk_hw_omap mmchs2_fck_hw = {
1344	.hw = {
1345		.clk = &mmchs2_fck,
1346	},
1347	.ops		= &clkhwops_wait,
1348	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1349	.enable_bit	= OMAP2430_EN_MMCHS2_SHIFT,
1350	.clkdm_name	= "core_l4_clkdm",
1351};
1352
1353DEFINE_STRUCT_CLK(mmchs2_fck, cam_fck_parent_names, aes_ick_ops);
1354
1355static struct clk mmchs2_ick;
1356
1357static struct clk_hw_omap mmchs2_ick_hw = {
1358	.hw = {
1359		.clk = &mmchs2_ick,
1360	},
1361	.ops		= &clkhwops_iclk_wait,
1362	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1363	.enable_bit	= OMAP2430_EN_MMCHS2_SHIFT,
1364	.clkdm_name	= "core_l4_clkdm",
1365};
1366
1367DEFINE_STRUCT_CLK(mmchs2_ick, aes_ick_parent_names, aes_ick_ops);
1368
1369static struct clk mmchsdb1_fck;
1370
1371static struct clk_hw_omap mmchsdb1_fck_hw = {
1372	.hw = {
1373		.clk = &mmchsdb1_fck,
1374	},
1375	.ops		= &clkhwops_wait,
1376	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1377	.enable_bit	= OMAP2430_EN_MMCHSDB1_SHIFT,
1378	.clkdm_name	= "core_l4_clkdm",
1379};
1380
1381DEFINE_STRUCT_CLK(mmchsdb1_fck, gpio5_fck_parent_names, aes_ick_ops);
1382
1383static struct clk mmchsdb2_fck;
1384
1385static struct clk_hw_omap mmchsdb2_fck_hw = {
1386	.hw = {
1387		.clk = &mmchsdb2_fck,
1388	},
1389	.ops		= &clkhwops_wait,
1390	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1391	.enable_bit	= OMAP2430_EN_MMCHSDB2_SHIFT,
1392	.clkdm_name	= "core_l4_clkdm",
1393};
1394
1395DEFINE_STRUCT_CLK(mmchsdb2_fck, gpio5_fck_parent_names, aes_ick_ops);
1396
1397DEFINE_CLK_DIVIDER(mpu_ck, "core_ck", &core_ck, 0x0,
1398		   OMAP_CM_REGADDR(MPU_MOD, CM_CLKSEL),
1399		   OMAP24XX_CLKSEL_MPU_SHIFT, OMAP24XX_CLKSEL_MPU_WIDTH,
1400		   CLK_DIVIDER_ONE_BASED, NULL);
1401
1402static struct clk mpu_wdt_fck;
1403
1404static struct clk_hw_omap mpu_wdt_fck_hw = {
1405	.hw = {
1406		.clk = &mpu_wdt_fck,
1407	},
1408	.ops		= &clkhwops_wait,
1409	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
1410	.enable_bit	= OMAP24XX_EN_MPU_WDT_SHIFT,
1411	.clkdm_name	= "wkup_clkdm",
1412};
1413
1414DEFINE_STRUCT_CLK(mpu_wdt_fck, gpio5_fck_parent_names, aes_ick_ops);
1415
1416static struct clk mpu_wdt_ick;
1417
1418static struct clk_hw_omap mpu_wdt_ick_hw = {
1419	.hw = {
1420		.clk = &mpu_wdt_ick,
1421	},
1422	.ops		= &clkhwops_iclk_wait,
1423	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1424	.enable_bit	= OMAP24XX_EN_MPU_WDT_SHIFT,
1425	.clkdm_name	= "wkup_clkdm",
1426};
1427
1428DEFINE_STRUCT_CLK(mpu_wdt_ick, gpios_ick_parent_names, aes_ick_ops);
1429
1430static struct clk mspro_fck;
1431
1432static struct clk_hw_omap mspro_fck_hw = {
1433	.hw = {
1434		.clk = &mspro_fck,
1435	},
1436	.ops		= &clkhwops_wait,
1437	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1438	.enable_bit	= OMAP24XX_EN_MSPRO_SHIFT,
1439	.clkdm_name	= "core_l4_clkdm",
1440};
1441
1442DEFINE_STRUCT_CLK(mspro_fck, cam_fck_parent_names, aes_ick_ops);
1443
1444static struct clk mspro_ick;
1445
1446static struct clk_hw_omap mspro_ick_hw = {
1447	.hw = {
1448		.clk = &mspro_ick,
1449	},
1450	.ops		= &clkhwops_iclk_wait,
1451	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1452	.enable_bit	= OMAP24XX_EN_MSPRO_SHIFT,
1453	.clkdm_name	= "core_l4_clkdm",
1454};
1455
1456DEFINE_STRUCT_CLK(mspro_ick, aes_ick_parent_names, aes_ick_ops);
1457
1458static struct clk omapctrl_ick;
1459
1460static struct clk_hw_omap omapctrl_ick_hw = {
1461	.hw = {
1462		.clk = &omapctrl_ick,
1463	},
1464	.ops		= &clkhwops_iclk_wait,
1465	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1466	.enable_bit	= OMAP24XX_EN_OMAPCTRL_SHIFT,
1467	.flags		= ENABLE_ON_INIT,
1468	.clkdm_name	= "wkup_clkdm",
1469};
1470
1471DEFINE_STRUCT_CLK(omapctrl_ick, gpios_ick_parent_names, aes_ick_ops);
1472
1473static struct clk pka_ick;
1474
1475static struct clk_hw_omap pka_ick_hw = {
1476	.hw = {
1477		.clk = &pka_ick,
1478	},
1479	.ops		= &clkhwops_iclk_wait,
1480	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1481	.enable_bit	= OMAP24XX_EN_PKA_SHIFT,
1482	.clkdm_name	= "core_l4_clkdm",
1483};
1484
1485DEFINE_STRUCT_CLK(pka_ick, aes_ick_parent_names, aes_ick_ops);
1486
1487static struct clk rng_ick;
1488
1489static struct clk_hw_omap rng_ick_hw = {
1490	.hw = {
1491		.clk = &rng_ick,
1492	},
1493	.ops		= &clkhwops_iclk_wait,
1494	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1495	.enable_bit	= OMAP24XX_EN_RNG_SHIFT,
1496	.clkdm_name	= "core_l4_clkdm",
1497};
1498
1499DEFINE_STRUCT_CLK(rng_ick, aes_ick_parent_names, aes_ick_ops);
1500
1501static struct clk sdma_fck;
1502
1503DEFINE_STRUCT_CLK_HW_OMAP(sdma_fck, "core_l3_clkdm");
1504DEFINE_STRUCT_CLK(sdma_fck, gfx_ick_parent_names, core_ck_ops);
1505
1506static struct clk sdma_ick;
1507
1508static struct clk_hw_omap sdma_ick_hw = {
1509	.hw = {
1510		.clk = &sdma_ick,
1511	},
1512	.ops		= &clkhwops_iclk,
1513	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1514	.enable_bit	= OMAP24XX_AUTO_SDMA_SHIFT,
1515	.clkdm_name	= "core_l3_clkdm",
1516};
1517
1518DEFINE_STRUCT_CLK(sdma_ick, gfx_ick_parent_names, core_ck_ops);
1519
1520static struct clk sdrc_ick;
1521
1522static struct clk_hw_omap sdrc_ick_hw = {
1523	.hw = {
1524		.clk = &sdrc_ick,
1525	},
1526	.ops		= &clkhwops_iclk,
1527	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1528	.enable_bit	= OMAP2430_EN_SDRC_SHIFT,
1529	.flags		= ENABLE_ON_INIT,
1530	.clkdm_name	= "core_l3_clkdm",
1531};
1532
1533DEFINE_STRUCT_CLK(sdrc_ick, gfx_ick_parent_names, core_ck_ops);
1534
1535static struct clk sha_ick;
1536
1537static struct clk_hw_omap sha_ick_hw = {
1538	.hw = {
1539		.clk = &sha_ick,
1540	},
1541	.ops		= &clkhwops_iclk_wait,
1542	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
1543	.enable_bit	= OMAP24XX_EN_SHA_SHIFT,
1544	.clkdm_name	= "core_l4_clkdm",
1545};
1546
1547DEFINE_STRUCT_CLK(sha_ick, aes_ick_parent_names, aes_ick_ops);
1548
1549static struct clk ssi_l4_ick;
1550
1551static struct clk_hw_omap ssi_l4_ick_hw = {
1552	.hw = {
1553		.clk = &ssi_l4_ick,
1554	},
1555	.ops		= &clkhwops_iclk_wait,
1556	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1557	.enable_bit	= OMAP24XX_EN_SSI_SHIFT,
1558	.clkdm_name	= "core_l4_clkdm",
1559};
1560
1561DEFINE_STRUCT_CLK(ssi_l4_ick, aes_ick_parent_names, aes_ick_ops);
1562
1563static const struct clksel_rate ssi_ssr_sst_fck_core_rates[] = {
1564	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
1565	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
1566	{ .div = 3, .val = 3, .flags = RATE_IN_24XX },
1567	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
1568	{ .div = 5, .val = 5, .flags = RATE_IN_243X },
1569	{ .div = 0 }
1570};
1571
1572static const struct clksel ssi_ssr_sst_fck_clksel[] = {
1573	{ .parent = &core_ck, .rates = ssi_ssr_sst_fck_core_rates },
1574	{ .parent = NULL },
1575};
1576
1577static const char *ssi_ssr_sst_fck_parent_names[] = {
1578	"core_ck",
1579};
1580
1581DEFINE_CLK_OMAP_MUX_GATE(ssi_ssr_sst_fck, "core_l3_clkdm",
1582			 ssi_ssr_sst_fck_clksel,
1583			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
1584			 OMAP24XX_CLKSEL_SSI_MASK,
1585			 OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1586			 OMAP24XX_EN_SSI_SHIFT, &clkhwops_wait,
1587			 ssi_ssr_sst_fck_parent_names, dsp_fck_ops);
1588
1589static struct clk sync_32k_ick;
1590
1591static struct clk_hw_omap sync_32k_ick_hw = {
1592	.hw = {
1593		.clk = &sync_32k_ick,
1594	},
1595	.ops		= &clkhwops_iclk_wait,
1596	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1597	.enable_bit	= OMAP24XX_EN_32KSYNC_SHIFT,
1598	.flags		= ENABLE_ON_INIT,
1599	.clkdm_name	= "wkup_clkdm",
1600};
1601
1602DEFINE_STRUCT_CLK(sync_32k_ick, gpios_ick_parent_names, aes_ick_ops);
1603
1604static const struct clksel_rate common_clkout_src_core_rates[] = {
1605	{ .div = 1, .val = 0, .flags = RATE_IN_24XX },
1606	{ .div = 0 }
1607};
1608
1609static const struct clksel_rate common_clkout_src_sys_rates[] = {
1610	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
1611	{ .div = 0 }
1612};
1613
1614static const struct clksel_rate common_clkout_src_96m_rates[] = {
1615	{ .div = 1, .val = 2, .flags = RATE_IN_24XX },
1616	{ .div = 0 }
1617};
1618
1619static const struct clksel_rate common_clkout_src_54m_rates[] = {
1620	{ .div = 1, .val = 3, .flags = RATE_IN_24XX },
1621	{ .div = 0 }
1622};
1623
1624static const struct clksel common_clkout_src_clksel[] = {
1625	{ .parent = &core_ck, .rates = common_clkout_src_core_rates },
1626	{ .parent = &sys_ck, .rates = common_clkout_src_sys_rates },
1627	{ .parent = &func_96m_ck, .rates = common_clkout_src_96m_rates },
1628	{ .parent = &func_54m_ck, .rates = common_clkout_src_54m_rates },
1629	{ .parent = NULL },
1630};
1631
1632static const char *sys_clkout_src_parent_names[] = {
1633	"core_ck", "sys_ck", "func_96m_ck", "func_54m_ck",
1634};
1635
1636DEFINE_CLK_OMAP_MUX_GATE(sys_clkout_src, "wkup_clkdm", common_clkout_src_clksel,
1637			 OMAP2430_PRCM_CLKOUT_CTRL, OMAP24XX_CLKOUT_SOURCE_MASK,
1638			 OMAP2430_PRCM_CLKOUT_CTRL, OMAP24XX_CLKOUT_EN_SHIFT,
1639			 NULL, sys_clkout_src_parent_names, gpt1_fck_ops);
1640
1641DEFINE_CLK_DIVIDER(sys_clkout, "sys_clkout_src", &sys_clkout_src, 0x0,
1642		   OMAP2430_PRCM_CLKOUT_CTRL, OMAP24XX_CLKOUT_DIV_SHIFT,
1643		   OMAP24XX_CLKOUT_DIV_WIDTH, CLK_DIVIDER_POWER_OF_TWO, NULL);
1644
1645static struct clk uart1_fck;
1646
1647static struct clk_hw_omap uart1_fck_hw = {
1648	.hw = {
1649		.clk = &uart1_fck,
1650	},
1651	.ops		= &clkhwops_wait,
1652	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1653	.enable_bit	= OMAP24XX_EN_UART1_SHIFT,
1654	.clkdm_name	= "core_l4_clkdm",
1655};
1656
1657DEFINE_STRUCT_CLK(uart1_fck, mcspi1_fck_parent_names, aes_ick_ops);
1658
1659static struct clk uart1_ick;
1660
1661static struct clk_hw_omap uart1_ick_hw = {
1662	.hw = {
1663		.clk = &uart1_ick,
1664	},
1665	.ops		= &clkhwops_iclk_wait,
1666	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1667	.enable_bit	= OMAP24XX_EN_UART1_SHIFT,
1668	.clkdm_name	= "core_l4_clkdm",
1669};
1670
1671DEFINE_STRUCT_CLK(uart1_ick, aes_ick_parent_names, aes_ick_ops);
1672
1673static struct clk uart2_fck;
1674
1675static struct clk_hw_omap uart2_fck_hw = {
1676	.hw = {
1677		.clk = &uart2_fck,
1678	},
1679	.ops		= &clkhwops_wait,
1680	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1681	.enable_bit	= OMAP24XX_EN_UART2_SHIFT,
1682	.clkdm_name	= "core_l4_clkdm",
1683};
1684
1685DEFINE_STRUCT_CLK(uart2_fck, mcspi1_fck_parent_names, aes_ick_ops);
1686
1687static struct clk uart2_ick;
1688
1689static struct clk_hw_omap uart2_ick_hw = {
1690	.hw = {
1691		.clk = &uart2_ick,
1692	},
1693	.ops		= &clkhwops_iclk_wait,
1694	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1695	.enable_bit	= OMAP24XX_EN_UART2_SHIFT,
1696	.clkdm_name	= "core_l4_clkdm",
1697};
1698
1699DEFINE_STRUCT_CLK(uart2_ick, aes_ick_parent_names, aes_ick_ops);
1700
1701static struct clk uart3_fck;
1702
1703static struct clk_hw_omap uart3_fck_hw = {
1704	.hw = {
1705		.clk = &uart3_fck,
1706	},
1707	.ops		= &clkhwops_wait,
1708	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1709	.enable_bit	= OMAP24XX_EN_UART3_SHIFT,
1710	.clkdm_name	= "core_l4_clkdm",
1711};
1712
1713DEFINE_STRUCT_CLK(uart3_fck, mcspi1_fck_parent_names, aes_ick_ops);
1714
1715static struct clk uart3_ick;
1716
1717static struct clk_hw_omap uart3_ick_hw = {
1718	.hw = {
1719		.clk = &uart3_ick,
1720	},
1721	.ops		= &clkhwops_iclk_wait,
1722	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1723	.enable_bit	= OMAP24XX_EN_UART3_SHIFT,
1724	.clkdm_name	= "core_l4_clkdm",
1725};
1726
1727DEFINE_STRUCT_CLK(uart3_ick, aes_ick_parent_names, aes_ick_ops);
1728
1729static struct clk usb_fck;
1730
1731static struct clk_hw_omap usb_fck_hw = {
1732	.hw = {
1733		.clk = &usb_fck,
1734	},
1735	.ops		= &clkhwops_wait,
1736	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),
1737	.enable_bit	= OMAP24XX_EN_USB_SHIFT,
1738	.clkdm_name	= "core_l3_clkdm",
1739};
1740
1741DEFINE_STRUCT_CLK(usb_fck, mcspi1_fck_parent_names, aes_ick_ops);
1742
1743static const struct clksel_rate usb_l4_ick_core_l3_rates[] = {
1744	{ .div = 1, .val = 1, .flags = RATE_IN_24XX },
1745	{ .div = 2, .val = 2, .flags = RATE_IN_24XX },
1746	{ .div = 4, .val = 4, .flags = RATE_IN_24XX },
1747	{ .div = 0 }
1748};
1749
1750static const struct clksel usb_l4_ick_clksel[] = {
1751	{ .parent = &core_l3_ck, .rates = usb_l4_ick_core_l3_rates },
1752	{ .parent = NULL },
1753};
1754
1755static const char *usb_l4_ick_parent_names[] = {
1756	"core_l3_ck",
1757};
1758
1759DEFINE_CLK_OMAP_MUX_GATE(usb_l4_ick, "core_l4_clkdm", usb_l4_ick_clksel,
1760			 OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
1761			 OMAP24XX_CLKSEL_USB_MASK,
1762			 OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1763			 OMAP24XX_EN_USB_SHIFT, &clkhwops_iclk_wait,
1764			 usb_l4_ick_parent_names, dsp_fck_ops);
1765
1766static struct clk usbhs_ick;
1767
1768static struct clk_hw_omap usbhs_ick_hw = {
1769	.hw = {
1770		.clk = &usbhs_ick,
1771	},
1772	.ops		= &clkhwops_iclk_wait,
1773	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
1774	.enable_bit	= OMAP2430_EN_USBHS_SHIFT,
1775	.clkdm_name	= "core_l3_clkdm",
1776};
1777
1778DEFINE_STRUCT_CLK(usbhs_ick, gfx_ick_parent_names, aes_ick_ops);
1779
1780static struct clk virt_prcm_set;
1781
1782static const char *virt_prcm_set_parent_names[] = {
1783	"mpu_ck",
1784};
1785
1786static const struct clk_ops virt_prcm_set_ops = {
1787	.recalc_rate	= &omap2_table_mpu_recalc,
1788	.set_rate	= &omap2_select_table_rate,
1789	.round_rate	= &omap2_round_to_table_rate,
1790};
1791
1792DEFINE_STRUCT_CLK_HW_OMAP(virt_prcm_set, NULL);
1793DEFINE_STRUCT_CLK(virt_prcm_set, virt_prcm_set_parent_names, virt_prcm_set_ops);
1794
1795static struct clk wdt1_ick;
1796
1797static struct clk_hw_omap wdt1_ick_hw = {
1798	.hw = {
1799		.clk = &wdt1_ick,
1800	},
1801	.ops		= &clkhwops_iclk_wait,
1802	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1803	.enable_bit	= OMAP24XX_EN_WDT1_SHIFT,
1804	.clkdm_name	= "wkup_clkdm",
1805};
1806
1807DEFINE_STRUCT_CLK(wdt1_ick, gpios_ick_parent_names, aes_ick_ops);
1808
1809static struct clk wdt4_fck;
1810
1811static struct clk_hw_omap wdt4_fck_hw = {
1812	.hw = {
1813		.clk = &wdt4_fck,
1814	},
1815	.ops		= &clkhwops_wait,
1816	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1817	.enable_bit	= OMAP24XX_EN_WDT4_SHIFT,
1818	.clkdm_name	= "core_l4_clkdm",
1819};
1820
1821DEFINE_STRUCT_CLK(wdt4_fck, gpio5_fck_parent_names, aes_ick_ops);
1822
1823static struct clk wdt4_ick;
1824
1825static struct clk_hw_omap wdt4_ick_hw = {
1826	.hw = {
1827		.clk = &wdt4_ick,
1828	},
1829	.ops		= &clkhwops_iclk_wait,
1830	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
1831	.enable_bit	= OMAP24XX_EN_WDT4_SHIFT,
1832	.clkdm_name	= "core_l4_clkdm",
1833};
1834
1835DEFINE_STRUCT_CLK(wdt4_ick, aes_ick_parent_names, aes_ick_ops);
1836
1837/*
1838 * clkdev integration
1839 */
1840
1841static struct omap_clk omap2430_clks[] = {
1842	/* external root sources */
1843	CLK(NULL,	"func_32k_ck",	&func_32k_ck),
1844	CLK(NULL,	"secure_32k_ck", &secure_32k_ck),
1845	CLK(NULL,	"osc_ck",	&osc_ck),
1846	CLK("twl",	"fck",		&osc_ck),
1847	CLK(NULL,	"sys_ck",	&sys_ck),
1848	CLK(NULL,	"alt_ck",	&alt_ck),
1849	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks),
1850	/* internal analog sources */
1851	CLK(NULL,	"dpll_ck",	&dpll_ck),
1852	CLK(NULL,	"apll96_ck",	&apll96_ck),
1853	CLK(NULL,	"apll54_ck",	&apll54_ck),
1854	/* internal prcm root sources */
1855	CLK(NULL,	"func_54m_ck",	&func_54m_ck),
1856	CLK(NULL,	"core_ck",	&core_ck),
1857	CLK(NULL,	"func_96m_ck",	&func_96m_ck),
1858	CLK(NULL,	"func_48m_ck",	&func_48m_ck),
1859	CLK(NULL,	"func_12m_ck",	&func_12m_ck),
1860	CLK(NULL,	"sys_clkout_src", &sys_clkout_src),
1861	CLK(NULL,	"sys_clkout",	&sys_clkout),
1862	CLK(NULL,	"emul_ck",	&emul_ck),
1863	/* mpu domain clocks */
1864	CLK(NULL,	"mpu_ck",	&mpu_ck),
1865	/* dsp domain clocks */
1866	CLK(NULL,	"dsp_fck",	&dsp_fck),
1867	CLK(NULL,	"iva2_1_ick",	&iva2_1_ick),
1868	/* GFX domain clocks */
1869	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck),
1870	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck),
1871	CLK(NULL,	"gfx_ick",	&gfx_ick),
1872	/* Modem domain clocks */
1873	CLK(NULL,	"mdm_ick",	&mdm_ick),
1874	CLK(NULL,	"mdm_osc_ck",	&mdm_osc_ck),
1875	/* DSS domain clocks */
1876	CLK("omapdss_dss",	"ick",		&dss_ick),
1877	CLK(NULL,	"dss_ick",		&dss_ick),
1878	CLK(NULL,	"dss1_fck",		&dss1_fck),
1879	CLK(NULL,	"dss2_fck",	&dss2_fck),
1880	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck),
1881	/* L3 domain clocks */
1882	CLK(NULL,	"core_l3_ck",	&core_l3_ck),
1883	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck),
1884	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick),
1885	/* L4 domain clocks */
1886	CLK(NULL,	"l4_ck",	&l4_ck),
1887	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick),
1888	/* virtual meta-group clock */
1889	CLK(NULL,	"virt_prcm_set", &virt_prcm_set),
1890	/* general l4 interface ck, multi-parent functional clk */
1891	CLK(NULL,	"gpt1_ick",	&gpt1_ick),
1892	CLK(NULL,	"gpt1_fck",	&gpt1_fck),
1893	CLK(NULL,	"gpt2_ick",	&gpt2_ick),
1894	CLK(NULL,	"gpt2_fck",	&gpt2_fck),
1895	CLK(NULL,	"gpt3_ick",	&gpt3_ick),
1896	CLK(NULL,	"gpt3_fck",	&gpt3_fck),
1897	CLK(NULL,	"gpt4_ick",	&gpt4_ick),
1898	CLK(NULL,	"gpt4_fck",	&gpt4_fck),
1899	CLK(NULL,	"gpt5_ick",	&gpt5_ick),
1900	CLK(NULL,	"gpt5_fck",	&gpt5_fck),
1901	CLK(NULL,	"gpt6_ick",	&gpt6_ick),
1902	CLK(NULL,	"gpt6_fck",	&gpt6_fck),
1903	CLK(NULL,	"gpt7_ick",	&gpt7_ick),
1904	CLK(NULL,	"gpt7_fck",	&gpt7_fck),
1905	CLK(NULL,	"gpt8_ick",	&gpt8_ick),
1906	CLK(NULL,	"gpt8_fck",	&gpt8_fck),
1907	CLK(NULL,	"gpt9_ick",	&gpt9_ick),
1908	CLK(NULL,	"gpt9_fck",	&gpt9_fck),
1909	CLK(NULL,	"gpt10_ick",	&gpt10_ick),
1910	CLK(NULL,	"gpt10_fck",	&gpt10_fck),
1911	CLK(NULL,	"gpt11_ick",	&gpt11_ick),
1912	CLK(NULL,	"gpt11_fck",	&gpt11_fck),
1913	CLK(NULL,	"gpt12_ick",	&gpt12_ick),
1914	CLK(NULL,	"gpt12_fck",	&gpt12_fck),
1915	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick),
1916	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick),
1917	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck),
1918	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick),
1919	CLK(NULL,	"mcbsp2_ick",	&mcbsp2_ick),
1920	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck),
1921	CLK("omap-mcbsp.3", "ick",	&mcbsp3_ick),
1922	CLK(NULL,	"mcbsp3_ick",	&mcbsp3_ick),
1923	CLK(NULL,	"mcbsp3_fck",	&mcbsp3_fck),
1924	CLK("omap-mcbsp.4", "ick",	&mcbsp4_ick),
1925	CLK(NULL,	"mcbsp4_ick",	&mcbsp4_ick),
1926	CLK(NULL,	"mcbsp4_fck",	&mcbsp4_fck),
1927	CLK("omap-mcbsp.5", "ick",	&mcbsp5_ick),
1928	CLK(NULL,	"mcbsp5_ick",	&mcbsp5_ick),
1929	CLK(NULL,	"mcbsp5_fck",	&mcbsp5_fck),
1930	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick),
1931	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick),
1932	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck),
1933	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick),
1934	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick),
1935	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck),
1936	CLK("omap2_mcspi.3", "ick",	&mcspi3_ick),
1937	CLK(NULL,	"mcspi3_ick",	&mcspi3_ick),
1938	CLK(NULL,	"mcspi3_fck",	&mcspi3_fck),
1939	CLK(NULL,	"uart1_ick",	&uart1_ick),
1940	CLK(NULL,	"uart1_fck",	&uart1_fck),
1941	CLK(NULL,	"uart2_ick",	&uart2_ick),
1942	CLK(NULL,	"uart2_fck",	&uart2_fck),
1943	CLK(NULL,	"uart3_ick",	&uart3_ick),
1944	CLK(NULL,	"uart3_fck",	&uart3_fck),
1945	CLK(NULL,	"gpios_ick",	&gpios_ick),
1946	CLK(NULL,	"gpios_fck",	&gpios_fck),
1947	CLK("omap_wdt",	"ick",		&mpu_wdt_ick),
1948	CLK(NULL,	"mpu_wdt_ick",	&mpu_wdt_ick),
1949	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck),
1950	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick),
1951	CLK(NULL,	"wdt1_ick",	&wdt1_ick),
1952	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick),
1953	CLK(NULL,	"icr_ick",	&icr_ick),
1954	CLK("omap24xxcam", "fck",	&cam_fck),
1955	CLK(NULL,	"cam_fck",	&cam_fck),
1956	CLK("omap24xxcam", "ick",	&cam_ick),
1957	CLK(NULL,	"cam_ick",	&cam_ick),
1958	CLK(NULL,	"mailboxes_ick", &mailboxes_ick),
1959	CLK(NULL,	"wdt4_ick",	&wdt4_ick),
1960	CLK(NULL,	"wdt4_fck",	&wdt4_fck),
1961	CLK(NULL,	"mspro_ick",	&mspro_ick),
1962	CLK(NULL,	"mspro_fck",	&mspro_fck),
1963	CLK(NULL,	"fac_ick",	&fac_ick),
1964	CLK(NULL,	"fac_fck",	&fac_fck),
1965	CLK("omap_hdq.0", "ick",	&hdq_ick),
1966	CLK(NULL,	"hdq_ick",	&hdq_ick),
1967	CLK("omap_hdq.1", "fck",	&hdq_fck),
1968	CLK(NULL,	"hdq_fck",	&hdq_fck),
1969	CLK("omap_i2c.1", "ick",	&i2c1_ick),
1970	CLK(NULL,	"i2c1_ick",	&i2c1_ick),
1971	CLK(NULL,	"i2chs1_fck",	&i2chs1_fck),
1972	CLK("omap_i2c.2", "ick",	&i2c2_ick),
1973	CLK(NULL,	"i2c2_ick",	&i2c2_ick),
1974	CLK(NULL,	"i2chs2_fck",	&i2chs2_fck),
1975	CLK(NULL,	"gpmc_fck",	&gpmc_fck),
1976	CLK(NULL,	"sdma_fck",	&sdma_fck),
1977	CLK(NULL,	"sdma_ick",	&sdma_ick),
1978	CLK(NULL,	"sdrc_ick",	&sdrc_ick),
1979	CLK(NULL,	"des_ick",	&des_ick),
1980	CLK("omap-sham",	"ick",	&sha_ick),
1981	CLK(NULL,	"sha_ick",	&sha_ick),
1982	CLK("omap_rng", "ick",		&rng_ick),
1983	CLK(NULL,	"rng_ick",	&rng_ick),
1984	CLK("omap-aes",	"ick",	&aes_ick),
1985	CLK(NULL,	"aes_ick",	&aes_ick),
1986	CLK(NULL,	"pka_ick",	&pka_ick),
1987	CLK(NULL,	"usb_fck",	&usb_fck),
1988	CLK("musb-omap2430",	"ick",	&usbhs_ick),
1989	CLK(NULL,	"usbhs_ick",	&usbhs_ick),
1990	CLK("omap_hsmmc.0", "ick",	&mmchs1_ick),
1991	CLK(NULL,	"mmchs1_ick",	&mmchs1_ick),
1992	CLK(NULL,	"mmchs1_fck",	&mmchs1_fck),
1993	CLK("omap_hsmmc.1", "ick",	&mmchs2_ick),
1994	CLK(NULL,	"mmchs2_ick",	&mmchs2_ick),
1995	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck),
1996	CLK(NULL,	"gpio5_ick",	&gpio5_ick),
1997	CLK(NULL,	"gpio5_fck",	&gpio5_fck),
1998	CLK(NULL,	"mdm_intc_ick",	&mdm_intc_ick),
1999	CLK("omap_hsmmc.0", "mmchsdb_fck",	&mmchsdb1_fck),
2000	CLK(NULL,	 "mmchsdb1_fck",	&mmchsdb1_fck),
2001	CLK("omap_hsmmc.1", "mmchsdb_fck",	&mmchsdb2_fck),
2002	CLK(NULL,	 "mmchsdb2_fck",	&mmchsdb2_fck),
2003	CLK(NULL,	"timer_32k_ck",  &func_32k_ck),
2004	CLK(NULL,	"timer_sys_ck",	&sys_ck),
2005	CLK(NULL,	"timer_ext_ck",	&alt_ck),
2006	CLK(NULL,	"cpufreq_ck",	&virt_prcm_set),
2007};
2008
2009static const char *enable_init_clks[] = {
2010	"apll96_ck",
2011	"apll54_ck",
2012	"sync_32k_ick",
2013	"omapctrl_ick",
2014	"gpmc_fck",
2015	"sdrc_ick",
2016};
2017
2018/*
2019 * init code
2020 */
2021
2022int __init omap2430_clk_init(void)
2023{
2024	prcm_clksrc_ctrl = OMAP2430_PRCM_CLKSRC_CTRL;
2025	cpu_mask = RATE_IN_243X;
2026	rate_table = omap2430_rate_table;
2027
2028	omap2xxx_clkt_dpllcore_init(&dpll_ck_hw.hw);
2029
2030	omap2xxx_clkt_vps_check_bootloader_rates();
2031
2032	omap_clocks_register(omap2430_clks, ARRAY_SIZE(omap2430_clks));
2033
2034	omap2xxx_clkt_vps_late_init();
2035
2036	omap2_clk_disable_autoidle_all();
2037
2038	omap2_clk_enable_init_clocks(enable_init_clks,
2039				     ARRAY_SIZE(enable_init_clks));
2040
2041	pr_info("Clocking rate (Crystal/DPLL/MPU): %ld.%01ld/%ld/%ld MHz\n",
2042		(clk_get_rate(&sys_ck) / 1000000),
2043		(clk_get_rate(&sys_ck) / 100000) % 10,
2044		(clk_get_rate(&dpll_ck) / 1000000),
2045		(clk_get_rate(&mpu_ck) / 1000000));
2046
2047	return 0;
2048}