aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/hwgpe.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/acpica/hwgpe.c')
-rw-r--r--drivers/acpi/acpica/hwgpe.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c
index bdecd5e76e87..76b0e350f5bb 100644
--- a/drivers/acpi/acpica/hwgpe.c
+++ b/drivers/acpi/acpica/hwgpe.c
@@ -98,7 +98,7 @@ acpi_status
98acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action) 98acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
99{ 99{
100 struct acpi_gpe_register_info *gpe_register_info; 100 struct acpi_gpe_register_info *gpe_register_info;
101 acpi_status status; 101 acpi_status status = AE_OK;
102 u32 enable_mask; 102 u32 enable_mask;
103 u32 register_bit; 103 u32 register_bit;
104 104
@@ -148,9 +148,14 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
148 return (AE_BAD_PARAMETER); 148 return (AE_BAD_PARAMETER);
149 } 149 }
150 150
151 /* Write the updated enable mask */ 151 if (!(register_bit & gpe_register_info->mask_for_run)) {
152 152
153 status = acpi_hw_write(enable_mask, &gpe_register_info->enable_address); 153 /* Write the updated enable mask */
154
155 status =
156 acpi_hw_write(enable_mask,
157 &gpe_register_info->enable_address);
158 }
154 return (status); 159 return (status);
155} 160}
156 161
@@ -242,6 +247,12 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
242 local_event_status |= ACPI_EVENT_FLAG_ENABLED; 247 local_event_status |= ACPI_EVENT_FLAG_ENABLED;
243 } 248 }
244 249
250 /* GPE currently masked? (masked for runtime?) */
251
252 if (register_bit & gpe_register_info->mask_for_run) {
253 local_event_status |= ACPI_EVENT_FLAG_MASKED;
254 }
255
245 /* GPE enabled for wake? */ 256 /* GPE enabled for wake? */
246 257
247 if (register_bit & gpe_register_info->enable_for_wake) { 258 if (register_bit & gpe_register_info->enable_for_wake) {
@@ -397,6 +408,7 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
397 u32 i; 408 u32 i;
398 acpi_status status; 409 acpi_status status;
399 struct acpi_gpe_register_info *gpe_register_info; 410 struct acpi_gpe_register_info *gpe_register_info;
411 u8 enable_mask;
400 412
401 /* NOTE: assumes that all GPEs are currently disabled */ 413 /* NOTE: assumes that all GPEs are currently disabled */
402 414
@@ -410,9 +422,10 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
410 422
411 /* Enable all "runtime" GPEs in this register */ 423 /* Enable all "runtime" GPEs in this register */
412 424
425 enable_mask = gpe_register_info->enable_for_run &
426 ~gpe_register_info->mask_for_run;
413 status = 427 status =
414 acpi_hw_gpe_enable_write(gpe_register_info->enable_for_run, 428 acpi_hw_gpe_enable_write(enable_mask, gpe_register_info);
415 gpe_register_info);
416 if (ACPI_FAILURE(status)) { 429 if (ACPI_FAILURE(status)) {
417 return (status); 430 return (status);
418 } 431 }