diff options
Diffstat (limited to 'drivers/acpi/acpica/hwgpe.c')
| -rw-r--r-- | drivers/acpi/acpica/hwgpe.c | 23 | 
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  acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)  {  	struct acpi_gpe_register_info *gpe_register_info; -	acpi_status status; +	acpi_status status = AE_OK;  	u32 enable_mask;  	u32 register_bit; @@ -148,9 +148,14 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)  		return (AE_BAD_PARAMETER);  	} -	/* Write the updated enable mask */ +	if (!(register_bit & gpe_register_info->mask_for_run)) { -	status = acpi_hw_write(enable_mask, &gpe_register_info->enable_address); +		/* Write the updated enable mask */ + +		status = +		    acpi_hw_write(enable_mask, +				  &gpe_register_info->enable_address); +	}  	return (status);  } @@ -242,6 +247,12 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,  		local_event_status |= ACPI_EVENT_FLAG_ENABLED;  	} +	/* GPE currently masked? (masked for runtime?) */ + +	if (register_bit & gpe_register_info->mask_for_run) { +		local_event_status |= ACPI_EVENT_FLAG_MASKED; +	} +  	/* GPE enabled for wake? */  	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,  	u32 i;  	acpi_status status;  	struct acpi_gpe_register_info *gpe_register_info; +	u8 enable_mask;  	/* NOTE: assumes that all GPEs are currently disabled */ @@ -410,9 +422,10 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,  		/* Enable all "runtime" GPEs in this register */ +		enable_mask = gpe_register_info->enable_for_run & +		    ~gpe_register_info->mask_for_run;  		status = -		    acpi_hw_gpe_enable_write(gpe_register_info->enable_for_run, -					     gpe_register_info); +		    acpi_hw_gpe_enable_write(enable_mask, gpe_register_info);  		if (ACPI_FAILURE(status)) {  			return (status);  		}  |