* [PATCH RESEND] ACPI battery: support percentage battery remaining capacity
@ 2010-10-22 2:02 Zhang Rui
2010-10-22 2:05 ` Zhang Rui
0 siblings, 1 reply; 3+ messages in thread
From: Zhang Rui @ 2010-10-22 2:02 UTC (permalink / raw)
To: Brown, Len; +Cc: linux-acpi@vger.kernel.org, Zhang, Rui
According to the ACPI spec, some kinds of primary battery can
report percentage battery remaining capacity directly to OS.
In this case, it reports the LastFullChargedCapacity == 100,
BatteryPresentRate = 0xFFFFFFFF, and BatteryRemaingCapacity a
percentage value, which actually means RemainingBatteryPercentage.
Now we found some battery follows this rule even if it's a rechargeable.
https://bugzilla.kernel.org/show_bug.cgi?id=15979
Handle these batteries correctly in ACPI battery driver
so that they won't break userspace.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
---
drivers/acpi/battery.c | 38 +++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
Index: linux-2.6/drivers/acpi/battery.c
===================================================================
--- linux-2.6.orig/drivers/acpi/battery.c
+++ linux-2.6/drivers/acpi/battery.c
@@ -95,6 +95,7 @@ enum {
* due to bad math.
*/
ACPI_BATTERY_QUIRK_SIGNED16_CURRENT,
+ ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
};
struct acpi_battery {
@@ -405,6 +406,8 @@ static int acpi_battery_get_info(struct
result = extract_package(battery, buffer.pointer,
info_offsets, ARRAY_SIZE(info_offsets));
kfree(buffer.pointer);
+ if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
+ battery->full_charge_capacity = battery->design_capacity;
return result;
}
@@ -441,6 +444,10 @@ static int acpi_battery_get_state(struct
battery->rate_now != -1)
battery->rate_now = abs((s16)battery->rate_now);
+ if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
+ && battery->capacity_now >= 0 && battery->capacity_now <= 100)
+ battery->capacity_now = (battery->capacity_now *
+ battery->full_charge_capacity) / 100;
return result;
}
@@ -552,6 +559,33 @@ static void acpi_battery_quirks(struct a
}
}
+/*
+ * According to the ACPI spec, some kinds of primary batteries can
+ * report percentage battery remaining capacity directly to OS.
+ * In this case, it reports the Last Full Charged Capacity == 100
+ * and BatteryPresentRate == 0xFFFFFFFF.
+ *
+ * Now we found some battery reports percentage remaining capacity
+ * even if it's rechargeable.
+ * https://bugzilla.kernel.org/show_bug.cgi?id=15979
+ *
+ * Handle this correctly so that they won't break userspace.
+ */
+static void acpi_battery_quirks2(struct acpi_battery *battery)
+{
+ if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
+ return ;
+
+ if (battery->full_charge_capacity == 100 &&
+ battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN &&
+ battery->capacity_now >=0 && battery->capacity_now <= 100) {
+ set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags);
+ battery->full_charge_capacity = battery->design_capacity;
+ battery->capacity_now = (battery->capacity_now *
+ battery->full_charge_capacity) / 100;
+ }
+}
+
static int acpi_battery_update(struct acpi_battery *battery)
{
int result, old_present = acpi_battery_present(battery);
@@ -573,7 +607,9 @@ static int acpi_battery_update(struct ac
}
if (!battery->bat.dev)
sysfs_add_battery(battery);
- return acpi_battery_get_state(battery);
+ result = acpi_battery_get_state(battery);
+ acpi_battery_quirks2(battery);
+ return result;
}
/* --------------------------------------------------------------------------
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RESEND] ACPI battery: support percentage battery remaining capacity
2010-10-22 2:02 [PATCH RESEND] ACPI battery: support percentage battery remaining capacity Zhang Rui
@ 2010-10-22 2:05 ` Zhang Rui
2010-10-22 5:28 ` Len Brown
0 siblings, 1 reply; 3+ messages in thread
From: Zhang Rui @ 2010-10-22 2:05 UTC (permalink / raw)
To: Brown, Len; +Cc: linux-acpi@vger.kernel.org, sitsofe
On Fri, 2010-10-22 at 10:02 +0800, Zhang Rui wrote:
> According to the ACPI spec, some kinds of primary battery can
> report percentage battery remaining capacity directly to OS.
>
> In this case, it reports the LastFullChargedCapacity == 100,
> BatteryPresentRate = 0xFFFFFFFF, and BatteryRemaingCapacity a
> percentage value, which actually means RemainingBatteryPercentage.
>
> Now we found some battery follows this rule even if it's a rechargeable.
> https://bugzilla.kernel.org/show_bug.cgi?id=15979
>
> Handle these batteries correctly in ACPI battery driver
> so that they won't break userspace.
>
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
> ---
> drivers/acpi/battery.c | 38 +++++++++++++++++++++++++++++++++++++-
> 1 file changed, 37 insertions(+), 1 deletion(-)
>
> Index: linux-2.6/drivers/acpi/battery.c
> ===================================================================
> --- linux-2.6.orig/drivers/acpi/battery.c
> +++ linux-2.6/drivers/acpi/battery.c
> @@ -95,6 +95,7 @@ enum {
> * due to bad math.
> */
> ACPI_BATTERY_QUIRK_SIGNED16_CURRENT,
> + ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
> };
>
> struct acpi_battery {
> @@ -405,6 +406,8 @@ static int acpi_battery_get_info(struct
> result = extract_package(battery, buffer.pointer,
> info_offsets, ARRAY_SIZE(info_offsets));
> kfree(buffer.pointer);
> + if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
> + battery->full_charge_capacity = battery->design_capacity;
> return result;
> }
>
> @@ -441,6 +444,10 @@ static int acpi_battery_get_state(struct
> battery->rate_now != -1)
> battery->rate_now = abs((s16)battery->rate_now);
>
> + if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
> + && battery->capacity_now >= 0 && battery->capacity_now <= 100)
> + battery->capacity_now = (battery->capacity_now *
> + battery->full_charge_capacity) / 100;
> return result;
> }
>
> @@ -552,6 +559,33 @@ static void acpi_battery_quirks(struct a
> }
> }
>
> +/*
> + * According to the ACPI spec, some kinds of primary batteries can
> + * report percentage battery remaining capacity directly to OS.
> + * In this case, it reports the Last Full Charged Capacity == 100
> + * and BatteryPresentRate == 0xFFFFFFFF.
> + *
> + * Now we found some battery reports percentage remaining capacity
> + * even if it's rechargeable.
> + * https://bugzilla.kernel.org/show_bug.cgi?id=15979
> + *
> + * Handle this correctly so that they won't break userspace.
> + */
> +static void acpi_battery_quirks2(struct acpi_battery *battery)
> +{
> + if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
> + return ;
> +
> + if (battery->full_charge_capacity == 100 &&
> + battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN &&
> + battery->capacity_now >=0 && battery->capacity_now <= 100) {
> + set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags);
> + battery->full_charge_capacity = battery->design_capacity;
> + battery->capacity_now = (battery->capacity_now *
> + battery->full_charge_capacity) / 100;
> + }
> +}
> +
> static int acpi_battery_update(struct acpi_battery *battery)
> {
> int result, old_present = acpi_battery_present(battery);
> @@ -573,7 +607,9 @@ static int acpi_battery_update(struct ac
> }
> if (!battery->bat.dev)
> sysfs_add_battery(battery);
> - return acpi_battery_get_state(battery);
> + result = acpi_battery_get_state(battery);
> + acpi_battery_quirks2(battery);
> + return result;
> }
>
> /* --------------------------------------------------------------------------
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RESEND] ACPI battery: support percentage battery remaining capacity
2010-10-22 2:05 ` Zhang Rui
@ 2010-10-22 5:28 ` Len Brown
0 siblings, 0 replies; 3+ messages in thread
From: Len Brown @ 2010-10-22 5:28 UTC (permalink / raw)
To: Zhang Rui; +Cc: linux-acpi@vger.kernel.org, sitsofe
applied
thanks,
Len Brown, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-10-22 5:28 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-22 2:02 [PATCH RESEND] ACPI battery: support percentage battery remaining capacity Zhang Rui
2010-10-22 2:05 ` Zhang Rui
2010-10-22 5:28 ` Len Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox