diff options
| author | Tony Lindgren <tony@atomide.com> | 2011-03-11 09:20:03 -0800 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-03-11 09:20:03 -0800 | 
| commit | a2358a7bc35e388978fc2f7f6b071a0fd27d78c1 (patch) | |
| tree | fbdc2ddb066243a11aebc490c4d54e6a42be51e2 /arch/arm/mach-omap2/clock2430_data.c | |
| parent | 94a06b74e724caabcf0464c81527cfbcae0c8aff (diff) | |
| parent | a08572ae529b1e8de12393eeced661feae8fd44c (diff) | |
| download | olio-linux-3.10-a2358a7bc35e388978fc2f7f6b071a0fd27d78c1.tar.xz olio-linux-3.10-a2358a7bc35e388978fc2f7f6b071a0fd27d78c1.zip  | |
Merge branch 'integration-2.6.39-for-tony' of git://git.pwsan.com/linux-integration into omap-for-linus
Conflicts:
	arch/arm/mach-omap2/pm34xx.c
Diffstat (limited to 'arch/arm/mach-omap2/clock2430_data.c')
| -rw-r--r-- | arch/arm/mach-omap2/clock2430_data.c | 232 | 
1 files changed, 120 insertions, 112 deletions
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index 5c647ce05b0..bba018331a7 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c @@ -1,12 +1,12 @@  /* - *  linux/arch/arm/mach-omap2/clock2430_data.c + * OMAP2430 clock data   * - *  Copyright (C) 2005-2009 Texas Instruments, Inc. - *  Copyright (C) 2004-2010 Nokia Corporation + * Copyright (C) 2005-2009 Texas Instruments, Inc. + * Copyright (C) 2004-2011 Nokia Corporation   * - *  Contacts: - *  Richard Woodruff <r-woodruff2@ti.com> - *  Paul Walmsley + * Contacts: + * Richard Woodruff <r-woodruff2@ti.com> + * Paul Walmsley   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License version 2 as @@ -34,18 +34,15 @@  /*   * 2430 clock tree.   * - * NOTE:In many cases here we are assigning a 'default' parent.	In many - *	cases the parent is selectable.	The get/set parent calls will also - *	switch sources. - * - *	Many some clocks say always_enabled, but they can be auto idled for - *	power savings. They will always be available upon clock request. + * NOTE:In many cases here we are assigning a 'default' parent. In + *	many cases the parent is selectable. The set parent calls will + *	also switch sources.   *   *	Several sources are given initial rates which may be wrong, this will   *	be fixed up in the init func.   *   *	Things are broadly separated below by clock domains. It is - *	noteworthy that most periferals have dependencies on multiple clock + *	noteworthy that most peripherals have dependencies on multiple clock   *	domains. Many get their interface clocks from the L4 domain, but get   *	functional clocks from fixed sources or other core domain derived   *	clocks. @@ -55,7 +52,7 @@  static struct clk func_32k_ck = {  	.name		= "func_32k_ck",  	.ops		= &clkops_null, -	.rate		= 32000, +	.rate		= 32768,  	.clkdm_name	= "wkup_clkdm",  }; @@ -116,7 +113,6 @@ static struct dpll_data dpll_dd = {  	.max_multiplier		= 1023,  	.min_divider		= 1,  	.max_divider		= 16, -	.rate_tolerance		= DEFAULT_DPLL_RATE_TOLERANCE  };  /* @@ -125,7 +121,7 @@ static struct dpll_data dpll_dd = {   */  static struct clk dpll_ck = {  	.name		= "dpll_ck", -	.ops		= &clkops_null, +	.ops		= &clkops_omap2xxx_dpll_ops,  	.parent		= &sys_ck,		/* Can be func_32k also */  	.dpll_data	= &dpll_dd,  	.clkdm_name	= "wkup_clkdm", @@ -434,37 +430,23 @@ static struct clk dsp_fck = {  	.recalc		= &omap2_clksel_recalc,  }; -/* DSP interface clock */ -static const 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[] = { -	{ .parent = &dsp_fck, .rates = dsp_irate_ick_rates }, +static const struct clksel dsp_ick_clksel[] = { +	{ .parent = &dsp_fck, .rates = dsp_ick_rates },  	{ .parent = NULL }  }; -/* This clock does not exist as such in the TRM. */ -static struct clk dsp_irate_ick = { -	.name		= "dsp_irate_ick", -	.ops		= &clkops_null, -	.parent		= &dsp_fck, -	.clksel_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL), -	.clksel_mask	= OMAP24XX_CLKSEL_DSP_IF_MASK, -	.clksel		= dsp_irate_ick_clksel, -	.recalc		= &omap2_clksel_recalc, -}; -  /* 2430 only - EN_DSP controls both dsp fclk and iclk on 2430 */  static struct clk iva2_1_ick = {  	.name		= "iva2_1_ick",  	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &dsp_irate_ick, +	.parent		= &dsp_fck, +	.clkdm_name	= "dsp_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),  	.enable_bit	= OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, +	.clksel_reg	= OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL), +	.clksel_mask	= OMAP24XX_CLKSEL_DSP_IF_MASK, +	.clksel		= dsp_ick_clksel, +	.recalc		= &omap2_clksel_recalc,  };  /* @@ -525,7 +507,7 @@ static const struct clksel usb_l4_ick_clksel[] = {  /* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */  static struct clk usb_l4_ick = {	/* FS-USB interface clock */  	.name		= "usb_l4_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &core_l3_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -606,7 +588,7 @@ static struct clk ssi_ssr_sst_fck = {   */  static struct clk ssi_l4_ick = {  	.name		= "ssi_l4_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -661,6 +643,7 @@ static struct clk gfx_2d_fck = {  	.recalc		= &omap2_clksel_recalc,  }; +/* This interface clock does not have a CM_AUTOIDLE bit */  static struct clk gfx_ick = {  	.name		= "gfx_ick",		/* From l3 */  	.ops		= &clkops_omap2_dflt_wait, @@ -693,7 +676,7 @@ static const struct clksel mdm_ick_clksel[] = {  static struct clk mdm_ick = {		/* used both as a ick and fck */  	.name		= "mdm_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &core_ck,  	.clkdm_name	= "mdm_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_ICLKEN), @@ -706,7 +689,7 @@ static struct clk mdm_ick = {		/* used both as a ick and fck */  static struct clk mdm_osc_ck = {  	.name		= "mdm_osc_ck", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_mdmclk_dflt_wait,  	.parent		= &osc_ck,  	.clkdm_name	= "mdm_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(OMAP2430_MDM_MOD, CM_FCLKEN), @@ -751,7 +734,7 @@ static const struct clksel dss1_fck_clksel[] = {  static struct clk dss_ick = {		/* Enables both L3,L4 ICLK's */  	.name		= "dss_ick", -	.ops		= &clkops_omap2_dflt, +	.ops		= &clkops_omap2_iclk_dflt,  	.parent		= &l4_ck,	/* really both l3 and l4 */  	.clkdm_name	= "dss_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -813,6 +796,14 @@ static struct clk dss_54m_fck = {	/* Alt clk used in power management */  	.recalc		= &followparent_recalc,  }; +static struct clk wu_l4_ick = { +	.name		= "wu_l4_ick", +	.ops		= &clkops_null, +	.parent		= &sys_ck, +	.clkdm_name	= "wkup_clkdm", +	.recalc		= &followparent_recalc, +}; +  /*   * CORE power domain ICLK & FCLK defines.   * Many of the these can have more than one possible parent. Entries @@ -833,9 +824,9 @@ static const struct clksel omap24xx_gpt_clksel[] = {  static struct clk gpt1_ick = {  	.name		= "gpt1_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, -	.clkdm_name	= "core_l4_clkdm", +	.ops		= &clkops_omap2_iclk_dflt_wait, +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_GPT1_SHIFT,  	.recalc		= &followparent_recalc, @@ -859,7 +850,7 @@ static struct clk gpt1_fck = {  static struct clk gpt2_ick = {  	.name		= "gpt2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -883,7 +874,7 @@ static struct clk gpt2_fck = {  static struct clk gpt3_ick = {  	.name		= "gpt3_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -907,7 +898,7 @@ static struct clk gpt3_fck = {  static struct clk gpt4_ick = {  	.name		= "gpt4_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -931,7 +922,7 @@ static struct clk gpt4_fck = {  static struct clk gpt5_ick = {  	.name		= "gpt5_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -955,7 +946,7 @@ static struct clk gpt5_fck = {  static struct clk gpt6_ick = {  	.name		= "gpt6_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -979,8 +970,9 @@ static struct clk gpt6_fck = {  static struct clk gpt7_ick = {  	.name		= "gpt7_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck, +	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),  	.enable_bit	= OMAP24XX_EN_GPT7_SHIFT,  	.recalc		= &followparent_recalc, @@ -1002,7 +994,7 @@ static struct clk gpt7_fck = {  static struct clk gpt8_ick = {  	.name		= "gpt8_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1026,7 +1018,7 @@ static struct clk gpt8_fck = {  static struct clk gpt9_ick = {  	.name		= "gpt9_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1050,7 +1042,7 @@ static struct clk gpt9_fck = {  static struct clk gpt10_ick = {  	.name		= "gpt10_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1074,7 +1066,7 @@ static struct clk gpt10_fck = {  static struct clk gpt11_ick = {  	.name		= "gpt11_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1098,7 +1090,7 @@ static struct clk gpt11_fck = {  static struct clk gpt12_ick = {  	.name		= "gpt12_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1122,7 +1114,7 @@ static struct clk gpt12_fck = {  static struct clk mcbsp1_ick = {  	.name		= "mcbsp1_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1162,7 +1154,7 @@ static struct clk mcbsp1_fck = {  static struct clk mcbsp2_ick = {  	.name		= "mcbsp2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1186,7 +1178,7 @@ static struct clk mcbsp2_fck = {  static struct clk mcbsp3_ick = {  	.name		= "mcbsp3_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1210,7 +1202,7 @@ static struct clk mcbsp3_fck = {  static struct clk mcbsp4_ick = {  	.name		= "mcbsp4_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1234,7 +1226,7 @@ static struct clk mcbsp4_fck = {  static struct clk mcbsp5_ick = {  	.name		= "mcbsp5_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1258,7 +1250,7 @@ static struct clk mcbsp5_fck = {  static struct clk mcspi1_ick = {  	.name		= "mcspi1_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1278,7 +1270,7 @@ static struct clk mcspi1_fck = {  static struct clk mcspi2_ick = {  	.name		= "mcspi2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1298,7 +1290,7 @@ static struct clk mcspi2_fck = {  static struct clk mcspi3_ick = {  	.name		= "mcspi3_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1318,7 +1310,7 @@ static struct clk mcspi3_fck = {  static struct clk uart1_ick = {  	.name		= "uart1_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1338,7 +1330,7 @@ static struct clk uart1_fck = {  static struct clk uart2_ick = {  	.name		= "uart2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1358,7 +1350,7 @@ static struct clk uart2_fck = {  static struct clk uart3_ick = {  	.name		= "uart3_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1378,9 +1370,9 @@ static struct clk uart3_fck = {  static struct clk gpios_ick = {  	.name		= "gpios_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, -	.clkdm_name	= "core_l4_clkdm", +	.ops		= &clkops_omap2_iclk_dflt_wait, +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_GPIOS_SHIFT,  	.recalc		= &followparent_recalc, @@ -1398,9 +1390,9 @@ static struct clk gpios_fck = {  static struct clk mpu_wdt_ick = {  	.name		= "mpu_wdt_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, -	.clkdm_name	= "core_l4_clkdm", +	.ops		= &clkops_omap2_iclk_dflt_wait, +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_MPU_WDT_SHIFT,  	.recalc		= &followparent_recalc, @@ -1418,10 +1410,10 @@ static struct clk mpu_wdt_fck = {  static struct clk sync_32k_ick = {  	.name		= "sync_32k_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.flags		= ENABLE_ON_INIT, -	.clkdm_name	= "core_l4_clkdm", +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_32KSYNC_SHIFT,  	.recalc		= &followparent_recalc, @@ -1429,9 +1421,9 @@ static struct clk sync_32k_ick = {  static struct clk wdt1_ick = {  	.name		= "wdt1_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, -	.clkdm_name	= "core_l4_clkdm", +	.ops		= &clkops_omap2_iclk_dflt_wait, +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_WDT1_SHIFT,  	.recalc		= &followparent_recalc, @@ -1439,10 +1431,10 @@ static struct clk wdt1_ick = {  static struct clk omapctrl_ick = {  	.name		= "omapctrl_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.flags		= ENABLE_ON_INIT, -	.clkdm_name	= "core_l4_clkdm", +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP24XX_EN_OMAPCTRL_SHIFT,  	.recalc		= &followparent_recalc, @@ -1450,9 +1442,9 @@ static struct clk omapctrl_ick = {  static struct clk icr_ick = {  	.name		= "icr_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, -	.clkdm_name	= "core_l4_clkdm", +	.ops		= &clkops_omap2_iclk_dflt_wait, +	.parent		= &wu_l4_ick, +	.clkdm_name	= "wkup_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),  	.enable_bit	= OMAP2430_EN_ICR_SHIFT,  	.recalc		= &followparent_recalc, @@ -1460,7 +1452,7 @@ static struct clk icr_ick = {  static struct clk cam_ick = {  	.name		= "cam_ick", -	.ops		= &clkops_omap2_dflt, +	.ops		= &clkops_omap2_iclk_dflt,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1485,7 +1477,7 @@ static struct clk cam_fck = {  static struct clk mailboxes_ick = {  	.name		= "mailboxes_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1495,7 +1487,7 @@ static struct clk mailboxes_ick = {  static struct clk wdt4_ick = {  	.name		= "wdt4_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1515,7 +1507,7 @@ static struct clk wdt4_fck = {  static struct clk mspro_ick = {  	.name		= "mspro_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1535,7 +1527,7 @@ static struct clk mspro_fck = {  static struct clk fac_ick = {  	.name		= "fac_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1555,7 +1547,7 @@ static struct clk fac_fck = {  static struct clk hdq_ick = {  	.name		= "hdq_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1579,7 +1571,7 @@ static struct clk hdq_fck = {   */  static struct clk i2c2_ick = {  	.name		= "i2c2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1603,7 +1595,7 @@ static struct clk i2chs2_fck = {   */  static struct clk i2c1_ick = {  	.name		= "i2c1_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), @@ -1621,12 +1613,18 @@ static struct clk i2chs1_fck = {  	.recalc		= &followparent_recalc,  }; +/* + * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE + * accesses derived from this data. + */  static struct clk gpmc_fck = {  	.name		= "gpmc_fck", -	.ops		= &clkops_null, /* RMK: missing? */ +	.ops		= &clkops_omap2_iclk_idle_only,  	.parent		= &core_l3_ck,  	.flags		= ENABLE_ON_INIT,  	.clkdm_name	= "core_l3_clkdm", +	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), +	.enable_bit	= OMAP24XX_AUTO_GPMC_SHIFT,  	.recalc		= &followparent_recalc,  }; @@ -1638,20 +1636,26 @@ static struct clk sdma_fck = {  	.recalc		= &followparent_recalc,  }; +/* + * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE + * accesses derived from this data. + */  static struct clk sdma_ick = {  	.name		= "sdma_ick", -	.ops		= &clkops_null, /* RMK: missing? */ -	.parent		= &l4_ck, +	.ops		= &clkops_omap2_iclk_idle_only, +	.parent		= &core_l3_ck,  	.clkdm_name	= "core_l3_clkdm", +	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), +	.enable_bit	= OMAP24XX_AUTO_SDMA_SHIFT,  	.recalc		= &followparent_recalc,  };  static struct clk sdrc_ick = {  	.name		= "sdrc_ick", -	.ops		= &clkops_omap2_dflt_wait, -	.parent		= &l4_ck, +	.ops		= &clkops_omap2_iclk_idle_only, +	.parent		= &core_l3_ck,  	.flags		= ENABLE_ON_INIT, -	.clkdm_name	= "core_l4_clkdm", +	.clkdm_name	= "core_l3_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),  	.enable_bit	= OMAP2430_EN_SDRC_SHIFT,  	.recalc		= &followparent_recalc, @@ -1659,7 +1663,7 @@ static struct clk sdrc_ick = {  static struct clk des_ick = {  	.name		= "des_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), @@ -1669,7 +1673,7 @@ static struct clk des_ick = {  static struct clk sha_ick = {  	.name		= "sha_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), @@ -1679,7 +1683,7 @@ static struct clk sha_ick = {  static struct clk rng_ick = {  	.name		= "rng_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), @@ -1689,7 +1693,7 @@ static struct clk rng_ick = {  static struct clk aes_ick = {  	.name		= "aes_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), @@ -1699,7 +1703,7 @@ static struct clk aes_ick = {  static struct clk pka_ick = {  	.name		= "pka_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), @@ -1719,7 +1723,7 @@ static struct clk usb_fck = {  static struct clk usbhs_ick = {  	.name		= "usbhs_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &core_l3_ck,  	.clkdm_name	= "core_l3_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1729,7 +1733,7 @@ static struct clk usbhs_ick = {  static struct clk mmchs1_ick = {  	.name		= "mmchs1_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1741,7 +1745,7 @@ static struct clk mmchs1_fck = {  	.name		= "mmchs1_fck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &func_96m_ck, -	.clkdm_name	= "core_l3_clkdm", +	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),  	.enable_bit	= OMAP2430_EN_MMCHS1_SHIFT,  	.recalc		= &followparent_recalc, @@ -1749,7 +1753,7 @@ static struct clk mmchs1_fck = {  static struct clk mmchs2_ick = {  	.name		= "mmchs2_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1761,6 +1765,7 @@ static struct clk mmchs2_fck = {  	.name		= "mmchs2_fck",  	.ops		= &clkops_omap2_dflt_wait,  	.parent		= &func_96m_ck, +	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2),  	.enable_bit	= OMAP2430_EN_MMCHS2_SHIFT,  	.recalc		= &followparent_recalc, @@ -1768,7 +1773,7 @@ static struct clk mmchs2_fck = {  static struct clk gpio5_ick = {  	.name		= "gpio5_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1788,7 +1793,7 @@ static struct clk gpio5_fck = {  static struct clk mdm_intc_ick = {  	.name		= "mdm_intc_ick", -	.ops		= &clkops_omap2_dflt_wait, +	.ops		= &clkops_omap2_iclk_dflt_wait,  	.parent		= &l4_ck,  	.clkdm_name	= "core_l4_clkdm",  	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), @@ -1880,7 +1885,6 @@ static struct omap_clk omap2430_clks[] = {  	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_243X),  	/* dsp domain clocks */  	CLK(NULL,	"dsp_fck",	&dsp_fck,	CK_243X), -	CLK(NULL,	"dsp_irate_ick", &dsp_irate_ick, CK_243X),  	CLK(NULL,	"iva2_1_ick",	&iva2_1_ick,	CK_243X),  	/* GFX domain clocks */  	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck,	CK_243X), @@ -1901,6 +1905,7 @@ static struct omap_clk omap2430_clks[] = {  	/* L4 domain clocks */  	CLK(NULL,	"l4_ck",	&l4_ck,		CK_243X),  	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick,	CK_243X), +	CLK(NULL,	"wu_l4_ick",	&wu_l4_ick,	CK_243X),  	/* virtual meta-group clock */  	CLK(NULL,	"virt_prcm_set", &virt_prcm_set, CK_243X),  	/* general l4 interface ck, multi-parent functional clk */ @@ -2028,6 +2033,9 @@ int __init omap2430_clk_init(void)  		omap2_init_clk_clkdm(c->lk.clk);  	} +	/* Disable autoidle on all clocks; let the PM code enable it later */ +	omap_clk_disable_autoidle_all(); +  	/* Check the MPU rate set by bootloader */  	clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);  	for (prcm = rate_table; prcm->mpu_speed; prcm++) {  |