diff options
-rw-r--r-- | drivers/acpi/acpica/evxfgpe.c | 47 | ||||
-rw-r--r-- | include/acpi/acpixf.h | 4 |
2 files changed, 51 insertions, 0 deletions
diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c index 82e5c146bdd4..0cf159cc6e6d 100644 --- a/drivers/acpi/acpica/evxfgpe.c +++ b/drivers/acpi/acpica/evxfgpe.c | |||
@@ -187,6 +187,53 @@ ACPI_EXPORT_SYMBOL(acpi_disable_gpe) | |||
187 | 187 | ||
188 | /******************************************************************************* | 188 | /******************************************************************************* |
189 | * | 189 | * |
190 | * FUNCTION: acpi_mark_gpe_for_wake | ||
191 | * | ||
192 | * PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1 | ||
193 | * gpe_number - GPE level within the GPE block | ||
194 | * | ||
195 | * RETURN: Status | ||
196 | * | ||
197 | * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply | ||
198 | * sets the ACPI_GPE_CAN_WAKE flag. | ||
199 | * | ||
200 | * Some potential callers of acpi_setup_gpe_for_wake may know in advance that | ||
201 | * there won't be any notify handlers installed for device wake notifications | ||
202 | * from the given GPE (one example is a button GPE in Linux). For these cases, | ||
203 | * acpi_mark_gpe_for_wake should be used instead of acpi_setup_gpe_for_wake. | ||
204 | * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to | ||
205 | * setup implicit wake notification for it (since there's no handler method). | ||
206 | * | ||
207 | ******************************************************************************/ | ||
208 | acpi_status acpi_mark_gpe_for_wake(acpi_handle gpe_device, u32 gpe_number) | ||
209 | { | ||
210 | struct acpi_gpe_event_info *gpe_event_info; | ||
211 | acpi_status status = AE_BAD_PARAMETER; | ||
212 | acpi_cpu_flags flags; | ||
213 | |||
214 | ACPI_FUNCTION_TRACE(acpi_mark_gpe_for_wake); | ||
215 | |||
216 | flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); | ||
217 | |||
218 | /* Ensure that we have a valid GPE number */ | ||
219 | |||
220 | gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number); | ||
221 | if (gpe_event_info) { | ||
222 | |||
223 | /* Mark the GPE as a possible wake event */ | ||
224 | |||
225 | gpe_event_info->flags |= ACPI_GPE_CAN_WAKE; | ||
226 | status = AE_OK; | ||
227 | } | ||
228 | |||
229 | acpi_os_release_lock(acpi_gbl_gpe_lock, flags); | ||
230 | return_ACPI_STATUS(status); | ||
231 | } | ||
232 | |||
233 | ACPI_EXPORT_SYMBOL(acpi_mark_gpe_for_wake) | ||
234 | |||
235 | /******************************************************************************* | ||
236 | * | ||
190 | * FUNCTION: acpi_setup_gpe_for_wake | 237 | * FUNCTION: acpi_setup_gpe_for_wake |
191 | * | 238 | * |
192 | * PARAMETERS: wake_device - Device associated with the GPE (via _PRW) | 239 | * PARAMETERS: wake_device - Device associated with the GPE (via _PRW) |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 3f6e14ff24b1..508e5649dda9 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -675,6 +675,10 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | |||
675 | u32 gpe_number)) | 675 | u32 gpe_number)) |
676 | 676 | ||
677 | ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | 677 | ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status |
678 | acpi_mark_gpe_for_wake(acpi_handle gpe_device, | ||
679 | u32 gpe_number)) | ||
680 | |||
681 | ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||
678 | acpi_setup_gpe_for_wake(acpi_handle | 682 | acpi_setup_gpe_for_wake(acpi_handle |
679 | parent_device, | 683 | parent_device, |
680 | acpi_handle gpe_device, | 684 | acpi_handle gpe_device, |