Skip to content

Commit 1b799c5

Browse files
jwrdegoederafaeljw
authored andcommitted
ACPI / battery: Ignore AC state in handle_discharging on systems where it is broken
On some devices the "AC" interface ACPI AML code uses the exact same broken logic which is causing the battery code to wrongly report discharging to determine the "AC" state. Specifically the ACPI AML code is checking the charging status bits of the charger-IC rather then the vbus present or power-good status bits. This makes our workaround for devices which wrongly report discharging when plugged into AC while the charge is above the start charging threshold not work on these devices. This commit adds a battery_ac_is_broken flag and when that is set it skips the power_supply_is_system_supplied() check in the workaround fixing this. This flag gets set by a DMI quirk selected by systems where we know the AC AML code is broken in this way *and* the rate_now value can be trusted. Signed-off-by: Hans de Goede <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 19fffc8 commit 1b799c5

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

drivers/acpi/battery.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ static async_cookie_t async_cookie;
7474
static bool battery_driver_registered;
7575
static int battery_bix_broken_package;
7676
static int battery_notification_delay_ms;
77+
static int battery_ac_is_broken;
7778
static unsigned int cache_time = 1000;
7879
module_param(cache_time, uint, 0644);
7980
MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
@@ -222,7 +223,8 @@ static int acpi_battery_handle_discharging(struct acpi_battery *battery)
222223
* was above the device's start charging threshold atm the AC adapter
223224
* was plugged in and the device thus did not start a new charge cycle.
224225
*/
225-
if (power_supply_is_system_supplied() && battery->rate_now == 0)
226+
if ((battery_ac_is_broken || power_supply_is_system_supplied()) &&
227+
battery->rate_now == 0)
226228
return POWER_SUPPLY_STATUS_NOT_CHARGING;
227229

228230
return POWER_SUPPLY_STATUS_DISCHARGING;
@@ -1345,6 +1347,13 @@ battery_notification_delay_quirk(const struct dmi_system_id *d)
13451347
return 0;
13461348
}
13471349

1350+
static int __init
1351+
battery_ac_is_broken_quirk(const struct dmi_system_id *d)
1352+
{
1353+
battery_ac_is_broken = 1;
1354+
return 0;
1355+
}
1356+
13481357
static const struct dmi_system_id bat_dmi_table[] __initconst = {
13491358
{
13501359
/* NEC LZ750/LS */
@@ -1362,6 +1371,17 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = {
13621371
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
13631372
},
13641373
},
1374+
{
1375+
/* Point of View mobii wintab p800w */
1376+
.callback = battery_ac_is_broken_quirk,
1377+
.matches = {
1378+
DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
1379+
DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
1380+
DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
1381+
/* Above matches are too generic, add bios-date match */
1382+
DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
1383+
},
1384+
},
13651385
{},
13661386
};
13671387

0 commit comments

Comments
 (0)