Currently, battery hooks are being unloaded if they return an error when adding a single battery. This however also causes the removal of successfully added hooks if they return -ENODEV for a single unsupported battery. Do not unload battery hooks in such cases since the hook handles any cleanup actions. Signed-off-by: Armin Wolf <W_Armin@xxxxxx> --- drivers/acpi/battery.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 306513fec1e1..e59c261c7c59 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c @@ -724,20 +724,10 @@ void battery_hook_register(struct acpi_battery_hook *hook) * its attributes. */ list_for_each_entry(battery, &acpi_battery_list, list) { - if (hook->add_battery(battery->bat)) { - /* - * If a add-battery returns non-zero, - * the registration of the extension has failed, - * and we will not add it to the list of loaded - * hooks. - */ - pr_err("extension failed to load: %s", hook->name); - __battery_hook_unregister(hook, 0); - goto end; - } + hook->add_battery(battery->bat); } pr_info("new extension: %s\n", hook->name); -end: + mutex_unlock(&hook_mutex); } EXPORT_SYMBOL_GPL(battery_hook_register); @@ -762,15 +752,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery) * during the battery module initialization. */ list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { - if (hook_node->add_battery(battery->bat)) { - /* - * The notification of the extensions has failed, to - * prevent further errors we will unload the extension. - */ - pr_err("error in extension, unloading: %s", - hook_node->name); - __battery_hook_unregister(hook_node, 0); - } + hook_node->add_battery(battery->bat); } mutex_unlock(&hook_mutex); } -- 2.30.2