aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2012-03-20 22:01:49 -0400
committerLen Brown <len.brown@intel.com>2012-03-26 21:16:25 -0400
commit8a73b17e4c0e09cb5b80deee5451e29b830df4cc (patch)
tree292f555ca2aa42b4b4d756aca01a53b65df60970 /drivers
parent4acb6884b5568f19bd47173cba8bc1f2289d6baa (diff)
ACPICA: Sleep/Wake interfaces: optionally execute _GTS and _BFS
Enhanced the sleep/wake interfaces to optionally execute the _GTS method (Going To Sleep), and the _BFS method (Back From Sleep). Windows apparently does not execute these methods, and therefore these methods are often untested. It has been seen on some systems where the execution of these methods causes errors and also prevents the machine from entering S5. It is therefore suggested that host operating systems do not execute these methods by default. In the future, perhaps these methods can be optionally executed based on the age of the system and/or what is the newest version of Windows that the BIOS asks for via _OSI. Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpica/achware.h12
-rw-r--r--drivers/acpi/acpica/hwesleep.c21
-rw-r--r--drivers/acpi/acpica/hwsleep.c21
-rw-r--r--drivers/acpi/acpica/hwxfsleep.c35
-rw-r--r--drivers/acpi/sleep.c13
5 files changed, 63 insertions, 39 deletions
diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h
index 5de4ec72766d..5ccb99ae3a6f 100644
--- a/drivers/acpi/acpica/achware.h
+++ b/drivers/acpi/acpica/achware.h
@@ -83,22 +83,22 @@ acpi_status acpi_hw_clear_acpi_status(void);
83/* 83/*
84 * hwsleep - sleep/wake support (Legacy sleep registers) 84 * hwsleep - sleep/wake support (Legacy sleep registers)
85 */ 85 */
86acpi_status acpi_hw_legacy_sleep(u8 sleep_state); 86acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags);
87 87
88acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state); 88acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state, u8 flags);
89 89
90acpi_status acpi_hw_legacy_wake(u8 sleep_state); 90acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags);
91 91
92/* 92/*
93 * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers) 93 * hwesleep - sleep/wake support (Extended FADT-V5 sleep registers)
94 */ 94 */
95void acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument); 95void acpi_hw_execute_sleep_method(char *method_name, u32 integer_argument);
96 96
97acpi_status acpi_hw_extended_sleep(u8 sleep_state); 97acpi_status acpi_hw_extended_sleep(u8 sleep_state, u8 flags);
98 98
99acpi_status acpi_hw_extended_wake_prep(u8 sleep_state); 99acpi_status acpi_hw_extended_wake_prep(u8 sleep_state, u8 flags);
100 100
101acpi_status acpi_hw_extended_wake(u8 sleep_state); 101acpi_status acpi_hw_extended_wake(u8 sleep_state, u8 flags);
102 102
103/* 103/*
104 * hwvalid - Port I/O with validation 104 * hwvalid - Port I/O with validation
diff --git a/drivers/acpi/acpica/hwesleep.c b/drivers/acpi/acpica/hwesleep.c
index 6cbc4e10bfa8..1c409e82c461 100644
--- a/drivers/acpi/acpica/hwesleep.c
+++ b/drivers/acpi/acpica/hwesleep.c
@@ -103,6 +103,7 @@ void acpi_hw_execute_sleep_method(char *method_pathname, u32 integer_argument)
103 * FUNCTION: acpi_hw_extended_sleep 103 * FUNCTION: acpi_hw_extended_sleep
104 * 104 *
105 * PARAMETERS: sleep_state - Which sleep state to enter 105 * PARAMETERS: sleep_state - Which sleep state to enter
106 * Flags - ACPI_EXECUTE_GTS to run optional method
106 * 107 *
107 * RETURN: Status 108 * RETURN: Status
108 * 109 *
@@ -112,7 +113,7 @@ void acpi_hw_execute_sleep_method(char *method_pathname, u32 integer_argument)
112 * 113 *
113 ******************************************************************************/ 114 ******************************************************************************/
114 115
115acpi_status acpi_hw_extended_sleep(u8 sleep_state) 116acpi_status acpi_hw_extended_sleep(u8 sleep_state, u8 flags)
116{ 117{
117 acpi_status status; 118 acpi_status status;
118 u8 sleep_type_value; 119 u8 sleep_type_value;
@@ -136,9 +137,11 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
136 137
137 acpi_gbl_system_awake_and_running = FALSE; 138 acpi_gbl_system_awake_and_running = FALSE;
138 139
139 /* Execute the _GTS method (Going To Sleep) */ 140 /* Optionally execute _GTS (Going To Sleep) */
140 141
141 acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); 142 if (flags & ACPI_EXECUTE_GTS) {
143 acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state);
144 }
142 145
143 /* Flush caches, as per ACPI specification */ 146 /* Flush caches, as per ACPI specification */
144 147
@@ -181,6 +184,7 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
181 * FUNCTION: acpi_hw_extended_wake_prep 184 * FUNCTION: acpi_hw_extended_wake_prep
182 * 185 *
183 * PARAMETERS: sleep_state - Which sleep state we just exited 186 * PARAMETERS: sleep_state - Which sleep state we just exited
187 * Flags - ACPI_EXECUTE_BFS to run optional method
184 * 188 *
185 * RETURN: Status 189 * RETURN: Status
186 * 190 *
@@ -189,7 +193,7 @@ acpi_status acpi_hw_extended_sleep(u8 sleep_state)
189 * 193 *
190 ******************************************************************************/ 194 ******************************************************************************/
191 195
192acpi_status acpi_hw_extended_wake_prep(u8 sleep_state) 196acpi_status acpi_hw_extended_wake_prep(u8 sleep_state, u8 flags)
193{ 197{
194 acpi_status status; 198 acpi_status status;
195 u8 sleep_type_value; 199 u8 sleep_type_value;
@@ -208,7 +212,11 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
208 &acpi_gbl_FADT.sleep_control); 212 &acpi_gbl_FADT.sleep_control);
209 } 213 }
210 214
211 acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); 215 /* Optionally execute _BFS (Back From Sleep) */
216
217 if (flags & ACPI_EXECUTE_BFS) {
218 acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state);
219 }
212 return_ACPI_STATUS(AE_OK); 220 return_ACPI_STATUS(AE_OK);
213} 221}
214 222
@@ -217,6 +225,7 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
217 * FUNCTION: acpi_hw_extended_wake 225 * FUNCTION: acpi_hw_extended_wake
218 * 226 *
219 * PARAMETERS: sleep_state - Which sleep state we just exited 227 * PARAMETERS: sleep_state - Which sleep state we just exited
228 * Flags - Reserved, set to zero
220 * 229 *
221 * RETURN: Status 230 * RETURN: Status
222 * 231 *
@@ -225,7 +234,7 @@ acpi_status acpi_hw_extended_wake_prep(u8 sleep_state)
225 * 234 *
226 ******************************************************************************/ 235 ******************************************************************************/
227 236
228acpi_status acpi_hw_extended_wake(u8 sleep_state) 237acpi_status acpi_hw_extended_wake(u8 sleep_state, u8 flags)
229{ 238{
230 ACPI_FUNCTION_TRACE(hw_extended_wake); 239 ACPI_FUNCTION_TRACE(hw_extended_wake);
231 240
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c
index aba36349ba4d..8ab325cefa68 100644
--- a/drivers/acpi/acpica/hwsleep.c
+++ b/drivers/acpi/acpica/hwsleep.c
@@ -56,6 +56,7 @@ ACPI_MODULE_NAME("hwsleep")
56 * FUNCTION: acpi_hw_legacy_sleep 56 * FUNCTION: acpi_hw_legacy_sleep
57 * 57 *
58 * PARAMETERS: sleep_state - Which sleep state to enter 58 * PARAMETERS: sleep_state - Which sleep state to enter
59 * Flags - ACPI_EXECUTE_GTS to run optional method
59 * 60 *
60 * RETURN: Status 61 * RETURN: Status
61 * 62 *
@@ -63,7 +64,7 @@ ACPI_MODULE_NAME("hwsleep")
63 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED 64 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
64 * 65 *
65 ******************************************************************************/ 66 ******************************************************************************/
66acpi_status acpi_hw_legacy_sleep(u8 sleep_state) 67acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags)
67{ 68{
68 struct acpi_bit_register_info *sleep_type_reg_info; 69 struct acpi_bit_register_info *sleep_type_reg_info;
69 struct acpi_bit_register_info *sleep_enable_reg_info; 70 struct acpi_bit_register_info *sleep_enable_reg_info;
@@ -121,9 +122,11 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
121 return_ACPI_STATUS(status); 122 return_ACPI_STATUS(status);
122 } 123 }
123 124
124 /* Execute the _GTS method (Going To Sleep) */ 125 /* Optionally execute _GTS (Going To Sleep) */
125 126
126 acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state); 127 if (flags & ACPI_EXECUTE_GTS) {
128 acpi_hw_execute_sleep_method(METHOD_PATHNAME__GTS, sleep_state);
129 }
127 130
128 /* Get current value of PM1A control */ 131 /* Get current value of PM1A control */
129 132
@@ -219,6 +222,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
219 * FUNCTION: acpi_hw_legacy_wake_prep 222 * FUNCTION: acpi_hw_legacy_wake_prep
220 * 223 *
221 * PARAMETERS: sleep_state - Which sleep state we just exited 224 * PARAMETERS: sleep_state - Which sleep state we just exited
225 * Flags - ACPI_EXECUTE_BFS to run optional method
222 * 226 *
223 * RETURN: Status 227 * RETURN: Status
224 * 228 *
@@ -228,7 +232,7 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state)
228 * 232 *
229 ******************************************************************************/ 233 ******************************************************************************/
230 234
231acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state) 235acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state, u8 flags)
232{ 236{
233 acpi_status status; 237 acpi_status status;
234 struct acpi_bit_register_info *sleep_type_reg_info; 238 struct acpi_bit_register_info *sleep_type_reg_info;
@@ -279,7 +283,11 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
279 } 283 }
280 } 284 }
281 285
282 acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state); 286 /* Optionally execute _BFS (Back From Sleep) */
287
288 if (flags & ACPI_EXECUTE_BFS) {
289 acpi_hw_execute_sleep_method(METHOD_PATHNAME__BFS, sleep_state);
290 }
283 return_ACPI_STATUS(status); 291 return_ACPI_STATUS(status);
284} 292}
285 293
@@ -288,6 +296,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
288 * FUNCTION: acpi_hw_legacy_wake 296 * FUNCTION: acpi_hw_legacy_wake
289 * 297 *
290 * PARAMETERS: sleep_state - Which sleep state we just exited 298 * PARAMETERS: sleep_state - Which sleep state we just exited
299 * Flags - Reserved, set to zero
291 * 300 *
292 * RETURN: Status 301 * RETURN: Status
293 * 302 *
@@ -296,7 +305,7 @@ acpi_status acpi_hw_legacy_wake_prep(u8 sleep_state)
296 * 305 *
297 ******************************************************************************/ 306 ******************************************************************************/
298 307
299acpi_status acpi_hw_legacy_wake(u8 sleep_state) 308acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags)
300{ 309{
301 acpi_status status; 310 acpi_status status;
302 311
diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c
index cf0168e538d9..762d059bb508 100644
--- a/drivers/acpi/acpica/hwxfsleep.c
+++ b/drivers/acpi/acpica/hwxfsleep.c
@@ -49,15 +49,16 @@
49ACPI_MODULE_NAME("hwxfsleep") 49ACPI_MODULE_NAME("hwxfsleep")
50 50
51/* Local prototypes */ 51/* Local prototypes */
52static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id); 52static acpi_status
53acpi_hw_sleep_dispatch(u8 sleep_state, u8 flags, u32 function_id);
53 54
54/* 55/*
55 * Dispatch table used to efficiently branch to the various sleep 56 * Dispatch table used to efficiently branch to the various sleep
56 * functions. 57 * functions.
57 */ 58 */
58#define ACPI_SLEEP_FUNCTION 0 59#define ACPI_SLEEP_FUNCTION_ID 0
59#define ACPI_WAKE_PREP_FUNCTION 1 60#define ACPI_WAKE_PREP_FUNCTION_ID 1
60#define ACPI_WAKE_FUNCTION 2 61#define ACPI_WAKE_FUNCTION_ID 2
61 62
62/* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */ 63/* Legacy functions are optional, based upon ACPI_REDUCED_HARDWARE */
63 64
@@ -233,7 +234,8 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios)
233 * function. 234 * function.
234 * 235 *
235 ******************************************************************************/ 236 ******************************************************************************/
236static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id) 237static acpi_status
238acpi_hw_sleep_dispatch(u8 sleep_state, u8 flags, u32 function_id)
237{ 239{
238 acpi_status status; 240 acpi_status status;
239 struct acpi_sleep_functions *sleep_functions = 241 struct acpi_sleep_functions *sleep_functions =
@@ -246,11 +248,11 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id)
246 * use the extended sleep registers 248 * use the extended sleep registers
247 */ 249 */
248 if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) { 250 if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) {
249 status = sleep_functions->extended_function(sleep_state); 251 status = sleep_functions->extended_function(sleep_state, flags);
250 } else { 252 } else {
251 /* Legacy sleep */ 253 /* Legacy sleep */
252 254
253 status = sleep_functions->legacy_function(sleep_state); 255 status = sleep_functions->legacy_function(sleep_state, flags);
254 } 256 }
255 257
256 return (status); 258 return (status);
@@ -260,7 +262,7 @@ static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id)
260 * For the case where reduced-hardware-only code is being generated, 262 * For the case where reduced-hardware-only code is being generated,
261 * we know that only the extended sleep registers are available 263 * we know that only the extended sleep registers are available
262 */ 264 */
263 status = sleep_functions->extended_function(sleep_state); 265 status = sleep_functions->extended_function(sleep_state, flags);
264 return (status); 266 return (status);
265 267
266#endif /* !ACPI_REDUCED_HARDWARE */ 268#endif /* !ACPI_REDUCED_HARDWARE */
@@ -290,8 +292,6 @@ acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
290 292
291 ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep); 293 ACPI_FUNCTION_TRACE(acpi_enter_sleep_state_prep);
292 294
293 /* _PSW methods could be run here to enable wake-on keyboard, LAN, etc. */
294
295 status = acpi_get_sleep_type_data(sleep_state, 295 status = acpi_get_sleep_type_data(sleep_state,
296 &acpi_gbl_sleep_type_a, 296 &acpi_gbl_sleep_type_a,
297 &acpi_gbl_sleep_type_b); 297 &acpi_gbl_sleep_type_b);
@@ -349,6 +349,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
349 * FUNCTION: acpi_enter_sleep_state 349 * FUNCTION: acpi_enter_sleep_state
350 * 350 *
351 * PARAMETERS: sleep_state - Which sleep state to enter 351 * PARAMETERS: sleep_state - Which sleep state to enter
352 * Flags - ACPI_EXECUTE_GTS to run optional method
352 * 353 *
353 * RETURN: Status 354 * RETURN: Status
354 * 355 *
@@ -356,7 +357,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state_prep)
356 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED 357 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
357 * 358 *
358 ******************************************************************************/ 359 ******************************************************************************/
359acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state) 360acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state, u8 flags)
360{ 361{
361 acpi_status status; 362 acpi_status status;
362 363
@@ -369,7 +370,8 @@ acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
369 return_ACPI_STATUS(AE_AML_OPERAND_VALUE); 370 return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
370 } 371 }
371 372
372 status = acpi_hw_sleep_dispatch(sleep_state, ACPI_SLEEP_FUNCTION); 373 status =
374 acpi_hw_sleep_dispatch(sleep_state, flags, ACPI_SLEEP_FUNCTION_ID);
373 return_ACPI_STATUS(status); 375 return_ACPI_STATUS(status);
374} 376}
375 377
@@ -380,6 +382,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state)
380 * FUNCTION: acpi_leave_sleep_state_prep 382 * FUNCTION: acpi_leave_sleep_state_prep
381 * 383 *
382 * PARAMETERS: sleep_state - Which sleep state we are exiting 384 * PARAMETERS: sleep_state - Which sleep state we are exiting
385 * Flags - ACPI_EXECUTE_BFS to run optional method
383 * 386 *
384 * RETURN: Status 387 * RETURN: Status
385 * 388 *
@@ -388,13 +391,15 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_state)
388 * Called with interrupts DISABLED. 391 * Called with interrupts DISABLED.
389 * 392 *
390 ******************************************************************************/ 393 ******************************************************************************/
391acpi_status acpi_leave_sleep_state_prep(u8 sleep_state) 394acpi_status acpi_leave_sleep_state_prep(u8 sleep_state, u8 flags)
392{ 395{
393 acpi_status status; 396 acpi_status status;
394 397
395 ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep); 398 ACPI_FUNCTION_TRACE(acpi_leave_sleep_state_prep);
396 399
397 status = acpi_hw_sleep_dispatch(sleep_state, ACPI_WAKE_PREP_FUNCTION); 400 status =
401 acpi_hw_sleep_dispatch(sleep_state, flags,
402 ACPI_WAKE_PREP_FUNCTION_ID);
398 return_ACPI_STATUS(status); 403 return_ACPI_STATUS(status);
399} 404}
400 405
@@ -419,7 +424,7 @@ acpi_status acpi_leave_sleep_state(u8 sleep_state)
419 ACPI_FUNCTION_TRACE(acpi_leave_sleep_state); 424 ACPI_FUNCTION_TRACE(acpi_leave_sleep_state);
420 425
421 426
422 status = acpi_hw_sleep_dispatch(sleep_state, ACPI_WAKE_FUNCTION); 427 status = acpi_hw_sleep_dispatch(sleep_state, 0, ACPI_WAKE_FUNCTION_ID);
423 return_ACPI_STATUS(status); 428 return_ACPI_STATUS(status);
424} 429}
425 430
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 4fda549fa599..8f1fb4520d24 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -250,7 +250,8 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
250 switch (acpi_state) { 250 switch (acpi_state) {
251 case ACPI_STATE_S1: 251 case ACPI_STATE_S1:
252 barrier(); 252 barrier();
253 status = acpi_enter_sleep_state(acpi_state); 253 status = acpi_enter_sleep_state(acpi_state,
254 ACPI_NO_OPTIONAL_METHODS);
254 break; 255 break;
255 256
256 case ACPI_STATE_S3: 257 case ACPI_STATE_S3:
@@ -265,7 +266,7 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
265 acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1); 266 acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1);
266 267
267 /* Reprogram control registers and execute _BFS */ 268 /* Reprogram control registers and execute _BFS */
268 acpi_leave_sleep_state_prep(acpi_state); 269 acpi_leave_sleep_state_prep(acpi_state, ACPI_NO_OPTIONAL_METHODS);
269 270
270 /* ACPI 3.0 specs (P62) says that it's the responsibility 271 /* ACPI 3.0 specs (P62) says that it's the responsibility
271 * of the OSPM to clear the status bit [ implying that the 272 * of the OSPM to clear the status bit [ implying that the
@@ -534,9 +535,9 @@ static int acpi_hibernation_enter(void)
534 ACPI_FLUSH_CPU_CACHE(); 535 ACPI_FLUSH_CPU_CACHE();
535 536
536 /* This shouldn't return. If it returns, we have a problem */ 537 /* This shouldn't return. If it returns, we have a problem */
537 status = acpi_enter_sleep_state(ACPI_STATE_S4); 538 status = acpi_enter_sleep_state(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
538 /* Reprogram control registers and execute _BFS */ 539 /* Reprogram control registers and execute _BFS */
539 acpi_leave_sleep_state_prep(ACPI_STATE_S4); 540 acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
540 541
541 return ACPI_SUCCESS(status) ? 0 : -EFAULT; 542 return ACPI_SUCCESS(status) ? 0 : -EFAULT;
542} 543}
@@ -549,7 +550,7 @@ static void acpi_hibernation_leave(void)
549 */ 550 */
550 acpi_enable(); 551 acpi_enable();
551 /* Reprogram control registers and execute _BFS */ 552 /* Reprogram control registers and execute _BFS */
552 acpi_leave_sleep_state_prep(ACPI_STATE_S4); 553 acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
553 /* Check the hardware signature */ 554 /* Check the hardware signature */
554 if (facs && s4_hardware_signature != facs->hardware_signature) { 555 if (facs && s4_hardware_signature != facs->hardware_signature) {
555 printk(KERN_EMERG "ACPI: Hardware changed while hibernated, " 556 printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
@@ -773,7 +774,7 @@ static void acpi_power_off(void)
773 /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */ 774 /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
774 printk(KERN_DEBUG "%s called\n", __func__); 775 printk(KERN_DEBUG "%s called\n", __func__);
775 local_irq_disable(); 776 local_irq_disable();
776 acpi_enter_sleep_state(ACPI_STATE_S5); 777 acpi_enter_sleep_state(ACPI_STATE_S5, ACPI_NO_OPTIONAL_METHODS);
777} 778}
778 779
779/* 780/*