Skip to content

Commit

Permalink
ACPI / EC: Fix regression related to triggering source of EC event ha…
Browse files Browse the repository at this point in the history
…ndling

Originally the Samsung quirks removed by commit 4c23737 can be covered
by commit e923e8e and ec_freeze_events=Y mode. But commit 9c40f95
changed ec_freeze_events=Y back to N, making this problem re-surface.

Actually, if commit e923e8e is robust enough, we can freely change
ec_freeze_events mode, so this patch fixes the issue by improving
commit e923e8e.

Related commits listed in the merged order:

 Commit: e923e8e
 Subject: ACPI / EC: Fix an issue that SCI_EVT cannot be detected
          after event is enabled

 Commit: 4c23737
 Subject: ACPI / EC: Remove old CLEAR_ON_RESUME quirk

 Commit: 9c40f95
 Subject: Revert "ACPI / EC: Enable event freeze mode..." to fix
          a regression

This patch not only fixes the reported post-resume EC event triggering
source issue, but also fixes an unreported similar issue related to the
driver bind by adding EC event triggering source in ec_install_handlers().

Fixes: e923e8e (ACPI / EC: Fix an issue that SCI_EVT cannot be detected after event is enabled)
Fixes: 4c23737 (ACPI / EC: Remove old CLEAR_ON_RESUME quirk)
Fixes: 9c40f95 (Revert "ACPI / EC: Enable event freeze mode..." to fix a regression)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=196833
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Reported-by: Alistair Hamilton <ahpatent@gmail.com>
Tested-by: Alistair Hamilton <ahpatent@gmail.com>
Cc: 4.11+ <stable@vger.kernel.org> # 4.11+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Lv Zheng authored and Rafael J. Wysocki committed Nov 8, 2017
1 parent 39dae59 commit 53c5eaa
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions drivers/acpi/ec.c
Original file line number Diff line number Diff line change
Expand Up @@ -486,8 +486,11 @@ static inline void __acpi_ec_enable_event(struct acpi_ec *ec)
{
if (!test_and_set_bit(EC_FLAGS_QUERY_ENABLED, &ec->flags))
ec_log_drv("event unblocked");
if (!test_bit(EC_FLAGS_QUERY_PENDING, &ec->flags))
advance_transaction(ec);
/*
* Unconditionally invoke this once after enabling the event
* handling mechanism to detect the pending events.
*/
advance_transaction(ec);
}

static inline void __acpi_ec_disable_event(struct acpi_ec *ec)
Expand Down Expand Up @@ -1456,11 +1459,10 @@ static int ec_install_handlers(struct acpi_ec *ec, bool handle_events)
if (test_bit(EC_FLAGS_STARTED, &ec->flags) &&
ec->reference_count >= 1)
acpi_ec_enable_gpe(ec, true);

/* EC is fully operational, allow queries */
acpi_ec_enable_event(ec);
}
}
/* EC is fully operational, allow queries */
acpi_ec_enable_event(ec);

return 0;
}
Expand Down

0 comments on commit 53c5eaa

Please sign in to comment.