tree d9d8f1c19eaa45ec419b76d5ec1bdad27a1451e6
parent a27ac38efd6dc6dccebfc9bcc475ab4aa5fc4a56
author Luming Yu <[EMAIL PROTECTED]> Sat, 23 Apr 2005 07:07:10 -0400
committer Len Brown <[EMAIL PROTECTED]> Tue, 12 Jul 2005 08:12:53 -0400

[ACPI] EC GPE-disabled issue
http://bugzilla.kernel.org/show_bug.cgi?id=3851

Signed-off-by: Luming Yu <[EMAIL PROTECTED]>
Signed-off-by: Len Brown <[EMAIL PROTECTED]>

 drivers/acpi/ec.c |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -282,7 +282,7 @@ end:
 
        if(atomic_read(&ec->leaving_burst) == 2){
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               while(!atomic_read(&ec->pending_gpe)){
+               while(atomic_read(&ec->pending_gpe)){
                        msleep(1);      
                }
                acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
@@ -365,7 +365,7 @@ end:
 
        if(atomic_read(&ec->leaving_burst) == 2){
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               while(!atomic_read(&ec->pending_gpe)){
+               while(atomic_read(&ec->pending_gpe)){
                        msleep(1);      
                }
                acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
@@ -431,7 +431,6 @@ acpi_ec_query (
 
        if (!ec || !data)
                return_VALUE(-EINVAL);
-retry:
        *data = 0;
 
        if (ec->global_lock) {
@@ -469,13 +468,9 @@ end:
 
        if(atomic_read(&ec->leaving_burst) == 2){
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               while(!atomic_read(&ec->pending_gpe)){
-                       msleep(1);      
-               }
                acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
-               goto retry;
+               status = -ENODATA;
        }
-
        return_VALUE(status);
 }
 
@@ -514,8 +509,8 @@ acpi_ec_gpe_query (
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluating %s\n", object_name));
 
        acpi_evaluate_object(ec->handle, object_name, NULL, NULL);
-       atomic_dec(&ec->pending_gpe);
 end:   
+       atomic_dec(&ec->pending_gpe);
        return;
 }
 
@@ -553,7 +548,7 @@ acpi_ec_gpe_handler (
                                !(value & ACPI_EC_FLAG_IBF))) {
                        ec->expect_event = 0;
                        wake_up(&ec->wait);
-                       
+                       return ACPI_INTERRUPT_HANDLED;
                }
        }
 
@@ -561,8 +556,10 @@ acpi_ec_gpe_handler (
                atomic_add(1, &ec->pending_gpe) ;
                status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
                                                acpi_ec_gpe_query, ec);
+               return status == AE_OK ?
+               ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
        } 
-
+       acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_ISR);
        return status == AE_OK ?
                ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
 }
@@ -688,6 +685,7 @@ acpi_ec_read_info (struct seq_file *seq,
                (u32) ec->status_addr.address, (u32) ec->data_addr.address);
        seq_printf(seq, "use global lock:         %s\n",
                ec->global_lock?"yes":"no");
+       acpi_enable_gpe(NULL, ec->gpe_bit, ACPI_NOT_ISR);
 
 end:
        return_VALUE(0);
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to