Loading drivers/acpi/ec.c +31 −16 Original line number Diff line number Diff line Loading @@ -696,14 +696,6 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) return AE_CTRL_TERMINATE; } static void ec_remove_handlers(struct acpi_ec *ec) { acpi_remove_address_space_handler(ec->handle, ACPI_ADR_SPACE_EC, &acpi_ec_space_handler); acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler); } static int acpi_ec_add(struct acpi_device *device) { struct acpi_ec *ec = NULL; Loading @@ -727,13 +719,16 @@ static int acpi_ec_add(struct acpi_device *device) /* Check if we found the boot EC */ if (boot_ec) { if (boot_ec->gpe == ec->gpe) { ec_remove_handlers(boot_ec); mutex_destroy(&boot_ec->lock); kfree(boot_ec); first_ec = boot_ec = NULL; } /* We might have incorrect info for GL at boot time */ mutex_lock(&boot_ec->lock); boot_ec->global_lock = ec->global_lock; /* Copy handlers from new ec into boot ec */ list_splice(&ec->list, &boot_ec->list); mutex_unlock(&boot_ec->lock); kfree(ec); ec = boot_ec; } if (!first_ec) } else first_ec = ec; ec->handle = device->handle; acpi_driver_data(device) = ec; Loading Loading @@ -762,6 +757,9 @@ static int acpi_ec_remove(struct acpi_device *device, int type) if (ec == first_ec) first_ec = NULL; /* Don't touch boot EC */ if (boot_ec != ec) kfree(ec); return 0; } Loading Loading @@ -825,6 +823,8 @@ static int acpi_ec_start(struct acpi_device *device) if (!ec) return -EINVAL; /* Boot EC is already working */ if (ec != boot_ec) ret = ec_install_handlers(ec); /* EC is fully operational, allow queries */ Loading @@ -835,6 +835,7 @@ static int acpi_ec_start(struct acpi_device *device) static int acpi_ec_stop(struct acpi_device *device, int type) { acpi_status status; struct acpi_ec *ec; if (!device) Loading @@ -843,7 +844,21 @@ static int acpi_ec_stop(struct acpi_device *device, int type) ec = acpi_driver_data(device); if (!ec) return -EINVAL; ec_remove_handlers(ec); /* Don't touch boot EC */ if (ec == boot_ec) return 0; status = acpi_remove_address_space_handler(ec->handle, ACPI_ADR_SPACE_EC, &acpi_ec_space_handler); if (ACPI_FAILURE(status)) return -ENODEV; status = acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler); if (ACPI_FAILURE(status)) return -ENODEV; return 0; } Loading Loading
drivers/acpi/ec.c +31 −16 Original line number Diff line number Diff line Loading @@ -696,14 +696,6 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval) return AE_CTRL_TERMINATE; } static void ec_remove_handlers(struct acpi_ec *ec) { acpi_remove_address_space_handler(ec->handle, ACPI_ADR_SPACE_EC, &acpi_ec_space_handler); acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler); } static int acpi_ec_add(struct acpi_device *device) { struct acpi_ec *ec = NULL; Loading @@ -727,13 +719,16 @@ static int acpi_ec_add(struct acpi_device *device) /* Check if we found the boot EC */ if (boot_ec) { if (boot_ec->gpe == ec->gpe) { ec_remove_handlers(boot_ec); mutex_destroy(&boot_ec->lock); kfree(boot_ec); first_ec = boot_ec = NULL; } /* We might have incorrect info for GL at boot time */ mutex_lock(&boot_ec->lock); boot_ec->global_lock = ec->global_lock; /* Copy handlers from new ec into boot ec */ list_splice(&ec->list, &boot_ec->list); mutex_unlock(&boot_ec->lock); kfree(ec); ec = boot_ec; } if (!first_ec) } else first_ec = ec; ec->handle = device->handle; acpi_driver_data(device) = ec; Loading Loading @@ -762,6 +757,9 @@ static int acpi_ec_remove(struct acpi_device *device, int type) if (ec == first_ec) first_ec = NULL; /* Don't touch boot EC */ if (boot_ec != ec) kfree(ec); return 0; } Loading Loading @@ -825,6 +823,8 @@ static int acpi_ec_start(struct acpi_device *device) if (!ec) return -EINVAL; /* Boot EC is already working */ if (ec != boot_ec) ret = ec_install_handlers(ec); /* EC is fully operational, allow queries */ Loading @@ -835,6 +835,7 @@ static int acpi_ec_start(struct acpi_device *device) static int acpi_ec_stop(struct acpi_device *device, int type) { acpi_status status; struct acpi_ec *ec; if (!device) Loading @@ -843,7 +844,21 @@ static int acpi_ec_stop(struct acpi_device *device, int type) ec = acpi_driver_data(device); if (!ec) return -EINVAL; ec_remove_handlers(ec); /* Don't touch boot EC */ if (ec == boot_ec) return 0; status = acpi_remove_address_space_handler(ec->handle, ACPI_ADR_SPACE_EC, &acpi_ec_space_handler); if (ACPI_FAILURE(status)) return -ENODEV; status = acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler); if (ACPI_FAILURE(status)) return -ENODEV; return 0; } Loading