aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2015-06-11 01:21:23 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-06-15 08:35:58 -0400
commitf8b8eb71533338654f39211a87efeca35055566b (patch)
treeaea22cd59255de99ac61e977649681e556e4fb17
parent3174abcfea6a05aa25038156d6722b6c8876fb36 (diff)
ACPI / EC: Cleanup transaction state transition.
This patch collects transaction state transition code into one function. We then could have a single function to maintain transaction transition related behaviors. No functional changes. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Tested-by: Gabriele Mazzotta <gabriele.mzt@gmail.com> Tested-by: Tigran Gabrielyan <tigrangab@gmail.com> Tested-by: Adrien D <ghbdtn@openmailbox.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/acpi/ec.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 149b5e7ee5c7..0ce8b6e8c3e8 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -391,7 +391,7 @@ static void acpi_ec_submit_query(struct acpi_ec *ec)
391 391
392static void acpi_ec_complete_query(struct acpi_ec *ec) 392static void acpi_ec_complete_query(struct acpi_ec *ec)
393{ 393{
394 if (ec->curr->command == ACPI_EC_COMMAND_QUERY) { 394 if (test_bit(EC_FLAGS_QUERY_PENDING, &ec->flags)) {
395 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); 395 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
396 ec_dbg_req("Event stopped"); 396 ec_dbg_req("Event stopped");
397 } 397 }
@@ -421,6 +421,15 @@ static int ec_transaction_completed(struct acpi_ec *ec)
421 return ret; 421 return ret;
422} 422}
423 423
424static inline void ec_transaction_transition(struct acpi_ec *ec, unsigned long flag)
425{
426 ec->curr->flags |= flag;
427 if (ec->curr->command == ACPI_EC_COMMAND_QUERY) {
428 if (flag == ACPI_EC_COMMAND_POLL)
429 acpi_ec_complete_query(ec);
430 }
431}
432
424static void advance_transaction(struct acpi_ec *ec) 433static void advance_transaction(struct acpi_ec *ec)
425{ 434{
426 struct transaction *t; 435 struct transaction *t;
@@ -449,7 +458,7 @@ static void advance_transaction(struct acpi_ec *ec)
449 if ((status & ACPI_EC_FLAG_OBF) == 1) { 458 if ((status & ACPI_EC_FLAG_OBF) == 1) {
450 t->rdata[t->ri++] = acpi_ec_read_data(ec); 459 t->rdata[t->ri++] = acpi_ec_read_data(ec);
451 if (t->rlen == t->ri) { 460 if (t->rlen == t->ri) {
452 t->flags |= ACPI_EC_COMMAND_COMPLETE; 461 ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
453 if (t->command == ACPI_EC_COMMAND_QUERY) 462 if (t->command == ACPI_EC_COMMAND_QUERY)
454 ec_dbg_req("Command(%s) hardware completion", 463 ec_dbg_req("Command(%s) hardware completion",
455 acpi_ec_cmd_string(t->command)); 464 acpi_ec_cmd_string(t->command));
@@ -459,7 +468,7 @@ static void advance_transaction(struct acpi_ec *ec)
459 goto err; 468 goto err;
460 } else if (t->wlen == t->wi && 469 } else if (t->wlen == t->wi &&
461 (status & ACPI_EC_FLAG_IBF) == 0) { 470 (status & ACPI_EC_FLAG_IBF) == 0) {
462 t->flags |= ACPI_EC_COMMAND_COMPLETE; 471 ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
463 wakeup = true; 472 wakeup = true;
464 } 473 }
465 goto out; 474 goto out;
@@ -467,17 +476,15 @@ static void advance_transaction(struct acpi_ec *ec)
467 if (EC_FLAGS_QUERY_HANDSHAKE && 476 if (EC_FLAGS_QUERY_HANDSHAKE &&
468 !(status & ACPI_EC_FLAG_SCI) && 477 !(status & ACPI_EC_FLAG_SCI) &&
469 (t->command == ACPI_EC_COMMAND_QUERY)) { 478 (t->command == ACPI_EC_COMMAND_QUERY)) {
470 t->flags |= ACPI_EC_COMMAND_POLL; 479 ec_transaction_transition(ec, ACPI_EC_COMMAND_POLL);
471 acpi_ec_complete_query(ec);
472 t->rdata[t->ri++] = 0x00; 480 t->rdata[t->ri++] = 0x00;
473 t->flags |= ACPI_EC_COMMAND_COMPLETE; 481 ec_transaction_transition(ec, ACPI_EC_COMMAND_COMPLETE);
474 ec_dbg_req("Command(%s) software completion", 482 ec_dbg_req("Command(%s) software completion",
475 acpi_ec_cmd_string(t->command)); 483 acpi_ec_cmd_string(t->command));
476 wakeup = true; 484 wakeup = true;
477 } else if ((status & ACPI_EC_FLAG_IBF) == 0) { 485 } else if ((status & ACPI_EC_FLAG_IBF) == 0) {
478 acpi_ec_write_cmd(ec, t->command); 486 acpi_ec_write_cmd(ec, t->command);
479 t->flags |= ACPI_EC_COMMAND_POLL; 487 ec_transaction_transition(ec, ACPI_EC_COMMAND_POLL);
480 acpi_ec_complete_query(ec);
481 } else 488 } else
482 goto err; 489 goto err;
483 goto out; 490 goto out;