summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorWen Yi <wyi@nvidia.com>2012-01-23 22:54:21 -0800
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-01-31 04:22:28 -0800
commitdd45552b4f02badea998931881ee9671cba40e5e (patch)
tree17ab159037b7cd1e71654eb2b7aa1587a4364610 /arch
parent4bea73c207fa4099df484b196508283a0c5b183c (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.c1
-rw-r--r--arch/arm/mach-tegra/pm.c31
-rw-r--r--arch/arm/mach-tegra/tegra3_clocks.c3
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),