summarylogtreecommitdiffstats
path: root/0002-power-surface3_power-Improve-battery-capacity-report.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-power-surface3_power-Improve-battery-capacity-report.patch')
-rw-r--r--0002-power-surface3_power-Improve-battery-capacity-report.patch139
1 files changed, 0 insertions, 139 deletions
diff --git a/0002-power-surface3_power-Improve-battery-capacity-report.patch b/0002-power-surface3_power-Improve-battery-capacity-report.patch
deleted file mode 100644
index f64da207eb85..000000000000
--- a/0002-power-surface3_power-Improve-battery-capacity-report.patch
+++ /dev/null
@@ -1,139 +0,0 @@
-From efc0041ca08e73f97e68cbab5e7eff8d30fef7b9 Mon Sep 17 00:00:00 2001
-From: Stephen Just <stephenjust@gmail.com>
-Date: Tue, 28 Jun 2016 23:37:11 -0600
-Subject: [PATCH 2/2] power: surface3_power: Improve battery capacity reporting
-
-Read additional registers from the battery device to get more
-accurate status reading. Also properly report battery (dis)charge
-state and current.
----
- drivers/power/supply/surface3_power.c | 55 ++++++++++++++++++++++++++++++-----
- 1 file changed, 48 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/power/supply/surface3_power.c b/drivers/power/supply/surface3_power.c
-index eee21d3..ac8155b 100644
---- a/drivers/power/supply/surface3_power.c
-+++ b/drivers/power/supply/surface3_power.c
-@@ -61,6 +61,7 @@ struct mshw0011_data {
- bool charging;
- bool bat_charging;
- u8 trip_point;
-+ s32 full_capacity;
- };
-
- struct mshw0011_lookup {
-@@ -122,6 +123,10 @@ struct gsb_buffer {
- } __packed;
- } __packed;
-
-+#define ACPI_BATTERY_STATE_DISCHARGING 0x1
-+#define ACPI_BATTERY_STATE_CHARGING 0x2
-+#define ACPI_BATTERY_STATE_CRITICAL 0x4
-+
- #define MSHW0011_CMD_DEST_BAT0 0x01
- #define MSHW0011_CMD_DEST_ADP1 0x03
-
-@@ -140,11 +145,14 @@ struct gsb_buffer {
-
- #define MSHW0011_NOTIFY_GET_VERSION 0x00
- #define MSHW0011_NOTIFY_ADP1 0x01
--#define MSHW0011_NOTIFY_BAT0 0x02
-+#define MSHW0011_NOTIFY_BAT0_BST 0x02
-+#define MSHW0011_NOTIFY_BAT0_BIX 0x05
-
- #define MSHW0011_ADP1_REG_PSR 0x03
-
--#define MSHW0011_BAT0_REG_CAPACITY 0x0c
-+#define MSHW0011_BAT0_REG_CAPACITY 0x0c
-+#define MSHW0011_BAT0_REG_FULL_CHG_CAPACITY 0x0e
-+#define MSHW0011_BAT0_REG_DESIGN_CAPACITY 0x40
- #define MSHW0011_BAT0_REG_VOLTAGE 0x08
- #define MSHW0011_BAT0_REG_RATE 0x14
- #define MSHW0011_BAT0_REG_OEM 0x45
-@@ -235,6 +243,22 @@ static int mshw0011_bix(struct mshw0011_data *cdata, struct bix *bix)
-
- *bix = default_bix;
-
-+ /* get design capacity */
-+ ret = i2c_smbus_read_word_data(client, MSHW0011_BAT0_REG_DESIGN_CAPACITY);
-+ if (ret < 0) {
-+ dev_err(&client->dev, "Error reading design capacity: %d\n", ret);
-+ return ret;
-+ }
-+ bix->design_capacity = le16_to_cpu(ret);
-+
-+ /* get last full charge capacity */
-+ ret = i2c_smbus_read_word_data(client, MSHW0011_BAT0_REG_FULL_CHG_CAPACITY);
-+ if (ret < 0) {
-+ dev_err(&client->dev, "Error reading last full charge capacity: %d\n", ret);
-+ return ret;
-+ }
-+ bix->last_full_charg_capacity = le16_to_cpu(ret);
-+
- /* get serial number */
- ret = mshw0011_i2c_read_block(client, MSHW0011_BAT0_REG_SERIAL_NO,
- buf, 10);
-@@ -269,7 +293,7 @@ static int mshw0011_bix(struct mshw0011_data *cdata, struct bix *bix)
- static int mshw0011_bst(struct mshw0011_data *cdata, struct bst *bst)
- {
- struct i2c_client *client = cdata->bat0;
-- int rate, capacity, voltage;
-+ int rate, capacity, voltage, state;
- s16 tmp;
-
- rate = i2c_smbus_read_word_data(client, MSHW0011_BAT0_REG_RATE);
-@@ -285,8 +309,15 @@ static int mshw0011_bst(struct mshw0011_data *cdata, struct bst *bst)
- return voltage;
-
- tmp = le16_to_cpu(rate);
-- bst->battery_present_rate = (s32)tmp;
-- bst->battery_state = bst->battery_present_rate < 0 ? 0x01 : 0x02;
-+ bst->battery_present_rate = abs((s32)tmp);
-+
-+ state = 0;
-+ if ((s32) tmp > 0)
-+ state |= ACPI_BATTERY_STATE_CHARGING;
-+ else if ((s32) tmp < 0)
-+ state |= ACPI_BATTERY_STATE_DISCHARGING;
-+ bst->battery_state = state;
-+
- bst->battery_remaining_capacity = le16_to_cpu(capacity);
- bst->battery_present_voltage = le16_to_cpu(voltage);
-
-@@ -308,6 +339,7 @@ static int mshw0011_adp_psr(struct mshw0011_data *cdata)
- static int mshw0011_isr(struct mshw0011_data *cdata)
- {
- struct bst bst;
-+ struct bix bix;
- int ret;
- bool status, bat_status;
-
-@@ -327,14 +359,23 @@ static int mshw0011_isr(struct mshw0011_data *cdata)
- if (ret < 0)
- return ret;
-
-- bat_status = bst.battery_present_rate >= 0;
-+ bat_status = bst.battery_state;
-
- if (bat_status != cdata->bat_charging)
- mshw0011_notify(cdata, cdata->notify_version,
-- MSHW0011_NOTIFY_BAT0, &ret);
-+ MSHW0011_NOTIFY_BAT0_BST, &ret);
-
- cdata->bat_charging = bat_status;
-
-+ ret = mshw0011_bix(cdata, &bix);
-+ if (ret < 0)
-+ return ret;
-+ if (bix.last_full_charg_capacity != cdata->full_capacity)
-+ mshw0011_notify(cdata, cdata->notify_version,
-+ MSHW0011_NOTIFY_BAT0_BIX, &ret);
-+
-+ cdata->full_capacity = bix.last_full_charg_capacity;
-+
- return 0;
- }
-
---
-2.9.3
-