aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/processor_core.c2
-rw-r--r--drivers/acpi/processor_idle.c19
-rw-r--r--include/acpi/processor.h2
3 files changed, 22 insertions, 1 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 2afb3d2086b3..9f11dc296cdd 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -102,6 +102,8 @@ static struct acpi_driver acpi_processor_driver = {
102 .add = acpi_processor_add, 102 .add = acpi_processor_add,
103 .remove = acpi_processor_remove, 103 .remove = acpi_processor_remove,
104 .start = acpi_processor_start, 104 .start = acpi_processor_start,
105 .suspend = acpi_processor_suspend,
106 .resume = acpi_processor_resume,
105 }, 107 },
106}; 108};
107 109
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index d9b8af763e1e..f18261368e76 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -325,6 +325,23 @@ static void acpi_state_timer_broadcast(struct acpi_processor *pr,
325 325
326#endif 326#endif
327 327
328/*
329 * Suspend / resume control
330 */
331static int acpi_idle_suspend;
332
333int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
334{
335 acpi_idle_suspend = 1;
336 return 0;
337}
338
339int acpi_processor_resume(struct acpi_device * device)
340{
341 acpi_idle_suspend = 0;
342 return 0;
343}
344
328static void acpi_processor_idle(void) 345static void acpi_processor_idle(void)
329{ 346{
330 struct acpi_processor *pr = NULL; 347 struct acpi_processor *pr = NULL;
@@ -355,7 +372,7 @@ static void acpi_processor_idle(void)
355 } 372 }
356 373
357 cx = pr->power.state; 374 cx = pr->power.state;
358 if (!cx) { 375 if (!cx || acpi_idle_suspend) {
359 if (pm_idle_save) 376 if (pm_idle_save)
360 pm_idle_save(); 377 pm_idle_save();
361 else 378 else
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index ec3ffdadb4d2..99934a999e66 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -320,6 +320,8 @@ int acpi_processor_power_init(struct acpi_processor *pr,
320int acpi_processor_cst_has_changed(struct acpi_processor *pr); 320int acpi_processor_cst_has_changed(struct acpi_processor *pr);
321int acpi_processor_power_exit(struct acpi_processor *pr, 321int acpi_processor_power_exit(struct acpi_processor *pr,
322 struct acpi_device *device); 322 struct acpi_device *device);
323int acpi_processor_suspend(struct acpi_device * device, pm_message_t state);
324int acpi_processor_resume(struct acpi_device * device);
323 325
324/* in processor_thermal.c */ 326/* in processor_thermal.c */
325int acpi_processor_get_limit_info(struct acpi_processor *pr); 327int acpi_processor_get_limit_info(struct acpi_processor *pr);