diff options
author | Wen Yi <wyi@nvidia.com> | 2012-01-23 22:54:21 -0800 |
---|---|---|
committer | Rohan Somvanshi <rsomvanshi@nvidia.com> | 2012-01-31 04:22:28 -0800 |
commit | dd45552b4f02badea998931881ee9671cba40e5e (patch) | |
tree | 17ab159037b7cd1e71654eb2b7aa1587a4364610 /arch | |
parent | 4bea73c207fa4099df484b196508283a0c5b183c (diff) |
arm: tegra3: change min_rate for sclk
Change the minimal rate of sclk to 12 MHz and set the lowest
frequency of sbus to be 40 MHz when display is on.
BUG 922351
Reviewed-on: http://git-master/r/76959
Change-Id: I6a2871d1cc02a19829cf397e9583122e02255f81
Signed-off-by: Wen Yi <wyi@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/78010
Reviewed-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
Tested-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/common.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/pm.c | 31 | ||||
-rw-r--r-- | arch/arm/mach-tegra/tegra3_clocks.c | 3 |
3 files changed, 34 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index e51311f5c41e..b5c362260dd1 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -157,6 +157,7 @@ static __initdata struct tegra_clk_init_table common_clk_init_table[] = { { "sclk", "pll_p_out4", 102000000, true }, { "hclk", "sclk", 102000000, true }, { "pclk", "hclk", 51000000, true }, + { "wake.sclk", NULL, 40000000, true }, #endif #else { "pll_p", NULL, 216000000, true }, diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c index 58aec4ff0f8d..803ce0762fcf 100644 --- a/arch/arm/mach-tegra/pm.c +++ b/arch/arm/mach-tegra/pm.c @@ -33,6 +33,7 @@ #include <linux/debugfs.h> #include <linux/delay.h> #include <linux/suspend.h> +#include <linux/earlysuspend.h> #include <linux/slab.h> #include <linux/serial_reg.h> #include <linux/seq_file.h> @@ -1257,3 +1258,33 @@ static int tegra_debug_uart_syscore_init(void) return 0; } arch_initcall(tegra_debug_uart_syscore_init); + +#ifdef CONFIG_HAS_EARLYSUSPEND +static struct clk *clk_wake; + +static void pm_early_suspend(struct early_suspend *h) +{ + if (clk_wake) + clk_disable(clk_wake); +} + +static void pm_late_resume(struct early_suspend *h) +{ + if (clk_wake) + clk_enable(clk_wake); +} + +static struct early_suspend pm_early_suspender = { + .suspend = pm_early_suspend, + .resume = pm_late_resume, +}; + +static int pm_init_wake_behavior(void) +{ + clk_wake = tegra_get_clock_by_name("wake.sclk"); + register_early_suspend(&pm_early_suspender); + return 0; +} + +late_initcall(pm_init_wake_behavior); +#endif diff --git a/arch/arm/mach-tegra/tegra3_clocks.c b/arch/arm/mach-tegra/tegra3_clocks.c index ff7c0d09e7c6..caadeea00830 100644 --- a/arch/arm/mach-tegra/tegra3_clocks.c +++ b/arch/arm/mach-tegra/tegra3_clocks.c @@ -3905,7 +3905,7 @@ static struct clk tegra_clk_sclk = { .reg = 0x28, .ops = &tegra_super_ops, .max_rate = 334000000, - .min_rate = 40000000, + .min_rate = 12000000, }; static struct clk tegra_clk_virtual_cpu_g = { @@ -4309,6 +4309,7 @@ struct clk tegra_list_clks[] = { SHARED_CLK("usb1.sclk", "tegra-ehci.0", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0), SHARED_CLK("usb2.sclk", "tegra-ehci.1", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0), SHARED_CLK("usb3.sclk", "tegra-ehci.2", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0), + SHARED_CLK("wake.sclk", "wake_sclk", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0), SHARED_CLK("mon.avp", "tegra_actmon", "avp", &tegra_clk_sbus_cmplx, NULL, 0, 0), SHARED_CLK("cap.sclk", "cap_sclk", NULL, &tegra_clk_sbus_cmplx, NULL, 0, SHARED_CEILING), SHARED_CLK("floor.sclk", "floor_sclk", NULL, &tegra_clk_sbus_cmplx, NULL, 0, 0), |