diff options
author | Lv Zheng <lv.zheng@intel.com> | 2015-01-14 06:28:22 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2015-01-23 16:06:48 -0500 |
commit | 0c78808f51d11564a29728091e87b80d6e54d499 (patch) | |
tree | 5bc383b183c16bae7c05e77ecd8bc02d2630fc88 /drivers/acpi/ec.c | |
parent | ec6f34e5b552fb0a52e6aae1a5afbbb1605cc6cc (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.c | 17 |
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 | ||
203 | static bool advance_transaction(struct acpi_ec *ec) | 203 | static 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 | } |
256 | err: | 256 | err: |
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; | 265 | out: |
266 | if (wakeup && in_interrupt()) | ||
267 | wake_up(&ec->wait); | ||
266 | } | 268 | } |
267 | 269 | ||
268 | static void start_transaction(struct acpi_ec *ec) | 270 | static 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 | ||
275 | static int acpi_ec_sync_query(struct acpi_ec *ec, u8 *data); | 277 | static 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; |