public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Paul Walmsley <paul@pwsan.com>
To: linux-omap-open-source@linux.omap.com
Subject: [PATCH 28/28] omap2 clock: handle (almost) all clock autoidling via the clock framework
Date: Mon, 20 Aug 2007 03:54:15 -0600	[thread overview]
Message-ID: <20070820095532.728389316@pwsan.com> (raw)
In-Reply-To: 20070820095347.933473149@pwsan.com

[-- Attachment #1: use_clk_framework_autoidle.patch --]
[-- Type: text/plain, Size: 29484 bytes --]

Existing OMAP2 code autoidles clocks via pm.c.  OMAP clock framework
already has some support for enabling autoidle mode via the allow_idle
function; however, this is currently unused.  Take advantage of this
support by adding autoidle register and bit information for each
clock, defining an omap2_clk_allow_idle() function, and adding a
framework-wide function, clk_allow_idle_all(), to autoidle all clocks,
intended to be called on init.  Remove all but the APLL/DPLL autoidle 
bit twiddling from pm.c -- we don't yet have generalized support for APLL
autoidle.  Handling autoidle via the clock framework ensures that we only
touch clocks that are currently configured.

Signed-off-by: Paul Walmsley <paul@pwsan.com>

---
 arch/arm/mach-omap2/clock.c           |   34 +++++++++++
 arch/arm/mach-omap2/clock.h           |  103 ++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/cm_regbits_24xx.h |   50 ++++++++++++++++
 arch/arm/mach-omap2/pm.c              |   63 +-------------------
 arch/arm/plat-omap/clock.c            |    9 ++
 include/asm-arm/arch-omap/clock.h     |    3 
 6 files changed, 204 insertions(+), 58 deletions(-)

Index: linux-omap/arch/arm/mach-omap2/clock.c
Index: linux-omap/arch/arm/mach-omap2/clock.c
===================================================================
--- linux-omap.orig/arch/arm/mach-omap2/clock.c
+++ linux-omap/arch/arm/mach-omap2/clock.c
@@ -165,6 +165,7 @@ static void omap2_fixed_divisor_recalc(s
 		propagate_rate(clk);
 }
 
+/* REVISIT: This is really autoidle control, not enable/disable */
 static int omap2_enable_osc_ck(struct clk *clk)
 {
 	u32 pcc;
@@ -177,6 +178,7 @@ static int omap2_enable_osc_ck(struct cl
 	return 0;
 }
 
+/* REVISIT: This is really autoidle control, not enable/disable */
 static void omap2_disable_osc_ck(struct clk *clk)
 {
 	u32 pcc;
@@ -1023,6 +1025,34 @@ static int omap2_select_table_rate(struc
 	return 0;
 }
 
+static void omap2_clk_allow_idle(struct clk *clk)
+{
+	u32 regval;
+	u8 shift;
+	const struct dpll_data *dd;
+
+	if (clk->auto_idle_reg) {
+		regval = cm_read_reg(clk->auto_idle_reg);
+
+		if (clk->dpll_data) {
+			/* Special handling for DPLLs */
+
+			dd = clk->dpll_data;
+			if (!dd->auto_idle_mask || !dd->auto_idle_val)
+				return;
+
+			shift = convert_mask_to_shift(dd->auto_idle_mask);
+			regval &= dd->auto_idle_mask;
+			regval |= dd->auto_idle_val << shift;
+
+		} else if (clk->auto_idle_bit) {
+			regval |= (1 << clk->auto_idle_bit);
+		}
+
+		cm_write_reg(regval, clk->auto_idle_reg);
+	}
+}
+
 /*-------------------------------------------------------------------------
  * Omap2 clock reset and init functions
  *-------------------------------------------------------------------------*/
@@ -1049,6 +1079,7 @@ static struct clk_functions omap2_clk_fu
 	.clk_round_rate		= omap2_clk_round_rate,
 	.clk_set_rate		= omap2_clk_set_rate,
 	.clk_set_parent		= omap2_clk_set_parent,
+	.clk_allow_idle		= omap2_clk_allow_idle,
 	.clk_disable_unused	= omap2_clk_disable_unused,
 };
 
@@ -1184,6 +1215,9 @@ int __init omap2_clk_init(void)
 	 */
 	clk_enable_init_clocks();
 
+	/* Autoidle all clocks that can be autoidled */
+	clk_allow_idle_all();
+
 	/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */
 	vclk = clk_get(NULL, "virt_prcm_set");
 	sclk = clk_get(NULL, "sys_ck");
Index: linux-omap/arch/arm/mach-omap2/clock.h
===================================================================
--- linux-omap.orig/arch/arm/mach-omap2/clock.h
+++ linux-omap/arch/arm/mach-omap2/clock.h
@@ -1204,6 +1204,8 @@ static struct clk usb_l4_ick = {	/* FS-U
 	.clksel_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
 	.clksel_mask	= OMAP24XX_CLKSEL_USB_MASK,
 	.clksel		= usb_l4_ick_clksel,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP24XX_AUTO_USB_SHIFT,
 	.recalc		= &omap2_clksel_recalc,
 	.round_rate	= &omap2_clksel_round_rate,
 	.set_rate	= &omap2_clksel_set_rate
@@ -1395,6 +1397,8 @@ static struct clk ssi_l4_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),	/* bit 1 */
 	.enable_bit	= OMAP24XX_EN_SSI_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP24XX_AUTO_SSI_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1439,6 +1443,8 @@ static struct clk dss_ick = {		/* Enable
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_DSS1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_DSS_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1555,6 +1561,8 @@ static struct clk gpt2_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	/* Bit4 */
 	.enable_bit	= OMAP24XX_EN_GPT2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1577,6 +1585,8 @@ static struct clk gpt3_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	/* Bit5 */
 	.enable_bit	= OMAP24XX_EN_GPT3_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT3_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1599,6 +1609,8 @@ static struct clk gpt4_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	/* Bit6 */
 	.enable_bit	= OMAP24XX_EN_GPT4_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT4_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1621,6 +1633,8 @@ static struct clk gpt5_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	 /* Bit7 */
 	.enable_bit	= OMAP24XX_EN_GPT5_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT5_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1643,6 +1657,8 @@ static struct clk gpt6_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	 /* bit8 */
 	.enable_bit	= OMAP24XX_EN_GPT6_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT6_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1665,6 +1681,8 @@ static struct clk gpt7_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	 /* bit9 */
 	.enable_bit	= OMAP24XX_EN_GPT7_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT7_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1687,6 +1705,8 @@ static struct clk gpt8_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	 /* bit10 */
 	.enable_bit	= OMAP24XX_EN_GPT8_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT8_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1709,6 +1729,8 @@ static struct clk gpt9_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_GPT9_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT9_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1731,6 +1753,8 @@ static struct clk gpt10_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_GPT10_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT10_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1753,6 +1777,8 @@ static struct clk gpt11_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_GPT11_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT11_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1775,6 +1801,8 @@ static struct clk gpt12_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),	 /* bit14 */
 	.enable_bit	= OMAP24XX_EN_GPT12_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPT12_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1797,6 +1825,8 @@ static struct clk mcbsp1_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MCBSP1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MCBSP1_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1815,6 +1845,8 @@ static struct clk mcbsp2_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MCBSP2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MCBSP2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1833,6 +1865,8 @@ static struct clk mcbsp3_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MCBSP3_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP2430_AUTO_MCBSP3_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1851,6 +1885,8 @@ static struct clk mcbsp4_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MCBSP4_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MCBSP4_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1869,6 +1905,8 @@ static struct clk mcbsp5_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MCBSP5_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MCBSP5_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1888,6 +1926,8 @@ static struct clk mcspi1_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MCSPI1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MCSPI1_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1908,6 +1948,8 @@ static struct clk mcspi2_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MCSPI2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MCSPI2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1928,6 +1970,8 @@ static struct clk mcspi3_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MCSPI3_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MCSPI3_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1947,6 +1991,8 @@ static struct clk uart1_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_UART1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_UART1_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1965,6 +2011,8 @@ static struct clk uart2_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_UART2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_UART2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -1983,6 +2031,8 @@ static struct clk uart3_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP24XX_EN_UART3_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP24XX_AUTO_UART3_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2070,6 +2120,8 @@ static struct clk cam_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_CAM_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_CAM_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2088,6 +2140,8 @@ static struct clk mailboxes_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MAILBOXES_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MAILBOXES_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2097,6 +2151,8 @@ static struct clk wdt4_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_WDT4_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_WDT4_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2115,6 +2171,8 @@ static struct clk wdt3_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_WDT3_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP2420_AUTO_WDT3_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2133,6 +2191,8 @@ static struct clk mspro_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_MSPRO_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_MSPRO_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2151,6 +2211,8 @@ static struct clk mmc_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_MMC_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP2420_AUTO_MMC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2169,6 +2231,8 @@ static struct clk fac_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_FAC_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_FAC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2187,6 +2251,8 @@ static struct clk eac_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_EAC_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP2420_AUTO_EAC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2205,6 +2271,8 @@ static struct clk hdq_ick = {
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP24XX_EN_HDQ_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_HDQ_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2224,6 +2292,8 @@ static struct clk i2c2_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_I2C2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_I2C2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2254,6 +2324,8 @@ static struct clk i2c1_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_I2C1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP24XX_AUTO_I2C1_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2281,6 +2353,8 @@ static struct clk gpmc_fck = {
 	.name		= "gpmc_fck",
 	.parent		= &core_l3_ck,
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE3),
+	.auto_idle_bit	= OMAP24XX_AUTO_GPMC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2288,6 +2362,8 @@ static struct clk sdma_fck = {
 	.name		= "sdma_fck",
 	.parent		= &core_l3_ck,
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE3),
+	.auto_idle_bit	= OMAP24XX_AUTO_SDMA_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2295,6 +2371,8 @@ static struct clk sdma_ick = {
 	.name		= "sdma_ick",
 	.parent		= &l4_ck,
 	.flags		= CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE3),
+	.auto_idle_bit	= OMAP24XX_AUTO_SDMA_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2304,6 +2382,8 @@ static struct clk vlynq_ick = {
 	.flags		= CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
 	.enable_bit	= OMAP2420_EN_VLYNQ_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE1),
+	.auto_idle_bit	= OMAP2420_AUTO_VLYNQ_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2347,12 +2427,15 @@ static struct clk vlynq_fck = {
 	.set_rate	= &omap2_clksel_set_rate
 };
 
+/* sdrc_ick may also be in recent 2420 ES2 revisions */
 static struct clk sdrc_ick = {
 	.name		= "sdrc_ick",
 	.parent		= &l4_ck,
 	.flags		= CLOCK_IN_OMAP243X | ENABLE_ON_INIT,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP2430_CM_ICLKEN3),
 	.enable_bit	= OMAP2430_EN_SDRC_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE3),
+	.auto_idle_bit	= OMAP24XX_AUTO_SDRC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2362,6 +2445,8 @@ static struct clk des_ick = {
 	.flags		= CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 	.enable_bit	= OMAP24XX_EN_DES_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE4),
+	.auto_idle_bit	= OMAP24XX_AUTO_DES_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2371,6 +2456,8 @@ static struct clk sha_ick = {
 	.flags		= CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 	.enable_bit	= OMAP24XX_EN_SHA_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE4),
+	.auto_idle_bit	= OMAP24XX_AUTO_SHA_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2380,6 +2467,8 @@ static struct clk rng_ick = {
 	.flags		= CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 	.enable_bit	= OMAP24XX_EN_RNG_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE4),
+	.auto_idle_bit	= OMAP24XX_AUTO_RNG_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2389,6 +2478,8 @@ static struct clk aes_ick = {
 	.flags		= CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 	.enable_bit	= OMAP24XX_EN_AES_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE4),
+	.auto_idle_bit	= OMAP24XX_AUTO_AES_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2398,6 +2489,8 @@ static struct clk pka_ick = {
 	.flags		= CLOCK_IN_OMAP243X | CLOCK_IN_OMAP242X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
 	.enable_bit	= OMAP24XX_EN_PKA_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_AUTOIDLE4),
+	.auto_idle_bit	= OMAP24XX_AUTO_PKA_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2416,6 +2509,8 @@ static struct clk usbhs_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_USBHS_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_USBHS_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2425,6 +2520,8 @@ static struct clk mmchs1_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MMCHS1_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MMCHS1_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2443,6 +2540,8 @@ static struct clk mmchs2_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MMCHS2_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MMCHS2_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2461,6 +2560,8 @@ static struct clk gpio5_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_GPIO5_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_GPIO5_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
@@ -2479,6 +2580,8 @@ static struct clk mdm_intc_ick = {
 	.flags		= CLOCK_IN_OMAP243X,
 	.enable_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
 	.enable_bit	= OMAP2430_EN_MDM_INTC_SHIFT,
+	.auto_idle_reg	= OMAP_CM_REGADDR(CORE_MOD, CM_AUTOIDLE2),
+	.auto_idle_bit	= OMAP2430_AUTO_MDM_INTC_SHIFT,
 	.recalc		= &followparent_recalc,
 };
 
Index: linux-omap/include/asm-arm/arch-omap/clock.h
===================================================================
--- linux-omap.orig/include/asm-arm/arch-omap/clock.h
+++ linux-omap/include/asm-arm/arch-omap/clock.h
@@ -62,6 +62,8 @@ struct clk {
 	u32			clksel_mask;
 	const struct clksel	*clksel;
 	const struct dpll_data	*dpll_data;
+	void __iomem		*auto_idle_reg;
+	u8			auto_idle_bit;
 #else
 	__u8			rate_offset;
 	__u8			src_offset;
@@ -92,6 +94,7 @@ extern void clk_allow_idle(struct clk *c
 extern void clk_deny_idle(struct clk *clk);
 extern int clk_get_usecount(struct clk *clk);
 extern void clk_enable_init_clocks(void);
+extern void clk_allow_idle_all(void);
 
 /* Clock flags */
 #define RATE_CKCTL		(1 << 0)	/* Main fixed ratio clocks */
Index: linux-omap/arch/arm/mach-omap2/pm.c
===================================================================
--- linux-omap.orig/arch/arm/mach-omap2/pm.c
+++ linux-omap/arch/arm/mach-omap2/pm.c
@@ -688,69 +688,16 @@ static void __init prcm_setup_regs(void)
 	cm_write_mod_reg(OMAP2420_AUTOSTATE_IVA | OMAP24XX_AUTOSTATE_DSP,
 			 OMAP24XX_DSP_MOD, CM_CLKSTCTRL);
 
-	/* Enable clock autoidle for all domains */
-	cm_write_mod_reg(OMAP24XX_AUTO_CAM |
-			 OMAP24XX_AUTO_MAILBOXES |
-			 OMAP24XX_AUTO_WDT4 |
-			 OMAP2420_AUTO_WDT3 |
-			 OMAP24XX_AUTO_MSPRO |
-			 OMAP2420_AUTO_MMC |
-			 OMAP24XX_AUTO_FAC |
-			 OMAP2420_AUTO_EAC |
-			 OMAP24XX_AUTO_HDQ |
-			 OMAP24XX_AUTO_UART2 |
-			 OMAP24XX_AUTO_UART1 |
-			 OMAP24XX_AUTO_I2C2 |
-			 OMAP24XX_AUTO_I2C1 |
-			 OMAP24XX_AUTO_MCSPI2 |
-			 OMAP24XX_AUTO_MCSPI1 |
-			 OMAP24XX_AUTO_MCBSP2 |
-			 OMAP24XX_AUTO_MCBSP1 |
-			 OMAP24XX_AUTO_GPT12 |
-			 OMAP24XX_AUTO_GPT11 |
-			 OMAP24XX_AUTO_GPT10 |
-			 OMAP24XX_AUTO_GPT9 |
-			 OMAP24XX_AUTO_GPT8 |
-			 OMAP24XX_AUTO_GPT7 |
-			 OMAP24XX_AUTO_GPT6 |
-			 OMAP24XX_AUTO_GPT5 |
-			 OMAP24XX_AUTO_GPT4 |
-			 OMAP24XX_AUTO_GPT3 |
-			 OMAP24XX_AUTO_GPT2 |
-			 OMAP2420_AUTO_VLYNQ |
-			 OMAP24XX_AUTO_DSS,
-			 CORE_MOD, CM_AUTOIDLE1);
-	cm_write_mod_reg(OMAP24XX_AUTO_UART3 |
-			 OMAP24XX_AUTO_SSI |
-			 OMAP24XX_AUTO_USB,
-			 CORE_MOD, CM_AUTOIDLE2);
-	cm_write_mod_reg(OMAP24XX_AUTO_SDRC |
-			 OMAP24XX_AUTO_GPMC |
-			 OMAP24XX_AUTO_SDMA,
-			 CORE_MOD, OMAP24XX_CM_AUTOIDLE3);
-	cm_write_mod_reg(OMAP24XX_AUTO_PKA |
-			 OMAP24XX_AUTO_AES |
-			 OMAP24XX_AUTO_RNG |
-			 OMAP24XX_AUTO_SHA |
-			 OMAP24XX_AUTO_DES,
-			 CORE_MOD, OMAP24XX_CM_AUTOIDLE4);
-
-	cm_write_mod_reg(OMAP2420_AUTO_DSP_IPI, OMAP24XX_DSP_MOD, CM_AUTOIDLE);
-
-	/* Put DPLL and both APLLs into autoidle mode */
+	/*
+	 * Put DPLL and both APLLs into autoidle mode
+	 * REVISIT: we don't handle APLL autoidle yet in the clock framework,
+	 * so we leave this here
+	 */
 	cm_write_mod_reg((0x03 << OMAP24XX_AUTO_DPLL_SHIFT) |
 			 (0x03 << OMAP24XX_AUTO_96M_SHIFT) |
 			 (0x03 << OMAP24XX_AUTO_54M_SHIFT),
 			 PLL_MOD, CM_AUTOIDLE);
 
-	cm_write_mod_reg(OMAP24XX_AUTO_OMAPCTRL |
-			 OMAP24XX_AUTO_WDT1 |
-			 OMAP24XX_AUTO_MPU_WDT |
-			 OMAP24XX_AUTO_GPIOS |
-			 OMAP24XX_AUTO_32KSYNC |
-			 OMAP24XX_AUTO_GPT1,
-			 WKUP_MOD, CM_AUTOIDLE);
-
 	/* REVISIT: Configure number of 32 kHz clock cycles for sys_clk
 	 * stabilisation */
 	prm_write_reg(15 << OMAP_SETUP_TIME_SHIFT, OMAP24XX_PRCM_CLKSSETUP);
Index: linux-omap/arch/arm/plat-omap/clock.c
===================================================================
--- linux-omap.orig/arch/arm/plat-omap/clock.c
+++ linux-omap/arch/arm/plat-omap/clock.c
@@ -383,6 +383,15 @@ void clk_allow_idle(struct clk *clk)
 }
 EXPORT_SYMBOL(clk_allow_idle);
 
+void clk_allow_idle_all(void)
+{
+	struct clk *clkp;
+
+	list_for_each_entry(clkp, &clocks, node)
+		clk_allow_idle(clkp);
+}
+EXPORT_SYMBOL(clk_allow_idle_all);
+
 void clk_enable_init_clocks(void)
 {
 	struct clk *clkp;
Index: linux-omap/arch/arm/mach-omap2/cm_regbits_24xx.h
===================================================================
--- linux-omap.orig/arch/arm/mach-omap2/cm_regbits_24xx.h
+++ linux-omap/arch/arm/mach-omap2/cm_regbits_24xx.h
@@ -141,61 +141,111 @@
 
 /* CM_AUTOIDLE1_CORE */
 #define OMAP24XX_AUTO_CAM				(1 << 31)
+#define OMAP24XX_AUTO_CAM_SHIFT				31
 #define OMAP24XX_AUTO_MAILBOXES				(1 << 30)
+#define OMAP24XX_AUTO_MAILBOXES_SHIFT			30
 #define OMAP24XX_AUTO_WDT4				(1 << 29)
+#define OMAP24XX_AUTO_WDT4_SHIFT			29
 #define OMAP2420_AUTO_WDT3				(1 << 28)
+#define OMAP2420_AUTO_WDT3_SHIFT			28
 #define OMAP24XX_AUTO_MSPRO				(1 << 27)
+#define OMAP24XX_AUTO_MSPRO_SHIFT			27
 #define OMAP2420_AUTO_MMC				(1 << 26)
+#define OMAP2420_AUTO_MMC_SHIFT				26
 #define OMAP24XX_AUTO_FAC				(1 << 25)
+#define OMAP24XX_AUTO_FAC_SHIFT				25
 #define OMAP2420_AUTO_EAC				(1 << 24)
+#define OMAP2420_AUTO_EAC_SHIFT				24
 #define OMAP24XX_AUTO_HDQ				(1 << 23)
+#define OMAP24XX_AUTO_HDQ_SHIFT				23
 #define OMAP24XX_AUTO_UART2				(1 << 22)
+#define OMAP24XX_AUTO_UART2_SHIFT			22
 #define OMAP24XX_AUTO_UART1				(1 << 21)
+#define OMAP24XX_AUTO_UART1_SHIFT			21
 #define OMAP24XX_AUTO_I2C2				(1 << 20)
+#define OMAP24XX_AUTO_I2C2_SHIFT			20
 #define OMAP24XX_AUTO_I2C1				(1 << 19)
+#define OMAP24XX_AUTO_I2C1_SHIFT			19
 #define OMAP24XX_AUTO_MCSPI2				(1 << 18)
+#define OMAP24XX_AUTO_MCSPI2_SHIFT			18
 #define OMAP24XX_AUTO_MCSPI1				(1 << 17)
+#define OMAP24XX_AUTO_MCSPI1_SHIFT			17
 #define OMAP24XX_AUTO_MCBSP2				(1 << 16)
+#define OMAP24XX_AUTO_MCBSP2_SHIFT			16
 #define OMAP24XX_AUTO_MCBSP1				(1 << 15)
+#define OMAP24XX_AUTO_MCBSP1_SHIFT			15
 #define OMAP24XX_AUTO_GPT12				(1 << 14)
+#define OMAP24XX_AUTO_GPT12_SHIFT			14
 #define OMAP24XX_AUTO_GPT11				(1 << 13)
+#define OMAP24XX_AUTO_GPT11_SHIFT			13
 #define OMAP24XX_AUTO_GPT10				(1 << 12)
+#define OMAP24XX_AUTO_GPT10_SHIFT			12
 #define OMAP24XX_AUTO_GPT9				(1 << 11)
+#define OMAP24XX_AUTO_GPT9_SHIFT			11
 #define OMAP24XX_AUTO_GPT8				(1 << 10)
+#define OMAP24XX_AUTO_GPT8_SHIFT			10
 #define OMAP24XX_AUTO_GPT7				(1 << 9)
+#define OMAP24XX_AUTO_GPT7_SHIFT			9
 #define OMAP24XX_AUTO_GPT6				(1 << 8)
+#define OMAP24XX_AUTO_GPT6_SHIFT			8
 #define OMAP24XX_AUTO_GPT5				(1 << 7)
+#define OMAP24XX_AUTO_GPT5_SHIFT			7
 #define OMAP24XX_AUTO_GPT4				(1 << 6)
+#define OMAP24XX_AUTO_GPT4_SHIFT			6
 #define OMAP24XX_AUTO_GPT3				(1 << 5)
+#define OMAP24XX_AUTO_GPT3_SHIFT			5
 #define OMAP24XX_AUTO_GPT2				(1 << 4)
+#define OMAP24XX_AUTO_GPT2_SHIFT			4
 #define OMAP2420_AUTO_VLYNQ				(1 << 3)
+#define OMAP2420_AUTO_VLYNQ_SHIFT			3
 #define OMAP24XX_AUTO_DSS				(1 << 0)
+#define OMAP24XX_AUTO_DSS_SHIFT				0
 
 /* CM_AUTOIDLE2_CORE */
 #define OMAP2430_AUTO_MDM_INTC				(1 << 11)
+#define OMAP2430_AUTO_MDM_INTC_SHIFT			11
 #define OMAP2430_AUTO_GPIO5				(1 << 10)
+#define OMAP2430_AUTO_GPIO5_SHIFT			10
 #define OMAP2430_AUTO_MCSPI3				(1 << 9)
+#define OMAP2430_AUTO_MCSPI3_SHIFT			9
 #define OMAP2430_AUTO_MMCHS2				(1 << 8)
+#define OMAP2430_AUTO_MMCHS2_SHIFT			8
 #define OMAP2430_AUTO_MMCHS1				(1 << 7)
+#define OMAP2430_AUTO_MMCHS1_SHIFT			7
 #define OMAP2430_AUTO_USBHS				(1 << 6)
+#define OMAP2430_AUTO_USBHS_SHIFT			6
 #define OMAP2430_AUTO_MCBSP5				(1 << 5)
+#define OMAP2430_AUTO_MCBSP5_SHIFT			5
 #define OMAP2430_AUTO_MCBSP4				(1 << 4)
+#define OMAP2430_AUTO_MCBSP4_SHIFT			4
 #define OMAP2430_AUTO_MCBSP3				(1 << 3)
+#define OMAP2430_AUTO_MCBSP3_SHIFT			3
 #define OMAP24XX_AUTO_UART3				(1 << 2)
+#define OMAP24XX_AUTO_UART3_SHIFT			2
 #define OMAP24XX_AUTO_SSI				(1 << 1)
+#define OMAP24XX_AUTO_SSI_SHIFT				1
 #define OMAP24XX_AUTO_USB				(1 << 0)
+#define OMAP24XX_AUTO_USB_SHIFT				0
 
 /* CM_AUTOIDLE3_CORE */
 #define OMAP24XX_AUTO_SDRC				(1 << 2)
+#define OMAP24XX_AUTO_SDRC_SHIFT			2
 #define OMAP24XX_AUTO_GPMC				(1 << 1)
+#define OMAP24XX_AUTO_GPMC_SHIFT			1
 #define OMAP24XX_AUTO_SDMA				(1 << 0)
+#define OMAP24XX_AUTO_SDMA_SHIFT			0
 
 /* CM_AUTOIDLE4_CORE */
 #define OMAP24XX_AUTO_PKA				(1 << 4)
+#define OMAP24XX_AUTO_PKA_SHIFT				4
 #define OMAP24XX_AUTO_AES				(1 << 3)
+#define OMAP24XX_AUTO_AES_SHIFT				3
 #define OMAP24XX_AUTO_RNG				(1 << 2)
+#define OMAP24XX_AUTO_RNG_SHIFT				2
 #define OMAP24XX_AUTO_SHA				(1 << 1)
+#define OMAP24XX_AUTO_SHA_SHIFT				1
 #define OMAP24XX_AUTO_DES				(1 << 0)
+#define OMAP24XX_AUTO_DES_SHIFT				0
 
 /* CM_CLKSEL1_CORE */
 #define OMAP24XX_CLKSEL_USB_SHIFT			25

-- 

  parent reply	other threads:[~2007-08-20  9:54 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-20  9:53 [PATCH 00/28] omap2 clock: framework generalization, cleanup Paul Walmsley
2007-08-20  9:53 ` [PATCH 01/28] omap2 clock: dsp_ick parent is dsp_fck, not core_ck Paul Walmsley
2007-08-20  9:53 ` [PATCH 02/28] omap2 clock: generalize initial clock rate setup: recalculate_root_clocks() Paul Walmsley
2007-08-20  9:53 ` [PATCH 03/28] omap2 clock: mark onchip_clks as __initdata Paul Walmsley
2007-08-20  9:53 ` [PATCH 05/28] omap2 clock: rename, add comment to omap2_mpu_recalc() Paul Walmsley
2007-08-20  9:53 ` [PATCH 06/28] omap2 clock: add clksel and clksel_rate data Paul Walmsley
2007-08-20  9:53 ` [PATCH 07/28] omap2 clock: init clksel clock parents to hardware reality at clock init Paul Walmsley
2007-08-20 12:27   ` [PATCH 07/28] omap2 clock: init clksel clock parents to hardwarereality " Woodruff, Richard
2007-08-21  6:49     ` Paul Walmsley
2007-08-20  9:53 ` [PATCH 08/28] omap2 clock: convert omap2_clksel_to_divisor and omap2_divisor_to_clksel to use new clksel struct Paul Walmsley
2007-08-20  9:53 ` [PATCH 09/28] omap2 clock: convert omap2_clksel_round_rate " Paul Walmsley
2007-08-20  9:53 ` [PATCH 10/28] omap2 clock: convert omap2_get_clksel " Paul Walmsley
2007-08-20  9:53 ` [PATCH 11/28] omap2 clock: convert omap2_clksel_get_src_field() " Paul Walmsley
2007-08-20  9:53 ` [PATCH 12/28] omap2 clock: stop using clk->src_offset in omap2_clk_set_rate() Paul Walmsley
2007-08-20  9:54 ` [PATCH 13/28] omap2 clock: stop using clk->src_offset in omap2_clk_set_parent() Paul Walmsley
2007-08-20  9:54 ` [PATCH 14/28] omap2 clock: clean out old code from omap2_clksel_recalc() Paul Walmsley
2007-08-20  9:54 ` [PATCH 15/28] omap2 clock: convert remaining clksel clocks to use omap2_clksel_recalc Paul Walmsley
2007-08-20  9:54 ` [PATCH 16/28] omap2 clock: remove all {src, rate}_offset fields from struct clk Paul Walmsley
2007-08-20  9:54 ` [PATCH 17/28] omap2 clock: use the struct clk round_rate field for clksel rate rounding code Paul Walmsley
2007-08-20  9:54 ` [PATCH 19/28] omap2 clock: drop RATE_CKCTL from all OMAP2 clocks Paul Walmsley
2007-08-20  9:54 ` [PATCH 20/28] omap2 clock: remove *_SEL* clock flags Paul Walmsley
2007-08-20  9:54 ` [PATCH 21/28] omap2 clock: call clock-specific enable/disable functions if present Paul Walmsley
2007-08-20  9:54 ` [PATCH 22/28] omap2 clock: use custom osc_ck enable/disable routines Paul Walmsley
2007-08-20  9:54 ` [PATCH 23/28] omap2 clock: use standard clk->enable/disable for APLLs Paul Walmsley
2007-08-20  9:54 ` [PATCH 24/28] omap2 clock: replace omap2_get_crystal_rate() with clock-specific recalc code Paul Walmsley
2007-08-20  9:54 ` [PATCH 25/28] omap2 clock: Standardize DPLL rate recalculation with struct dpll_data Paul Walmsley
2007-08-20  9:54 ` [PATCH 27/28] omap2 clock: add three missing clocks: gpmc_fck, sdma_{i, f}ck Paul Walmsley
2007-08-20  9:54 ` Paul Walmsley [this message]
2007-08-20 12:55   ` [PATCH 28/28] omap2 clock: handle (almost) all clock autoidling viathe clock framework Woodruff, Richard
2007-08-21  7:04     ` Paul Walmsley
2007-08-21 17:29       ` Woodruff, Richard
2007-08-22  9:49         ` Paul Walmsley
2007-08-22 21:25           ` Woodruff, Richard
2007-08-27  7:39             ` Paul Walmsley
2007-08-30 22:21               ` Woodruff, Richard
2007-08-23  9:21     ` [PATCH 28/28] omap2 clock: handle (almost) all clock autoidlingviathe " Tuukka.Tikkanen
2007-08-27  7:56       ` Paul Walmsley
2007-08-27 14:13         ` Tuukka.Tikkanen
2007-08-20 13:18   ` [PATCH 28/28] omap2 clock: handle (almost) all clock autoidling viathe " Woodruff, Richard
2007-08-20 13:30     ` Igor Stoppa
2007-08-20 13:48       ` [PATCH 28/28] omap2 clock: handle (almost) all clockautoidling " Woodruff, Richard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070820095532.728389316@pwsan.com \
    --to=paul@pwsan.com \
    --cc=linux-omap-open-source@linux.omap.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox