davinci: am18x/da850/omap-l138: keep async clock constant with cpufreq
authorSekhar Nori <nsekhar@ti.com>
Tue, 20 Jul 2010 11:16:51 +0000 (16:46 +0530)
committerKevin Hilman <khilman@deeprootsystems.com>
Fri, 24 Sep 2010 14:40:25 +0000 (07:40 -0700)
Keep PLL0 SYSCLK3 at a constant rate of 100MHz. This enables the AEMIF
timing to remain valid even as the PLL0 output is changed by cpufreq
driver to save power.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-davinci/board-da850-evm.c
arch/arm/mach-davinci/da850.c
arch/arm/mach-davinci/include/mach/da8xx.h

index f5f9472..c2800a9 100644 (file)
@@ -787,7 +787,7 @@ static __init void da850_evm_init(void)
        if (ret)
                pr_warning("da850_evm_init: rtc setup failed: %d\n", ret);
 
-       ret = da850_register_cpufreq();
+       ret = da850_register_cpufreq("pll0_sysclk3");
        if (ret)
                pr_warning("da850_evm_init: cpufreq registration failed: %d\n",
                                ret);
index 6932d80..5af7cfb 100644 (file)
@@ -86,6 +86,8 @@ static struct clk pll0_sysclk3 = {
        .parent         = &pll0_clk,
        .flags          = CLK_PLL,
        .div_reg        = PLLDIV3,
+       .set_rate       = davinci_set_sysclk_rate,
+       .maxrate        = 100000000,
 };
 
 static struct clk pll0_sysclk4 = {
@@ -929,10 +931,16 @@ static struct platform_device da850_cpufreq_device = {
        .dev = {
                .platform_data  = &cpufreq_info,
        },
+       .id = -1,
 };
 
-int __init da850_register_cpufreq(void)
+int __init da850_register_cpufreq(char *async_clk)
 {
+       /* cpufreq driver can help keep an "async" clock constant */
+       if (async_clk)
+               clk_add_alias("async", da850_cpufreq_device.name,
+                                                       async_clk, NULL);
+
        return platform_device_register(&da850_cpufreq_device);
 }
 
index 3c07059..2c3f418 100644 (file)
@@ -78,7 +78,7 @@ int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata);
 int da8xx_register_mmcsd0(struct davinci_mmc_config *config);
 void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata);
 int da8xx_register_rtc(void);
-int da850_register_cpufreq(void);
+int da850_register_cpufreq(char *async_clk);
 int da8xx_register_cpuidle(void);
 void __iomem * __init da8xx_get_mem_ctlr(void);
 int da850_register_pm(struct platform_device *pdev);