aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/evgpe.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2010-02-23 18:52:08 -0500
committerJesse Barnes <jbarnes@virtuousgeek.org>2010-02-24 17:25:23 -0500
commitcbbc0de700e61d0cdc854d435dbc2ef148de0e00 (patch)
tree9a645bbdab91e1a00446680a95f2b86e741e0de4 /drivers/acpi/acpica/evgpe.c
parent7bc5e3f2be32ae6fb0c74cd0f707f986b3a01a26 (diff)
ACPI: Use GPE reference counting to support shared GPEs
To fix a bug and address the reviewers' comments regarding the ACPI GPE refcounting patch, do the following additional changes: o Remove the second argument of acpi_ev_enable_gpe(), 'write_to_hardware', because it is not necessary any more. o Add the "bad parameter" test against 'type' in acpi_enable_gpe() and acpi_disable_gpe(). o Make acpi_enable_gpe() only check 'status' for runtime GPEs if acpi_ev_enable_gpe() was actually called. o Make acpi_disable_gpe() return 'status' returned by acpi_ev_disable_gpe() and fix a bug where ACPI_GPE_TYPE_WAKE and ACPI_GPE_TYPE_RUNTIME were exchanged by mistake. o Add comments explaining why acpi_set_gpe() is used by the ACPI EC driver. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/acpi/acpica/evgpe.c')
-rw-r--r--drivers/acpi/acpica/evgpe.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
index 30ca3a30ef00..0b453467a5a0 100644
--- a/drivers/acpi/acpica/evgpe.c
+++ b/drivers/acpi/acpica/evgpe.c
@@ -98,8 +98,6 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
98 * FUNCTION: acpi_ev_enable_gpe 98 * FUNCTION: acpi_ev_enable_gpe
99 * 99 *
100 * PARAMETERS: gpe_event_info - GPE to enable 100 * PARAMETERS: gpe_event_info - GPE to enable
101 * write_to_hardware - Enable now, or just mark data structs
102 * (WAKE GPEs should be deferred)
103 * 101 *
104 * RETURN: Status 102 * RETURN: Status
105 * 103 *
@@ -107,9 +105,7 @@ acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info)
107 * 105 *
108 ******************************************************************************/ 106 ******************************************************************************/
109 107
110acpi_status 108acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
111acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
112 u8 write_to_hardware)
113{ 109{
114 acpi_status status; 110 acpi_status status;
115 111
@@ -123,7 +119,7 @@ acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
123 119
124 /* Mark wake-enabled or HW enable, or both */ 120 /* Mark wake-enabled or HW enable, or both */
125 121
126 if (gpe_event_info->runtime_count && write_to_hardware) { 122 if (gpe_event_info->runtime_count) {
127 /* Clear the GPE (of stale events), then enable it */ 123 /* Clear the GPE (of stale events), then enable it */
128 status = acpi_hw_clear_gpe(gpe_event_info); 124 status = acpi_hw_clear_gpe(gpe_event_info);
129 if (ACPI_FAILURE(status)) 125 if (ACPI_FAILURE(status))
@@ -400,7 +396,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
400 396
401 /* Set the GPE flags for return to enabled state */ 397 /* Set the GPE flags for return to enabled state */
402 398
403 (void)acpi_ev_enable_gpe(gpe_event_info, FALSE); 399 (void)acpi_ev_update_gpe_enable_masks(gpe_event_info);
404 400
405 /* 401 /*
406 * Take a snapshot of the GPE info for this level - we copy the info to 402 * Take a snapshot of the GPE info for this level - we copy the info to