Commit a5072078 authored by Hans de Goede's avatar Hans de Goede Committed by Rafael J. Wysocki

ACPI: EC: Fix EC address space handler unregistration

When an ECDT table is present the EC address space handler gets registered
on the root node. So to unregister it properly the unregister call also
must be done on the root node.

Store the ACPI handle used for the acpi_install_address_space_handler()
call and use te same handle for the acpi_remove_address_space_handler()
call.
Reported-by: default avatarRafael J. Wysocki <rafael@kernel.org>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 0634033d
...@@ -1475,6 +1475,7 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device) ...@@ -1475,6 +1475,7 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device)
return -ENODEV; return -ENODEV;
} }
set_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags); set_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
ec->address_space_handler_holder = ec->handle;
} }
if (!device) if (!device)
...@@ -1526,7 +1527,8 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device) ...@@ -1526,7 +1527,8 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device)
static void ec_remove_handlers(struct acpi_ec *ec) static void ec_remove_handlers(struct acpi_ec *ec)
{ {
if (test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) { if (test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle, if (ACPI_FAILURE(acpi_remove_address_space_handler(
ec->address_space_handler_holder,
ACPI_ADR_SPACE_EC, &acpi_ec_space_handler))) ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
pr_err("failed to remove space handler\n"); pr_err("failed to remove space handler\n");
clear_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags); clear_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags);
......
...@@ -173,6 +173,7 @@ enum acpi_ec_event_state { ...@@ -173,6 +173,7 @@ enum acpi_ec_event_state {
struct acpi_ec { struct acpi_ec {
acpi_handle handle; acpi_handle handle;
acpi_handle address_space_handler_holder;
int gpe; int gpe;
int irq; int irq;
unsigned long command_addr; unsigned long command_addr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment