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
--
next prev 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