diff options
author | Joseph Lo <josephl@nvidia.com> | 2013-06-04 06:47:33 -0400 |
---|---|---|
committer | Stephen Warren <swarren@nvidia.com> | 2013-06-05 13:44:54 -0400 |
commit | bf91add4a0feb7a8624a1f6b3fd4d6dbe9dce1bc (patch) | |
tree | 4d884d56774156f70140aff427178ca637739e23 /arch/arm/mach-tegra | |
parent | e22dc2b25655706751789a8d035b57bf04299cbd (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.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/cpuidle-tegra30.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-tegra/pm.c | 15 |
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 | ||
215 | int __init tegra20_cpuidle_init(void) | 215 | int __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 | ||
147 | int __init tegra30_cpuidle_init(void) | 147 | int __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 @@ | |||
44 | static DEFINE_SPINLOCK(tegra_lp2_lock); | 44 | static DEFINE_SPINLOCK(tegra_lp2_lock); |
45 | void (*tegra_tear_down_cpu)(void); | 45 | void (*tegra_tear_down_cpu)(void); |
46 | 46 | ||
47 | static 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); |