aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpica/acevents.h2
-rw-r--r--drivers/acpi/acpica/aclocal.h1
-rw-r--r--drivers/acpi/acpica/evgpe.c21
-rw-r--r--drivers/acpi/acpica/evgpeblk.c3
-rw-r--r--drivers/acpi/acpica/evgpeinit.c3
-rw-r--r--drivers/acpi/acpica/evxfevnt.c119
-rw-r--r--drivers/acpi/button.c6
-rw-r--r--drivers/acpi/ec.c6
-rw-r--r--drivers/acpi/system.c6
-rw-r--r--drivers/pci/pci-acpi.c6
10 files changed, 48 insertions, 125 deletions
diff --git a/drivers/acpi/acpica/acevents.h b/drivers/acpi/acpica/acevents.h
index c3f43daa8be3..a561944fbaf9 100644
--- a/drivers/acpi/acpica/acevents.h
+++ b/drivers/acpi/acpica/acevents.h
@@ -78,7 +78,7 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node *node,
78u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list); 78u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list);
79 79
80acpi_status 80acpi_status
81acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info); 81acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info);
82 82
83struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device, 83struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
84 u32 gpe_number); 84 u32 gpe_number);
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index eb2d420b39ec..1ee0bcf399aa 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -429,7 +429,6 @@ struct acpi_gpe_event_info {
429 u8 flags; /* Misc info about this GPE */ 429 u8 flags; /* Misc info about this GPE */
430 u8 gpe_number; /* This GPE */ 430 u8 gpe_number; /* This GPE */
431 u8 runtime_count; /* References to a run GPE */ 431 u8 runtime_count; /* References to a run GPE */
432 u8 wakeup_count; /* References to a wake GPE */
433}; 432};
434 433
435/* Information about a GPE register pair, one per each status/enable pair in an array */ 434/* Information about a GPE register pair, one per each status/enable pair in an array */
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
index d24d7d31f40c..9413ac61e440 100644
--- a/drivers/acpi/acpica/evgpe.c
+++ b/drivers/acpi/acpica/evgpe.c
@@ -54,24 +54,24 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context);
54 54
55/******************************************************************************* 55/*******************************************************************************
56 * 56 *
57 * FUNCTION: acpi_ev_update_gpe_enable_masks 57 * FUNCTION: acpi_ev_update_gpe_enable_mask
58 * 58 *
59 * PARAMETERS: gpe_event_info - GPE to update 59 * PARAMETERS: gpe_event_info - GPE to update
60 * 60 *
61 * RETURN: Status 61 * RETURN: Status
62 * 62 *
63 * DESCRIPTION: Updates GPE register enable masks based upon whether there are 63 * DESCRIPTION: Updates GPE register enable mask based upon whether there are
64 * references (either wake or run) to this GPE 64 * runtime references to this GPE
65 * 65 *
66 ******************************************************************************/ 66 ******************************************************************************/
67 67
68acpi_status 68acpi_status
69acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info) 69acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
70{ 70{
71 struct acpi_gpe_register_info *gpe_register_info; 71 struct acpi_gpe_register_info *gpe_register_info;
72 u32 register_bit; 72 u32 register_bit;
73 73
74 ACPI_FUNCTION_TRACE(ev_update_gpe_enable_masks); 74 ACPI_FUNCTION_TRACE(ev_update_gpe_enable_mask);
75 75
76 gpe_register_info = gpe_event_info->register_info; 76 gpe_register_info = gpe_event_info->register_info;
77 if (!gpe_register_info) { 77 if (!gpe_register_info) {
@@ -81,19 +81,14 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
81 register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info, 81 register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info,
82 gpe_register_info); 82 gpe_register_info);
83 83
84 /* Clear the wake/run bits up front */ 84 /* Clear the run bit up front */
85 85
86 ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake, register_bit);
87 ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit); 86 ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
88 87
89 /* Set the mask bits only if there are references to this GPE */ 88 /* Set the mask bit only if there are references to this GPE */
90 89
91 if (gpe_event_info->runtime_count) { 90 if (gpe_event_info->runtime_count) {
92 ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit); 91 ACPI_SET_BIT(gpe_register_info->enable_for_run, (u8)register_bit);
93 }
94
95 if (gpe_event_info->wakeup_count) {
96 ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
97 } 92 }
98 93
99 return_ACPI_STATUS(AE_OK); 94 return_ACPI_STATUS(AE_OK);
diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c
index 341a38ce8aa6..77e8630043f8 100644
--- a/drivers/acpi/acpica/evgpeblk.c
+++ b/drivers/acpi/acpica/evgpeblk.c
@@ -529,8 +529,7 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
529 529
530 /* Enable this GPE */ 530 /* Enable this GPE */
531 531
532 status = acpi_enable_gpe(gpe_device, gpe_number, 532 status = acpi_enable_gpe(gpe_device, gpe_number);
533 ACPI_GPE_TYPE_RUNTIME);
534 if (ACPI_FAILURE(status)) { 533 if (ACPI_FAILURE(status)) {
535 ACPI_EXCEPTION((AE_INFO, status, 534 ACPI_EXCEPTION((AE_INFO, status,
536 "Could not enable GPE 0x%02X", 535 "Could not enable GPE 0x%02X",
diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
index 3f6c2d26410d..8db9e076a53b 100644
--- a/drivers/acpi/acpica/evgpeinit.c
+++ b/drivers/acpi/acpica/evgpeinit.c
@@ -482,8 +482,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
482 gpe_device = NULL; 482 gpe_device = NULL;
483 } 483 }
484 484
485 status = acpi_enable_gpe(gpe_device, gpe_number, 485 status = acpi_enable_gpe(gpe_device, gpe_number);
486 ACPI_GPE_TYPE_RUNTIME);
487 if (ACPI_FAILURE(status)) { 486 if (ACPI_FAILURE(status)) {
488 ACPI_EXCEPTION((AE_INFO, status, 487 ACPI_EXCEPTION((AE_INFO, status,
489 "Could not enable GPE 0x%02X", 488 "Could not enable GPE 0x%02X",
diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c
index d6a6d4a76592..467fde961aef 100644
--- a/drivers/acpi/acpica/evxfevnt.c
+++ b/drivers/acpi/acpica/evxfevnt.c
@@ -352,12 +352,13 @@ acpi_status acpi_gpe_wakeup(acpi_handle gpe_device, u32 gpe_number, u8 action)
352 352
353 switch (action) { 353 switch (action) {
354 case ACPI_GPE_ENABLE: 354 case ACPI_GPE_ENABLE:
355 ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit); 355 ACPI_SET_BIT(gpe_register_info->enable_for_wake,
356 (u8)register_bit);
356 break; 357 break;
357 358
358 case ACPI_GPE_DISABLE: 359 case ACPI_GPE_DISABLE:
359 ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake, 360 ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
360 register_bit); 361 (u8)register_bit);
361 break; 362 break;
362 363
363 default: 364 default:
@@ -379,17 +380,14 @@ ACPI_EXPORT_SYMBOL(acpi_gpe_wakeup)
379 * 380 *
380 * PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1 381 * PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1
381 * gpe_number - GPE level within the GPE block 382 * gpe_number - GPE level within the GPE block
382 * gpe_type - ACPI_GPE_TYPE_RUNTIME or ACPI_GPE_TYPE_WAKE
383 * or both
384 * 383 *
385 * RETURN: Status 384 * RETURN: Status
386 * 385 *
387 * DESCRIPTION: Add a reference to a GPE. On the first reference, the GPE is 386 * DESCRIPTION: Add a reference to a GPE. On the first reference, the GPE is
388 * hardware-enabled (for runtime GPEs), or the GPE register mask 387 * hardware-enabled.
389 * is updated (for wake GPEs).
390 * 388 *
391 ******************************************************************************/ 389 ******************************************************************************/
392acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type) 390acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number)
393{ 391{
394 acpi_status status = AE_OK; 392 acpi_status status = AE_OK;
395 struct acpi_gpe_event_info *gpe_event_info; 393 struct acpi_gpe_event_info *gpe_event_info;
@@ -397,12 +395,6 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
397 395
398 ACPI_FUNCTION_TRACE(acpi_enable_gpe); 396 ACPI_FUNCTION_TRACE(acpi_enable_gpe);
399 397
400 /* Parameter validation */
401
402 if (!gpe_type || (gpe_type & ~ACPI_GPE_TYPE_WAKE_RUN)) {
403 return_ACPI_STATUS(AE_BAD_PARAMETER);
404 }
405
406 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); 398 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
407 399
408 /* Ensure that we have a valid GPE number */ 400 /* Ensure that we have a valid GPE number */
@@ -413,46 +405,19 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type)
413 goto unlock_and_exit; 405 goto unlock_and_exit;
414 } 406 }
415 407
416 if (gpe_type & ACPI_GPE_TYPE_RUNTIME) { 408 if (gpe_event_info->runtime_count == ACPI_UINT8_MAX) {
417 if (gpe_event_info->runtime_count == ACPI_UINT8_MAX) { 409 status = AE_LIMIT; /* Too many references */
418 status = AE_LIMIT; /* Too many references */ 410 goto unlock_and_exit;
419 goto unlock_and_exit;
420 }
421
422 gpe_event_info->runtime_count++;
423 if (gpe_event_info->runtime_count == 1) {
424 status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
425 if (ACPI_SUCCESS(status)) {
426 status = acpi_clear_and_enable_gpe(gpe_event_info);
427 }
428
429 if (ACPI_FAILURE(status)) {
430 gpe_event_info->runtime_count--;
431 goto unlock_and_exit;
432 }
433 }
434 } 411 }
435 412
436 if (gpe_type & ACPI_GPE_TYPE_WAKE) { 413 gpe_event_info->runtime_count++;
437 /* The GPE must have the ability to wake the system */ 414 if (gpe_event_info->runtime_count == 1) {
438 415 status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
439 if (!(gpe_event_info->flags & ACPI_GPE_CAN_WAKE)) { 416 if (ACPI_SUCCESS(status)) {
440 status = AE_TYPE; 417 status = acpi_clear_and_enable_gpe(gpe_event_info);
441 goto unlock_and_exit;
442 }
443
444 if (gpe_event_info->wakeup_count == ACPI_UINT8_MAX) {
445 status = AE_LIMIT; /* Too many references */
446 goto unlock_and_exit;
447 } 418 }
448 419 if (ACPI_FAILURE(status)) {
449 /* 420 gpe_event_info->runtime_count--;
450 * Update the enable mask on the first wakeup reference. Wake GPEs
451 * are only hardware-enabled just before sleeping.
452 */
453 gpe_event_info->wakeup_count++;
454 if (gpe_event_info->wakeup_count == 1) {
455 status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
456 } 421 }
457 } 422 }
458 423
@@ -468,8 +433,6 @@ ACPI_EXPORT_SYMBOL(acpi_enable_gpe)
468 * 433 *
469 * PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1 434 * PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1
470 * gpe_number - GPE level within the GPE block 435 * gpe_number - GPE level within the GPE block
471 * gpe_type - ACPI_GPE_TYPE_RUNTIME or ACPI_GPE_TYPE_WAKE
472 * or both
473 * 436 *
474 * RETURN: Status 437 * RETURN: Status
475 * 438 *
@@ -478,7 +441,7 @@ ACPI_EXPORT_SYMBOL(acpi_enable_gpe)
478 * the GPE mask bit disabled (for wake GPEs) 441 * the GPE mask bit disabled (for wake GPEs)
479 * 442 *
480 ******************************************************************************/ 443 ******************************************************************************/
481acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type) 444acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number)
482{ 445{
483 acpi_status status = AE_OK; 446 acpi_status status = AE_OK;
484 struct acpi_gpe_event_info *gpe_event_info; 447 struct acpi_gpe_event_info *gpe_event_info;
@@ -486,12 +449,6 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type
486 449
487 ACPI_FUNCTION_TRACE(acpi_disable_gpe); 450 ACPI_FUNCTION_TRACE(acpi_disable_gpe);
488 451
489 /* Parameter validation */
490
491 if (!gpe_type || (gpe_type & ~ACPI_GPE_TYPE_WAKE_RUN)) {
492 return_ACPI_STATUS(AE_BAD_PARAMETER);
493 }
494
495 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); 452 flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
496 453
497 /* Ensure that we have a valid GPE number */ 454 /* Ensure that we have a valid GPE number */
@@ -504,41 +461,21 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u8 gpe_type
504 461
505 /* Hardware-disable a runtime GPE on removal of the last reference */ 462 /* Hardware-disable a runtime GPE on removal of the last reference */
506 463
507 if (gpe_type & ACPI_GPE_TYPE_RUNTIME) { 464 if (!gpe_event_info->runtime_count) {
508 if (!gpe_event_info->runtime_count) { 465 status = AE_LIMIT; /* There are no references to remove */
509 status = AE_LIMIT; /* There are no references to remove */ 466 goto unlock_and_exit;
510 goto unlock_and_exit;
511 }
512
513 gpe_event_info->runtime_count--;
514 if (!gpe_event_info->runtime_count) {
515 status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
516 if (ACPI_SUCCESS(status)) {
517 status = acpi_hw_low_set_gpe(gpe_event_info,
518 ACPI_GPE_DISABLE);
519 }
520
521 if (ACPI_FAILURE(status)) {
522 gpe_event_info->runtime_count++;
523 goto unlock_and_exit;
524 }
525 }
526 } 467 }
527 468
528 /* 469 gpe_event_info->runtime_count--;
529 * Update masks for wake GPE on removal of the last reference. 470 if (!gpe_event_info->runtime_count) {
530 * No need to hardware-disable wake GPEs here, they are not currently 471 status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
531 * enabled. 472 if (ACPI_SUCCESS(status)) {
532 */ 473 status =
533 if (gpe_type & ACPI_GPE_TYPE_WAKE) { 474 acpi_hw_low_set_gpe(gpe_event_info,
534 if (!gpe_event_info->wakeup_count) { 475 ACPI_GPE_DISABLE);
535 status = AE_LIMIT; /* There are no references to remove */
536 goto unlock_and_exit;
537 } 476 }
538 477 if (ACPI_FAILURE(status)) {
539 gpe_event_info->wakeup_count--; 478 gpe_event_info->runtime_count++;
540 if (!gpe_event_info->wakeup_count) {
541 status = acpi_ev_update_gpe_enable_masks(gpe_event_info);
542 } 479 }
543 } 480 }
544 481
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
index 7d857dabdde4..1575a9b51f1d 100644
--- a/drivers/acpi/button.c
+++ b/drivers/acpi/button.c
@@ -424,8 +424,7 @@ static int acpi_button_add(struct acpi_device *device)
424 if (device->wakeup.flags.valid) { 424 if (device->wakeup.flags.valid) {
425 /* Button's GPE is run-wake GPE */ 425 /* Button's GPE is run-wake GPE */
426 acpi_enable_gpe(device->wakeup.gpe_device, 426 acpi_enable_gpe(device->wakeup.gpe_device,
427 device->wakeup.gpe_number, 427 device->wakeup.gpe_number);
428 ACPI_GPE_TYPE_RUNTIME);
429 device->wakeup.run_wake_count++; 428 device->wakeup.run_wake_count++;
430 device->wakeup.state.enabled = 1; 429 device->wakeup.state.enabled = 1;
431 } 430 }
@@ -448,8 +447,7 @@ static int acpi_button_remove(struct acpi_device *device, int type)
448 447
449 if (device->wakeup.flags.valid) { 448 if (device->wakeup.flags.valid) {
450 acpi_disable_gpe(device->wakeup.gpe_device, 449 acpi_disable_gpe(device->wakeup.gpe_device,
451 device->wakeup.gpe_number, 450 device->wakeup.gpe_number);
452 ACPI_GPE_TYPE_RUNTIME);
453 device->wakeup.run_wake_count--; 451 device->wakeup.run_wake_count--;
454 device->wakeup.state.enabled = 0; 452 device->wakeup.state.enabled = 0;
455 } 453 }
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 5f2027d782e8..bf5045416575 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -822,7 +822,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
822 if (ACPI_FAILURE(status)) 822 if (ACPI_FAILURE(status))
823 return -ENODEV; 823 return -ENODEV;
824 824
825 acpi_enable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME); 825 acpi_enable_gpe(NULL, ec->gpe);
826 status = acpi_install_address_space_handler(ec->handle, 826 status = acpi_install_address_space_handler(ec->handle,
827 ACPI_ADR_SPACE_EC, 827 ACPI_ADR_SPACE_EC,
828 &acpi_ec_space_handler, 828 &acpi_ec_space_handler,
@@ -839,7 +839,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
839 } else { 839 } else {
840 acpi_remove_gpe_handler(NULL, ec->gpe, 840 acpi_remove_gpe_handler(NULL, ec->gpe,
841 &acpi_ec_gpe_handler); 841 &acpi_ec_gpe_handler);
842 acpi_disable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME); 842 acpi_disable_gpe(NULL, ec->gpe);
843 return -ENODEV; 843 return -ENODEV;
844 } 844 }
845 } 845 }
@@ -850,7 +850,7 @@ static int ec_install_handlers(struct acpi_ec *ec)
850 850
851static void ec_remove_handlers(struct acpi_ec *ec) 851static void ec_remove_handlers(struct acpi_ec *ec)
852{ 852{
853 acpi_disable_gpe(NULL, ec->gpe, ACPI_GPE_TYPE_RUNTIME); 853 acpi_disable_gpe(NULL, ec->gpe);
854 if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, 854 if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
855 ACPI_ADR_SPACE_EC, &acpi_ec_space_handler))) 855 ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
856 pr_err(PREFIX "failed to remove space handler\n"); 856 pr_err(PREFIX "failed to remove space handler\n");
diff --git a/drivers/acpi/system.c b/drivers/acpi/system.c
index f8db50a0941c..5981bd07e20e 100644
--- a/drivers/acpi/system.c
+++ b/drivers/acpi/system.c
@@ -388,12 +388,10 @@ static ssize_t counter_set(struct kobject *kobj,
388 if (index < num_gpes) { 388 if (index < num_gpes) {
389 if (!strcmp(buf, "disable\n") && 389 if (!strcmp(buf, "disable\n") &&
390 (status & ACPI_EVENT_FLAG_ENABLED)) 390 (status & ACPI_EVENT_FLAG_ENABLED))
391 result = acpi_disable_gpe(handle, index, 391 result = acpi_disable_gpe(handle, index);
392 ACPI_GPE_TYPE_RUNTIME);
393 else if (!strcmp(buf, "enable\n") && 392 else if (!strcmp(buf, "enable\n") &&
394 !(status & ACPI_EVENT_FLAG_ENABLED)) 393 !(status & ACPI_EVENT_FLAG_ENABLED))
395 result = acpi_enable_gpe(handle, index, 394 result = acpi_enable_gpe(handle, index);
396 ACPI_GPE_TYPE_RUNTIME);
397 else if (!strcmp(buf, "clear\n") && 395 else if (!strcmp(buf, "clear\n") &&
398 (status & ACPI_EVENT_FLAG_SET)) 396 (status & ACPI_EVENT_FLAG_SET))
399 result = acpi_clear_gpe(handle, index); 397 result = acpi_clear_gpe(handle, index);
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 2e7a3bf13824..5342e037e37f 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -295,14 +295,12 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
295 if (!dev->wakeup.run_wake_count++) { 295 if (!dev->wakeup.run_wake_count++) {
296 acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0); 296 acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0);
297 acpi_enable_gpe(dev->wakeup.gpe_device, 297 acpi_enable_gpe(dev->wakeup.gpe_device,
298 dev->wakeup.gpe_number, 298 dev->wakeup.gpe_number);
299 ACPI_GPE_TYPE_RUNTIME);
300 } 299 }
301 } else if (dev->wakeup.run_wake_count > 0) { 300 } else if (dev->wakeup.run_wake_count > 0) {
302 if (!--dev->wakeup.run_wake_count) { 301 if (!--dev->wakeup.run_wake_count) {
303 acpi_disable_gpe(dev->wakeup.gpe_device, 302 acpi_disable_gpe(dev->wakeup.gpe_device,
304 dev->wakeup.gpe_number, 303 dev->wakeup.gpe_number);
305 ACPI_GPE_TYPE_RUNTIME);
306 acpi_disable_wakeup_device_power(dev); 304 acpi_disable_wakeup_device_power(dev);
307 } 305 }
308 } else { 306 } else {