• Hans de Goede's avatar
    ACPI / battery: Deal better with neither design nor full capacity not being reported · ff3154d1
    Hans de Goede authored
    Commit b41901a2 ("ACPI / battery: Do not export energy_full[_design] on
    devices without full_charge_capacity") added support for some (broken)
    devices which always report 0 for both design_capacity and
    full_charge_capacity.
    
    Since the device that commit was written as a fix for is not reporting any
    form of "full" capacity we cannot calculate the value for the
    POWER_SUPPLY_PROP_CAPACITY, this is worked around by using an alternative
    array of available properties which does not contain this property.
    
    This is necessary because userspace (upower) treats us returning -ENODEV
    as 0 and then typically will trigger an emergency shutdown because of that.
    Userspace does not do this if the capacity sysfs attribute is not present
    at all.
    
    There are two potential problems with that commit:
     1) It assumes that both full_charge- and design-capacity are broken at the
        same time and only checks if full_charge- is broken.
     2) It assumes that this only ever happens for devices which report energy
        units rather then charge units.
    
    This commit fixes both issues by only using the alternative
    array of available properties if both full_charge- and design-capacity are
    broken and by also adding an alternative array of available properties for
    devices using mA units.
    
    Fixes: b41901a2 ("ACPI / battery: Do not export energy_full[_design] on devices without full_charge_capacity")
    Cc: 4.19+ <stable@vger.kernel.org> # 4.19+
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    ff3154d1
battery.c 45.4 KB