aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
authorJoseph Lo <josephl@nvidia.com>2013-06-04 06:47:33 -0400
committerStephen Warren <swarren@nvidia.com>2013-06-05 13:44:54 -0400
commitbf91add4a0feb7a8624a1f6b3fd4d6dbe9dce1bc (patch)
tree4d884d56774156f70140aff427178ca637739e23 /arch/arm/mach-tegra
parente22dc2b25655706751789a8d035b57bf04299cbd (diff)
ARM: tegra: hook tegra_tear_down_cpu function in the PM suspend init function
The tegra_tear_down_cpu was used to cut off the CPU rail for various Tegra SoCs. Hooking it in the PM suspend init function and making the CPUidle driver more generic. Signed-off-by: Joseph Lo <josephl@nvidia.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r--arch/arm/mach-tegra/cpuidle-tegra20.c3
-rw-r--r--arch/arm/mach-tegra/cpuidle-tegra30.c3
-rw-r--r--arch/arm/mach-tegra/pm.c15
3 files changed, 15 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c
index 0cdba8de8c77..d6675130ee62 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra20.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra20.c
@@ -214,8 +214,5 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,
214 214
215int __init tegra20_cpuidle_init(void) 215int __init tegra20_cpuidle_init(void)
216{ 216{
217#ifdef CONFIG_PM_SLEEP
218 tegra_tear_down_cpu = tegra20_tear_down_cpu;
219#endif
220 return cpuidle_register(&tegra_idle_driver, cpu_possible_mask); 217 return cpuidle_register(&tegra_idle_driver, cpu_possible_mask);
221} 218}
diff --git a/arch/arm/mach-tegra/cpuidle-tegra30.c b/arch/arm/mach-tegra/cpuidle-tegra30.c
index 3cf9aca5f3ea..9d9f554115e1 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra30.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra30.c
@@ -146,8 +146,5 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,
146 146
147int __init tegra30_cpuidle_init(void) 147int __init tegra30_cpuidle_init(void)
148{ 148{
149#ifdef CONFIG_PM_SLEEP
150 tegra_tear_down_cpu = tegra30_tear_down_cpu;
151#endif
152 return cpuidle_register(&tegra_idle_driver, NULL); 149 return cpuidle_register(&tegra_idle_driver, NULL);
153} 150}
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index 45cf52c7e528..5e6fb31ba4d9 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -44,6 +44,20 @@
44static DEFINE_SPINLOCK(tegra_lp2_lock); 44static DEFINE_SPINLOCK(tegra_lp2_lock);
45void (*tegra_tear_down_cpu)(void); 45void (*tegra_tear_down_cpu)(void);
46 46
47static void tegra_tear_down_cpu_init(void)
48{
49 switch (tegra_chip_id) {
50 case TEGRA20:
51 if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC))
52 tegra_tear_down_cpu = tegra20_tear_down_cpu;
53 break;
54 case TEGRA30:
55 if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC))
56 tegra_tear_down_cpu = tegra30_tear_down_cpu;
57 break;
58 }
59}
60
47/* 61/*
48 * restore_cpu_complex 62 * restore_cpu_complex
49 * 63 *
@@ -224,6 +238,7 @@ void __init tegra_init_suspend(void)
224 if (tegra_pmc_get_suspend_mode() == TEGRA_SUSPEND_NONE) 238 if (tegra_pmc_get_suspend_mode() == TEGRA_SUSPEND_NONE)
225 return; 239 return;
226 240
241 tegra_tear_down_cpu_init();
227 tegra_pmc_suspend_init(); 242 tegra_pmc_suspend_init();
228 243
229 suspend_set_ops(&tegra_suspend_ops); 244 suspend_set_ops(&tegra_suspend_ops);