diff options
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r-- | drivers/acpi/ec.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 9cc38857c33b..d6471bb6852f 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -259,7 +259,6 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, | |||
259 | clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); | 259 | clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); |
260 | spin_unlock_irqrestore(&ec->curr_lock, tmp); | 260 | spin_unlock_irqrestore(&ec->curr_lock, tmp); |
261 | ret = ec_poll(ec); | 261 | ret = ec_poll(ec); |
262 | pr_debug(PREFIX "transaction end\n"); | ||
263 | spin_lock_irqsave(&ec->curr_lock, tmp); | 262 | spin_lock_irqsave(&ec->curr_lock, tmp); |
264 | ec->curr = NULL; | 263 | ec->curr = NULL; |
265 | spin_unlock_irqrestore(&ec->curr_lock, tmp); | 264 | spin_unlock_irqrestore(&ec->curr_lock, tmp); |
@@ -316,6 +315,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) | |||
316 | /* check if we received SCI during transaction */ | 315 | /* check if we received SCI during transaction */ |
317 | ec_check_sci_sync(ec, acpi_ec_read_status(ec)); | 316 | ec_check_sci_sync(ec, acpi_ec_read_status(ec)); |
318 | if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { | 317 | if (test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) { |
318 | msleep(1); | ||
319 | /* it is safe to enable GPE outside of transaction */ | 319 | /* it is safe to enable GPE outside of transaction */ |
320 | acpi_enable_gpe(NULL, ec->gpe); | 320 | acpi_enable_gpe(NULL, ec->gpe); |
321 | } else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) { | 321 | } else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) { |
@@ -323,6 +323,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) | |||
323 | "transactions will use polling mode\n"); | 323 | "transactions will use polling mode\n"); |
324 | set_bit(EC_FLAGS_GPE_STORM, &ec->flags); | 324 | set_bit(EC_FLAGS_GPE_STORM, &ec->flags); |
325 | } | 325 | } |
326 | pr_debug(PREFIX "transaction end\n"); | ||
326 | end: | 327 | end: |
327 | if (ec->global_lock) | 328 | if (ec->global_lock) |
328 | acpi_release_global_lock(glk); | 329 | acpi_release_global_lock(glk); |
@@ -535,7 +536,8 @@ static int acpi_ec_sync_query(struct acpi_ec *ec) | |||
535 | return -ENOMEM; | 536 | return -ENOMEM; |
536 | memcpy(copy, handler, sizeof(*copy)); | 537 | memcpy(copy, handler, sizeof(*copy)); |
537 | pr_debug(PREFIX "push query execution (0x%2x) on queue\n", value); | 538 | pr_debug(PREFIX "push query execution (0x%2x) on queue\n", value); |
538 | return acpi_os_execute(OSL_GPE_HANDLER, | 539 | return acpi_os_execute((copy->func) ? |
540 | OSL_NOTIFY_HANDLER : OSL_GPE_HANDLER, | ||
539 | acpi_ec_run, copy); | 541 | acpi_ec_run, copy); |
540 | } | 542 | } |
541 | } | 543 | } |