diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-06-30 23:01:12 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2010-07-06 22:34:27 -0400 |
commit | 3bd741bd0dfcc1845ae6892baa5192c91addc84c (patch) | |
tree | 3effbfaefa7dfee2c7d7223772847236ea53f718 /drivers/acpi/acpica/evgpe.c | |
parent | 3784730b02b9f147a55b0e4623fcad671273e6e6 (diff) |
ACPICA: Use low-level GPE enable during GPE block initialization
The GPE block initialization code in acpi_ev_initialize_gpe_block()
uses acpi_set_gpe() to make sure that the GPEs with nonzero
runtime counter will remain enabled, but since it already has
a struct acpi_gpe_event_info object for each GPE, it might use
the low-level GPE enabling function, acpi_clear_and_enable_gpe(),
for this purpose.
To make that happen, move acpi_clear_and_enable_gpe() to
drivers/acpi/acpica/evgpe.c and rename it to acpi_ev_enable_gpe(),
modify the two existing users of it accordingly and modify
acpi_ev_initialize_gpe_block() to use it instead of acpi_set_gpe()
and to check its return value.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/evgpe.c')
-rw-r--r-- | drivers/acpi/acpica/evgpe.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c index 9413ac61e440..56de460570d6 100644 --- a/drivers/acpi/acpica/evgpe.c +++ b/drivers/acpi/acpica/evgpe.c | |||
@@ -94,6 +94,46 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info) | |||
94 | return_ACPI_STATUS(AE_OK); | 94 | return_ACPI_STATUS(AE_OK); |
95 | } | 95 | } |
96 | 96 | ||
97 | /******************************************************************************* | ||
98 | * | ||
99 | * FUNCTION: acpi_ev_enable_gpe | ||
100 | * | ||
101 | * PARAMETERS: gpe_event_info - GPE to enable | ||
102 | * | ||
103 | * RETURN: Status | ||
104 | * | ||
105 | * DESCRIPTION: Clear the given GPE from stale events and enable it. | ||
106 | * | ||
107 | ******************************************************************************/ | ||
108 | acpi_status | ||
109 | acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info) | ||
110 | { | ||
111 | acpi_status status; | ||
112 | |||
113 | ACPI_FUNCTION_TRACE(ev_enable_gpe); | ||
114 | |||
115 | /* | ||
116 | * We will only allow a GPE to be enabled if it has either an | ||
117 | * associated method (_Lxx/_Exx) or a handler. Otherwise, the | ||
118 | * GPE will be immediately disabled by acpi_ev_gpe_dispatch the | ||
119 | * first time it fires. | ||
120 | */ | ||
121 | if (!(gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK)) { | ||
122 | return_ACPI_STATUS(AE_NO_HANDLER); | ||
123 | } | ||
124 | |||
125 | /* Clear the GPE (of stale events) */ | ||
126 | status = acpi_hw_clear_gpe(gpe_event_info); | ||
127 | if (ACPI_FAILURE(status)) { | ||
128 | return_ACPI_STATUS(status); | ||
129 | } | ||
130 | |||
131 | /* Enable the requested GPE */ | ||
132 | status = acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_ENABLE); | ||
133 | |||
134 | return_ACPI_STATUS(status); | ||
135 | } | ||
136 | |||
97 | 137 | ||
98 | /******************************************************************************* | 138 | /******************************************************************************* |
99 | * | 139 | * |