aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/ec.c
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2015-01-14 06:28:22 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-01-23 16:06:48 -0500
commit0c78808f51d11564a29728091e87b80d6e54d499 (patch)
tree5bc383b183c16bae7c05e77ecd8bc02d2630fc88 /drivers/acpi/ec.c
parentec6f34e5b552fb0a52e6aae1a5afbbb1605cc6cc (diff)
ACPI / EC: Cleanup transaction wakeup code
This patch moves transaction wakeup code into advance_transaction(). No functional changes. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r--drivers/acpi/ec.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 1b5853f384e2..3e19123bb183 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -200,7 +200,7 @@ static int ec_transaction_completed(struct acpi_ec *ec)
200 return ret; 200 return ret;
201} 201}
202 202
203static bool advance_transaction(struct acpi_ec *ec) 203static void advance_transaction(struct acpi_ec *ec)
204{ 204{
205 struct transaction *t; 205 struct transaction *t;
206 u8 status; 206 u8 status;
@@ -235,7 +235,7 @@ static bool advance_transaction(struct acpi_ec *ec)
235 t->flags |= ACPI_EC_COMMAND_COMPLETE; 235 t->flags |= ACPI_EC_COMMAND_COMPLETE;
236 wakeup = true; 236 wakeup = true;
237 } 237 }
238 return wakeup; 238 goto out;
239 } else { 239 } else {
240 if (EC_FLAGS_QUERY_HANDSHAKE && 240 if (EC_FLAGS_QUERY_HANDSHAKE &&
241 !(status & ACPI_EC_FLAG_SCI) && 241 !(status & ACPI_EC_FLAG_SCI) &&
@@ -251,7 +251,7 @@ static bool advance_transaction(struct acpi_ec *ec)
251 t->flags |= ACPI_EC_COMMAND_POLL; 251 t->flags |= ACPI_EC_COMMAND_POLL;
252 } else 252 } else
253 goto err; 253 goto err;
254 return wakeup; 254 goto out;
255 } 255 }
256err: 256err:
257 /* 257 /*
@@ -262,14 +262,16 @@ err:
262 if (in_interrupt() && t) 262 if (in_interrupt() && t)
263 ++t->irq_count; 263 ++t->irq_count;
264 } 264 }
265 return wakeup; 265out:
266 if (wakeup && in_interrupt())
267 wake_up(&ec->wait);
266} 268}
267 269
268static void start_transaction(struct acpi_ec *ec) 270static void start_transaction(struct acpi_ec *ec)
269{ 271{
270 ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0; 272 ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0;
271 ec->curr->flags = 0; 273 ec->curr->flags = 0;
272 (void)advance_transaction(ec); 274 advance_transaction(ec);
273} 275}
274 276
275static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data); 277static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data);
@@ -304,7 +306,7 @@ static int ec_poll(struct acpi_ec *ec)
304 return 0; 306 return 0;
305 } 307 }
306 spin_lock_irqsave(&ec->lock, flags); 308 spin_lock_irqsave(&ec->lock, flags);
307 (void)advance_transaction(ec); 309 advance_transaction(ec);
308 spin_unlock_irqrestore(&ec->lock, flags); 310 spin_unlock_irqrestore(&ec->lock, flags);
309 } while (time_before(jiffies, delay)); 311 } while (time_before(jiffies, delay));
310 pr_debug("controller reset, restart transaction\n"); 312 pr_debug("controller reset, restart transaction\n");
@@ -688,8 +690,7 @@ static u32 acpi_ec_gpe_handler(acpi_handle gpe_device,
688 struct acpi_ec *ec = data; 690 struct acpi_ec *ec = data;
689 691
690 spin_lock_irqsave(&ec->lock, flags); 692 spin_lock_irqsave(&ec->lock, flags);
691 if (advance_transaction(ec)) 693 advance_transaction(ec);
692 wake_up(&ec->wait);
693 spin_unlock_irqrestore(&ec->lock, flags); 694 spin_unlock_irqrestore(&ec->lock, flags);
694 ec_check_sci(ec, acpi_ec_read_status(ec)); 695 ec_check_sci(ec, acpi_ec_read_status(ec));
695 return ACPI_INTERRUPT_HANDLED | ACPI_REENABLE_GPE; 696 return ACPI_INTERRUPT_HANDLED | ACPI_REENABLE_GPE;