diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/macintosh/via-pmu.c | 48 |
1 files changed, 6 insertions, 42 deletions
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 8f98257e6a15..7e77ac7e3705 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -197,12 +197,6 @@ static int proc_read_options(char *page, char **start, off_t off, | |||
197 | static int proc_write_options(struct file *file, const char __user *buffer, | 197 | static int proc_write_options(struct file *file, const char __user *buffer, |
198 | unsigned long count, void *data); | 198 | unsigned long count, void *data); |
199 | 199 | ||
200 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) | ||
201 | static void powerbook_sleep_init_3400(void); | ||
202 | #else | ||
203 | #define powerbook_sleep_init_3400() do { } while (0) | ||
204 | #endif | ||
205 | |||
206 | #ifdef CONFIG_ADB | 200 | #ifdef CONFIG_ADB |
207 | struct adb_driver via_pmu_driver = { | 201 | struct adb_driver via_pmu_driver = { |
208 | "PMU", | 202 | "PMU", |
@@ -450,10 +444,6 @@ static int __init via_pmu_start(void) | |||
450 | pmu_poll(); | 444 | pmu_poll(); |
451 | } while (pmu_state != idle); | 445 | } while (pmu_state != idle); |
452 | 446 | ||
453 | /* Do allocations and ioremaps that will be needed for sleep */ | ||
454 | if (pmu_kind == PMU_OHARE_BASED) | ||
455 | powerbook_sleep_init_3400(); | ||
456 | |||
457 | return 0; | 447 | return 0; |
458 | } | 448 | } |
459 | 449 | ||
@@ -2168,13 +2158,7 @@ pmu_release(struct inode *inode, struct file *file) | |||
2168 | } | 2158 | } |
2169 | 2159 | ||
2170 | #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32) | 2160 | #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32) |
2171 | /* | 2161 | static void pmac_suspend_disable_irqs(void) |
2172 | * overrides the weak arch_suspend_disable_irqs in kernel/power/main.c | ||
2173 | * | ||
2174 | * XXX: Once Scott Wood's patch is merged, this needs to use the ppc_md | ||
2175 | * hooks that patch adds! | ||
2176 | */ | ||
2177 | void arch_suspend_disable_irqs(void) | ||
2178 | { | 2162 | { |
2179 | #ifdef CONFIG_PMAC_BACKLIGHT | 2163 | #ifdef CONFIG_PMAC_BACKLIGHT |
2180 | /* Tell backlight code not to muck around with the chip anymore */ | 2164 | /* Tell backlight code not to muck around with the chip anymore */ |
@@ -2184,18 +2168,6 @@ void arch_suspend_disable_irqs(void) | |||
2184 | /* Call platform functions marked "on sleep" */ | 2168 | /* Call platform functions marked "on sleep" */ |
2185 | pmac_pfunc_i2c_suspend(); | 2169 | pmac_pfunc_i2c_suspend(); |
2186 | pmac_pfunc_base_suspend(); | 2170 | pmac_pfunc_base_suspend(); |
2187 | |||
2188 | /* Stop preemption */ | ||
2189 | preempt_disable(); | ||
2190 | |||
2191 | /* Make sure the decrementer won't interrupt us */ | ||
2192 | asm volatile("mtdec %0" : : "r" (0x7fffffff)); | ||
2193 | /* Make sure any pending DEC interrupt occurring while we did | ||
2194 | * the above didn't re-enable the DEC */ | ||
2195 | mb(); | ||
2196 | asm volatile("mtdec %0" : : "r" (0x7fffffff)); | ||
2197 | |||
2198 | local_irq_disable(); | ||
2199 | } | 2171 | } |
2200 | 2172 | ||
2201 | static int powerbook_sleep(suspend_state_t state) | 2173 | static int powerbook_sleep(suspend_state_t state) |
@@ -2244,25 +2216,13 @@ static int powerbook_sleep(suspend_state_t state) | |||
2244 | return 0; | 2216 | return 0; |
2245 | } | 2217 | } |
2246 | 2218 | ||
2247 | /* | 2219 | static void pmac_suspend_enable_irqs(void) |
2248 | * overrides the weak arch_suspend_enable_irqs in kernel/power/main.c | ||
2249 | * | ||
2250 | * XXX: Once Scott Wood's patch is merged, this needs to use the ppc_md | ||
2251 | * hooks that patch adds! | ||
2252 | */ | ||
2253 | void arch_suspend_enable_irqs(void) | ||
2254 | { | 2220 | { |
2255 | /* Force a poll of ADB interrupts */ | 2221 | /* Force a poll of ADB interrupts */ |
2256 | adb_int_pending = 1; | 2222 | adb_int_pending = 1; |
2257 | via_pmu_interrupt(0, NULL); | 2223 | via_pmu_interrupt(0, NULL); |
2258 | 2224 | ||
2259 | /* Restart jiffies & scheduling */ | ||
2260 | wakeup_decrementer(); | ||
2261 | |||
2262 | /* Re-enable local CPU interrupts */ | ||
2263 | local_irq_enable(); | ||
2264 | mdelay(10); | 2225 | mdelay(10); |
2265 | preempt_enable(); | ||
2266 | 2226 | ||
2267 | /* Call platform functions marked "on wake" */ | 2227 | /* Call platform functions marked "on wake" */ |
2268 | pmac_pfunc_base_resume(); | 2228 | pmac_pfunc_base_resume(); |
@@ -2282,6 +2242,10 @@ static struct platform_suspend_ops pmu_pm_ops = { | |||
2282 | 2242 | ||
2283 | static int register_pmu_pm_ops(void) | 2243 | static int register_pmu_pm_ops(void) |
2284 | { | 2244 | { |
2245 | if (pmu_kind == PMU_OHARE_BASED) | ||
2246 | powerbook_sleep_init_3400(); | ||
2247 | ppc_md.suspend_disable_irqs = pmac_suspend_disable_irqs; | ||
2248 | ppc_md.suspend_enable_irqs = pmac_suspend_enable_irqs; | ||
2285 | suspend_set_ops(&pmu_pm_ops); | 2249 | suspend_set_ops(&pmu_pm_ops); |
2286 | 2250 | ||
2287 | return 0; | 2251 | return 0; |