diff options
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r-- | drivers/acpi/ec.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index e61d4f8e62a5..5f2027d782e8 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c | |||
@@ -79,7 +79,7 @@ enum { | |||
79 | EC_FLAGS_GPE_STORM, /* GPE storm detected */ | 79 | EC_FLAGS_GPE_STORM, /* GPE storm detected */ |
80 | EC_FLAGS_HANDLERS_INSTALLED, /* Handlers for GPE and | 80 | EC_FLAGS_HANDLERS_INSTALLED, /* Handlers for GPE and |
81 | * OpReg are installed */ | 81 | * OpReg are installed */ |
82 | EC_FLAGS_FROZEN, /* Transactions are suspended */ | 82 | EC_FLAGS_BLOCKED, /* Transactions are blocked */ |
83 | }; | 83 | }; |
84 | 84 | ||
85 | /* If we find an EC via the ECDT, we need to keep a ptr to its context */ | 85 | /* If we find an EC via the ECDT, we need to keep a ptr to its context */ |
@@ -293,7 +293,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) | |||
293 | if (t->rdata) | 293 | if (t->rdata) |
294 | memset(t->rdata, 0, t->rlen); | 294 | memset(t->rdata, 0, t->rlen); |
295 | mutex_lock(&ec->lock); | 295 | mutex_lock(&ec->lock); |
296 | if (test_bit(EC_FLAGS_FROZEN, &ec->flags)) { | 296 | if (test_bit(EC_FLAGS_BLOCKED, &ec->flags)) { |
297 | status = -EINVAL; | 297 | status = -EINVAL; |
298 | goto unlock; | 298 | goto unlock; |
299 | } | 299 | } |
@@ -459,7 +459,7 @@ int ec_transaction(u8 command, | |||
459 | 459 | ||
460 | EXPORT_SYMBOL(ec_transaction); | 460 | EXPORT_SYMBOL(ec_transaction); |
461 | 461 | ||
462 | void acpi_ec_suspend_transactions(void) | 462 | void acpi_ec_block_transactions(void) |
463 | { | 463 | { |
464 | struct acpi_ec *ec = first_ec; | 464 | struct acpi_ec *ec = first_ec; |
465 | 465 | ||
@@ -468,11 +468,11 @@ void acpi_ec_suspend_transactions(void) | |||
468 | 468 | ||
469 | mutex_lock(&ec->lock); | 469 | mutex_lock(&ec->lock); |
470 | /* Prevent transactions from being carried out */ | 470 | /* Prevent transactions from being carried out */ |
471 | set_bit(EC_FLAGS_FROZEN, &ec->flags); | 471 | set_bit(EC_FLAGS_BLOCKED, &ec->flags); |
472 | mutex_unlock(&ec->lock); | 472 | mutex_unlock(&ec->lock); |
473 | } | 473 | } |
474 | 474 | ||
475 | void acpi_ec_resume_transactions(void) | 475 | void acpi_ec_unblock_transactions(void) |
476 | { | 476 | { |
477 | struct acpi_ec *ec = first_ec; | 477 | struct acpi_ec *ec = first_ec; |
478 | 478 | ||
@@ -481,10 +481,20 @@ void acpi_ec_resume_transactions(void) | |||
481 | 481 | ||
482 | mutex_lock(&ec->lock); | 482 | mutex_lock(&ec->lock); |
483 | /* Allow transactions to be carried out again */ | 483 | /* Allow transactions to be carried out again */ |
484 | clear_bit(EC_FLAGS_FROZEN, &ec->flags); | 484 | clear_bit(EC_FLAGS_BLOCKED, &ec->flags); |
485 | mutex_unlock(&ec->lock); | 485 | mutex_unlock(&ec->lock); |
486 | } | 486 | } |
487 | 487 | ||
488 | void acpi_ec_unblock_transactions_early(void) | ||
489 | { | ||
490 | /* | ||
491 | * Allow transactions to happen again (this function is called from | ||
492 | * atomic context during wakeup, so we don't need to acquire the mutex). | ||
493 | */ | ||
494 | if (first_ec) | ||
495 | clear_bit(EC_FLAGS_BLOCKED, &first_ec->flags); | ||
496 | } | ||
497 | |||
488 | static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 * data) | 498 | static int acpi_ec_query_unlocked(struct acpi_ec *ec, u8 * data) |
489 | { | 499 | { |
490 | int result; | 500 | int result; |