diff options
| -rw-r--r-- | drivers/acpi/ec.c | 21 | 
1 files changed, 12 insertions, 9 deletions
| diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index d7d32c28829b..ad11ba4a412d 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -206,13 +206,13 @@ unlock:  	spin_unlock_irqrestore(&ec->lock, flags);  } -static int acpi_ec_sync_query(struct acpi_ec *ec); +static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data);  static int ec_check_sci_sync(struct acpi_ec *ec, u8 state)  {  	if (state & ACPI_EC_FLAG_SCI) {  		if (!test_and_set_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) -			return acpi_ec_sync_query(ec); +			return acpi_ec_sync_query(ec, NULL);  	}  	return 0;  } @@ -443,10 +443,8 @@ acpi_handle ec_get_handle(void)  EXPORT_SYMBOL(ec_get_handle); -static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 *data); -  /* - * Clears stale _Q events that might have accumulated in the EC. + * Process _Q events that might have accumulated in the EC.   * Run with locked ec mutex.   */  static void acpi_ec_clear(struct acpi_ec *ec) @@ -455,7 +453,7 @@ static void acpi_ec_clear(struct acpi_ec *ec)  	u8 value = 0;  	for (i = 0; i < ACPI_EC_CLEAR_MAX; i++) { -		status = acpi_ec_query_unlocked(ec, &value); +		status = acpi_ec_sync_query(ec, &value);  		if (status || !value)  			break;  	} @@ -582,13 +580,18 @@ static void acpi_ec_run(void *cxt)  	kfree(handler);  } -static int acpi_ec_sync_query(struct acpi_ec *ec) +static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data)  {  	u8 value = 0;  	int status;  	struct acpi_ec_query_handler *handler, *copy; -	if ((status = acpi_ec_query_unlocked(ec, &value))) + +	status = acpi_ec_query_unlocked(ec, &value); +	if (data) +		*data = value; +	if (status)  		return status; +  	list_for_each_entry(handler, &ec->list, node) {  		if (value == handler->query_bit) {  			/* have custom handler for this bit */ @@ -612,7 +615,7 @@ static void acpi_ec_gpe_query(void *ec_cxt)  	if (!ec)  		return;  	mutex_lock(&ec->mutex); -	acpi_ec_sync_query(ec); +	acpi_ec_sync_query(ec, NULL);  	mutex_unlock(&ec->mutex);  } | 
