diff options
Diffstat (limited to 'drivers/acpi/acpica/evgpe.c')
-rw-r--r-- | drivers/acpi/acpica/evgpe.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c index 48f70013b488..e4ba4dec86af 100644 --- a/drivers/acpi/acpica/evgpe.c +++ b/drivers/acpi/acpica/evgpe.c | |||
@@ -698,21 +698,6 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, | |||
698 | } | 698 | } |
699 | 699 | ||
700 | /* | 700 | /* |
701 | * If edge-triggered, clear the GPE status bit now. Note that | ||
702 | * level-triggered events are cleared after the GPE is serviced. | ||
703 | */ | ||
704 | if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == | ||
705 | ACPI_GPE_EDGE_TRIGGERED) { | ||
706 | status = acpi_hw_clear_gpe(gpe_event_info); | ||
707 | if (ACPI_FAILURE(status)) { | ||
708 | ACPI_EXCEPTION((AE_INFO, status, | ||
709 | "Unable to clear GPE %02X", | ||
710 | gpe_number)); | ||
711 | return_UINT32(ACPI_INTERRUPT_NOT_HANDLED); | ||
712 | } | ||
713 | } | ||
714 | |||
715 | /* | ||
716 | * Always disable the GPE so that it does not keep firing before | 701 | * Always disable the GPE so that it does not keep firing before |
717 | * any asynchronous activity completes (either from the execution | 702 | * any asynchronous activity completes (either from the execution |
718 | * of a GPE method or an asynchronous GPE handler.) | 703 | * of a GPE method or an asynchronous GPE handler.) |
@@ -729,6 +714,23 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, | |||
729 | } | 714 | } |
730 | 715 | ||
731 | /* | 716 | /* |
717 | * If edge-triggered, clear the GPE status bit now. Note that | ||
718 | * level-triggered events are cleared after the GPE is serviced. | ||
719 | */ | ||
720 | if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) == | ||
721 | ACPI_GPE_EDGE_TRIGGERED) { | ||
722 | status = acpi_hw_clear_gpe(gpe_event_info); | ||
723 | if (ACPI_FAILURE(status)) { | ||
724 | ACPI_EXCEPTION((AE_INFO, status, | ||
725 | "Unable to clear GPE %02X", | ||
726 | gpe_number)); | ||
727 | (void)acpi_hw_low_set_gpe(gpe_event_info, | ||
728 | ACPI_GPE_CONDITIONAL_ENABLE); | ||
729 | return_UINT32(ACPI_INTERRUPT_NOT_HANDLED); | ||
730 | } | ||
731 | } | ||
732 | |||
733 | /* | ||
732 | * Dispatch the GPE to either an installed handler or the control | 734 | * Dispatch the GPE to either an installed handler or the control |
733 | * method associated with this GPE (_Lxx or _Exx). If a handler | 735 | * method associated with this GPE (_Lxx or _Exx). If a handler |
734 | * exists, we invoke it and do not attempt to run the method. | 736 | * exists, we invoke it and do not attempt to run the method. |