mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-18 02:46:06 +00:00
ACPI / battery: Add quirk for Asus GL502VSK and UX305LA
On Asus GL502VSK and UX305LA, ACPI incorrectly reports discharging when battery is full and AC is plugged. However rate_now is correct under this circumstance, hence we can use "rate_now == 0" as a predicate to report battery full status correctly. Link: https://bugs.launchpad.net/bugs/1482390 Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
6993ce46c9
commit
c68f0676ef
@ -70,6 +70,7 @@ static async_cookie_t async_cookie;
|
|||||||
static bool battery_driver_registered;
|
static bool battery_driver_registered;
|
||||||
static int battery_bix_broken_package;
|
static int battery_bix_broken_package;
|
||||||
static int battery_notification_delay_ms;
|
static int battery_notification_delay_ms;
|
||||||
|
static int battery_full_discharging;
|
||||||
static unsigned int cache_time = 1000;
|
static unsigned int cache_time = 1000;
|
||||||
module_param(cache_time, uint, 0644);
|
module_param(cache_time, uint, 0644);
|
||||||
MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
|
MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
|
||||||
@ -214,9 +215,12 @@ static int acpi_battery_get_property(struct power_supply *psy,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
switch (psp) {
|
switch (psp) {
|
||||||
case POWER_SUPPLY_PROP_STATUS:
|
case POWER_SUPPLY_PROP_STATUS:
|
||||||
if (battery->state & ACPI_BATTERY_STATE_DISCHARGING)
|
if (battery->state & ACPI_BATTERY_STATE_DISCHARGING) {
|
||||||
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
|
if (battery_full_discharging && battery->rate_now == 0)
|
||||||
else if (battery->state & ACPI_BATTERY_STATE_CHARGING)
|
val->intval = POWER_SUPPLY_STATUS_FULL;
|
||||||
|
else
|
||||||
|
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
|
||||||
|
} else if (battery->state & ACPI_BATTERY_STATE_CHARGING)
|
||||||
val->intval = POWER_SUPPLY_STATUS_CHARGING;
|
val->intval = POWER_SUPPLY_STATUS_CHARGING;
|
||||||
else if (acpi_battery_is_charged(battery))
|
else if (acpi_battery_is_charged(battery))
|
||||||
val->intval = POWER_SUPPLY_STATUS_FULL;
|
val->intval = POWER_SUPPLY_STATUS_FULL;
|
||||||
@ -1166,6 +1170,12 @@ battery_notification_delay_quirk(const struct dmi_system_id *d)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __init battery_full_discharging_quirk(const struct dmi_system_id *d)
|
||||||
|
{
|
||||||
|
battery_full_discharging = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
||||||
{
|
{
|
||||||
.callback = battery_bix_broken_package_quirk,
|
.callback = battery_bix_broken_package_quirk,
|
||||||
@ -1183,6 +1193,22 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = battery_full_discharging_quirk,
|
||||||
|
.ident = "ASUS GL502VSK",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "GL502VSK"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = battery_full_discharging_quirk,
|
||||||
|
.ident = "ASUS UX305LA",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "UX305LA"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user