Commit b6c57b70 authored by Armin Wolf's avatar Armin Wolf Committed by Hans de Goede

platform/x86: dell-laptop: Do not fail when encountering unsupported batteries

If the battery hook encounters a unsupported battery, it will
return an error. This in turn will cause the battery driver to
automatically unregister the battery hook.

On machines with multiple batteries however, this will prevent
the battery hook from handling the primary battery, since it will
always get unregistered upon encountering one of the unsupported
batteries.

Fix this by simply ignoring unsupported batteries.
Reviewed-by: default avatarPali Rohár <pali@kernel.org>
Fixes: ab58016c ("platform/x86:dell-laptop: Add knobs to change battery charge settings")
Signed-off-by: default avatarArmin Wolf <W_Armin@gmx.de>
Link: https://lore.kernel.org/r/20241001212835.341788-4-W_Armin@gmx.deReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent ed0e64d8
...@@ -2391,12 +2391,18 @@ static struct attribute *dell_battery_attrs[] = { ...@@ -2391,12 +2391,18 @@ static struct attribute *dell_battery_attrs[] = {
}; };
ATTRIBUTE_GROUPS(dell_battery); ATTRIBUTE_GROUPS(dell_battery);
static bool dell_battery_supported(struct power_supply *battery)
{
/* We currently only support the primary battery */
return strcmp(battery->desc->name, "BAT0") == 0;
}
static int dell_battery_add(struct power_supply *battery, static int dell_battery_add(struct power_supply *battery,
struct acpi_battery_hook *hook) struct acpi_battery_hook *hook)
{ {
/* this currently only supports the primary battery */ /* Return 0 instead of an error to avoid being unloaded */
if (strcmp(battery->desc->name, "BAT0") != 0) if (!dell_battery_supported(battery))
return -ENODEV; return 0;
return device_add_groups(&battery->dev, dell_battery_groups); return device_add_groups(&battery->dev, dell_battery_groups);
} }
...@@ -2404,6 +2410,9 @@ static int dell_battery_add(struct power_supply *battery, ...@@ -2404,6 +2410,9 @@ static int dell_battery_add(struct power_supply *battery,
static int dell_battery_remove(struct power_supply *battery, static int dell_battery_remove(struct power_supply *battery,
struct acpi_battery_hook *hook) struct acpi_battery_hook *hook)
{ {
if (!dell_battery_supported(battery))
return 0;
device_remove_groups(&battery->dev, dell_battery_groups); device_remove_groups(&battery->dev, dell_battery_groups);
return 0; return 0;
} }
......
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