|
@@ -74,6 +74,7 @@ static async_cookie_t async_cookie;
|
|
|
static bool battery_driver_registered;
|
|
|
static int battery_bix_broken_package;
|
|
|
static int battery_notification_delay_ms;
|
|
|
+static int battery_quirk_notcharging;
|
|
|
static int battery_full_discharging;
|
|
|
static unsigned int cache_time = 1000;
|
|
|
module_param(cache_time, uint, 0644);
|
|
@@ -229,6 +230,8 @@ static int acpi_battery_get_property(struct power_supply *psy,
|
|
|
val->intval = POWER_SUPPLY_STATUS_CHARGING;
|
|
|
else if (acpi_battery_is_charged(battery))
|
|
|
val->intval = POWER_SUPPLY_STATUS_FULL;
|
|
|
+ else if (battery_quirk_notcharging)
|
|
|
+ val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
|
|
|
else
|
|
|
val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
|
|
|
break;
|
|
@@ -707,7 +710,7 @@ EXPORT_SYMBOL_GPL(battery_hook_register);
|
|
|
* This function gets called right after the battery sysfs
|
|
|
* attributes have been added, so that the drivers that
|
|
|
* define custom sysfs attributes can add their own.
|
|
|
-*/
|
|
|
+ */
|
|
|
static void battery_hook_add_battery(struct acpi_battery *battery)
|
|
|
{
|
|
|
struct acpi_battery_hook *hook_node;
|
|
@@ -1315,6 +1318,12 @@ static int __init battery_full_discharging_quirk(const struct dmi_system_id *d)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int __init battery_quirk_not_charging(const struct dmi_system_id *d)
|
|
|
+{
|
|
|
+ battery_quirk_notcharging = 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
|
|
{
|
|
|
.callback = battery_bix_broken_package_quirk,
|
|
@@ -1364,6 +1373,19 @@ static const struct dmi_system_id bat_dmi_table[] __initconst = {
|
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "UX410UAK"),
|
|
|
},
|
|
|
},
|
|
|
+ {
|
|
|
+ /*
|
|
|
+ * On Lenovo ThinkPads the BIOS specification defines
|
|
|
+ * a state when the bits for charging and discharging
|
|
|
+ * are both set to 0. That state is "Not Charging".
|
|
|
+ */
|
|
|
+ .callback = battery_quirk_not_charging,
|
|
|
+ .ident = "Lenovo ThinkPad",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
|
|
+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad"),
|
|
|
+ },
|
|
|
+ },
|
|
|
{},
|
|
|
};
|
|
|
|