Re: [PATCH] ACPI / battery: Do not export energy_full[_design] on devices without full_charge_capacity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday, August 7, 2018 9:36:30 AM CEST Hans de Goede wrote:
> On some devices (with a buggy _BIX implementation) full_charge_capacity
> always reports as 0. This means that our energy_full sysfs attribute will
> also always be 0, which is not useful to export.
> 
> Worse we calculate our reported capacity on full_charge_capacity and if it
> is 0 we always report 0. This causes userspace to immediately shutdown or
> hibernate the laptop since it assumes that the battery is critically low.
> 
> This commit makes us not report energy_full[_design] or capacity on such
> broken devices, avoiding the immediate shutdown / hibernate from userspace.
> 
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=83941
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> ---
>  drivers/acpi/battery.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
> index d79ad844c78f..917b6741a39c 100644
> --- a/drivers/acpi/battery.c
> +++ b/drivers/acpi/battery.c
> @@ -364,6 +364,20 @@ static enum power_supply_property energy_battery_props[] = {
>  	POWER_SUPPLY_PROP_SERIAL_NUMBER,
>  };
>  
> +static enum power_supply_property energy_battery_full_cap_broken_props[] = {
> +	POWER_SUPPLY_PROP_STATUS,
> +	POWER_SUPPLY_PROP_PRESENT,
> +	POWER_SUPPLY_PROP_TECHNOLOGY,
> +	POWER_SUPPLY_PROP_CYCLE_COUNT,
> +	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
> +	POWER_SUPPLY_PROP_VOLTAGE_NOW,
> +	POWER_SUPPLY_PROP_POWER_NOW,
> +	POWER_SUPPLY_PROP_ENERGY_NOW,
> +	POWER_SUPPLY_PROP_MODEL_NAME,
> +	POWER_SUPPLY_PROP_MANUFACTURER,
> +	POWER_SUPPLY_PROP_SERIAL_NUMBER,
> +};
> +
>  /* --------------------------------------------------------------------------
>                                 Battery Management
>     -------------------------------------------------------------------------- */
> @@ -799,6 +813,11 @@ static int sysfs_add_battery(struct acpi_battery *battery)
>  		battery->bat_desc.properties = charge_battery_props;
>  		battery->bat_desc.num_properties =
>  			ARRAY_SIZE(charge_battery_props);
> +	} else if (battery->full_charge_capacity == 0) {
> +		battery->bat_desc.properties =
> +			energy_battery_full_cap_broken_props;
> +		battery->bat_desc.num_properties =
> +			ARRAY_SIZE(energy_battery_full_cap_broken_props);
>  	} else {
>  		battery->bat_desc.properties = energy_battery_props;
>  		battery->bat_desc.num_properties =
> 

Applied, thanks!





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux