aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/ec.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 3ef5b796a68..b340e08cf1d 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -286,7 +286,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
286 acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR); 286 acpi_enable_gpe(NULL, ec->gpe, ACPI_NOT_ISR);
287 } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) && 287 } else if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
288 t->irq_count > ACPI_EC_STORM_THRESHOLD) { 288 t->irq_count > ACPI_EC_STORM_THRESHOLD) {
289 pr_debug(PREFIX "GPE storm detected\n"); 289 pr_info(PREFIX "GPE storm detected, "
290 "transactions will use polling mode\n");
290 set_bit(EC_FLAGS_GPE_STORM, &ec->flags); 291 set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
291 } 292 }
292 return ret; 293 return ret;
@@ -566,9 +567,15 @@ static u32 acpi_ec_gpe_handler(void *data)
566 if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) && 567 if (!test_bit(EC_FLAGS_GPE_MODE, &ec->flags) &&
567 !test_bit(EC_FLAGS_NO_GPE, &ec->flags)) { 568 !test_bit(EC_FLAGS_NO_GPE, &ec->flags)) {
568 /* this is non-query, must be confirmation */ 569 /* this is non-query, must be confirmation */
569 if (printk_ratelimit()) 570 if (!test_bit(EC_FLAGS_GPE_STORM, &ec->flags)) {
570 pr_info(PREFIX "non-query interrupt received," 571 if (printk_ratelimit())
572 pr_info(PREFIX "non-query interrupt received,"
573 " switching to interrupt mode\n");
574 } else {
575 /* hush, STORM switches the mode every transaction */
576 pr_debug(PREFIX "non-query interrupt received,"
571 " switching to interrupt mode\n"); 577 " switching to interrupt mode\n");
578 }
572 set_bit(EC_FLAGS_GPE_MODE, &ec->flags); 579 set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
573 } 580 }
574 return ACPI_INTERRUPT_HANDLED; 581 return ACPI_INTERRUPT_HANDLED;