summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Kharlamov <der@2-47.ru>2018-01-09 00:50:06 +0300
committerPatrick Georgi <pgeorgi@google.com>2019-03-06 20:00:00 +0000
commit93d6ba0889d0247ac264172858ef57698c960464 (patch)
treee71b9c4fc4afd1c31a60f6b406bcc6b741fed536
parentb697c90a4c7bf8ae2c693af538b6573fd469228a (diff)
ec/lenovo/h8: Implement ACPI methods to set battery thresholds
There are two known reverse-engineered ways to manage battery thresholds. This patch implements them and adds a way to enable them for different mainboards. Tested on W530 with 4.18.3-gentoo kernel and X220 with 4.20.11. Works fine with new Linux userspace API for controlling battery thresholds, available since 4.17. (/sys/class/power_supply/BAT0/charge_(start|stop)_threshold). The new API is supported by TLP (you might need to set NATACPI_ENABLE=1 in /etc/tlp.conf). tpacpi-bat works fine too. Signed-off-by: Alexey Kharlamov <der@2-47.ru> Signed-off-by: Evgeny Zinoviev <me@ch1p.com> Change-Id: I2a90f9e9b32462b8a5e9bc8d3087ae0fea563ea5 Reviewed-on: https://review.coreboot.org/c/coreboot/+/23178 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
-rw-r--r--src/ec/lenovo/h8/Kconfig4
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad.asl4
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds.asl182
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl117
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl120
-rw-r--r--src/mainboard/lenovo/t400/Kconfig1
-rw-r--r--src/mainboard/lenovo/t400/acpi/ec.asl1
-rw-r--r--src/mainboard/lenovo/t420/Kconfig1
-rw-r--r--src/mainboard/lenovo/t420/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/t420s/Kconfig1
-rw-r--r--src/mainboard/lenovo/t420s/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/t430/Kconfig1
-rw-r--r--src/mainboard/lenovo/t430/acpi/ec.asl1
-rw-r--r--src/mainboard/lenovo/t430s/Kconfig1
-rw-r--r--src/mainboard/lenovo/t430s/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/t520/Kconfig1
-rw-r--r--src/mainboard/lenovo/t520/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/t530/Kconfig1
-rw-r--r--src/mainboard/lenovo/t530/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/x1_carbon_gen1/Kconfig1
-rw-r--r--src/mainboard/lenovo/x1_carbon_gen1/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/x200/Kconfig1
-rw-r--r--src/mainboard/lenovo/x200/acpi/ec.asl1
-rw-r--r--src/mainboard/lenovo/x201/Kconfig1
-rw-r--r--src/mainboard/lenovo/x201/acpi/ec.asl3
-rw-r--r--src/mainboard/lenovo/x220/Kconfig1
-rw-r--r--src/mainboard/lenovo/x220/acpi/ec.asl2
-rw-r--r--src/mainboard/lenovo/x230/Kconfig1
-rw-r--r--src/mainboard/lenovo/x230/acpi/ec.asl2
29 files changed, 461 insertions, 0 deletions
diff --git a/src/ec/lenovo/h8/Kconfig b/src/ec/lenovo/h8/Kconfig
index 9df60de0e1..b109831105 100644
--- a/src/ec/lenovo/h8/Kconfig
+++ b/src/ec/lenovo/h8/Kconfig
@@ -28,6 +28,10 @@ config H8_SUPPORT_BT_ON_WIFI
Disable BDC detection and assume bluetooth is installed. Required for
bluetooth on wifi cards, as it's not possible to detect it in coreboot.
+config H8_HAS_BAT_TRESHOLDS_IMPL
+ bool
+ default n
+
endif
config H8_DOCK_EARLY_INIT
diff --git a/src/ec/lenovo/h8/acpi/thinkpad.asl b/src/ec/lenovo/h8/acpi/thinkpad.asl
index 1997d08549..449fd6ee61 100644
--- a/src/ec/lenovo/h8/acpi/thinkpad.asl
+++ b/src/ec/lenovo/h8/acpi/thinkpad.asl
@@ -317,4 +317,8 @@ Device (HKEY)
Store (WWAN, \_SB.PCI0.LPCB.EC.WWEB)
}
}
+
+ #if IS_ENABLED(CONFIG_H8_HAS_BAT_TRESHOLDS_IMPL)
+ #include "thinkpad_bat_thresholds.asl"
+ #endif
}
diff --git a/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds.asl b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds.asl
new file mode 100644
index 0000000000..519e64b245
--- /dev/null
+++ b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds.asl
@@ -0,0 +1,182 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (c) 2017 Arthur Heymans <arthur@aheymans.xyz>
+ * Copyright (c) 2018 Evgeny Zinoviev <me@ch1p.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/*
+ * This defines the battery charging thresholds setting methods tpacpi-bat can
+ * use. This implements what the vendor defines but is rather ugly...
+ */
+
+/* SetBatteryCharge Start/Stop Capacity Threshold
+ * In Parameter:
+ * DWORD
+ * Bit 7-0: Charge stop capacity (Unit:%)
+ * =0: Use battery default setting
+ * =1-99: Threshold to stop charging battery (Relative capacity)
+ * Bit 9-8:BatteryID
+ * = 0: Any battery
+ * = 1: Primary battery
+ * = 2: Secondary battery
+ * = Others: Reserved (0)
+ * Bit 31-10: Reserved (0)
+ * Must be Zero
+ *
+ * Out Parameter:
+ * DWORD
+ * Bit 30-0: Reserved (0)
+ * Bit 31: Error status
+ * 0 ... Success
+ * 1 ... Fail
+ */
+
+#define START_THRESH_ARG 0
+#define STOP_THRESH_ARG 1
+
+// Set stop threshold
+Method (BCSS, 1, NotSerialized)
+{
+ Local0 = Arg0 & 0xff // Percentage
+ Local1 = (Arg0 >> 8) & 0x3 // Battery ID
+
+ // Any battery
+ If (Local1 == 0)
+ {
+ \_SB.PCI0.LPCB.EC.BAT0.SETT(STOP_THRESH_ARG, Local0)
+ \_SB.PCI0.LPCB.EC.BAT1.SETT(STOP_THRESH_ARG, Local0)
+
+ Local2 = Local0 != \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG)
+ Local3 = Local0 != \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG)
+
+ Return ((Local2 && Local3) << 31)
+ }
+
+ // Battery1
+ If (Local1 == 1)
+ {
+ \_SB.PCI0.LPCB.EC.BAT0.SETT(STOP_THRESH_ARG, Local0)
+ Return ((Local0 !=
+ \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG)) << 31)
+ }
+
+ // Battery2
+ If (Local1 == 2)
+ {
+ \_SB.PCI0.LPCB.EC.BAT1.SETT(STOP_THRESH_ARG, Local0)
+ Return ((Local0 !=
+ \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG)) << 31)
+ }
+
+ Return (1 << 31) /* Should not be reached */
+}
+
+// Set start threshold
+Method (BCCS, 1, NotSerialized)
+{
+ Local0 = Arg0 & 0xff // Percentage
+ Local1 = (Arg0 >> 8) & 0x3 // Battery ID
+
+ // Any battery
+ If (Local1 == 0)
+ {
+ \_SB.PCI0.LPCB.EC.BAT0.SETT(START_THRESH_ARG, Local0)
+ \_SB.PCI0.LPCB.EC.BAT1.SETT(START_THRESH_ARG, Local0)
+
+ Local2 = Local0 != \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG)
+ Local3 = Local0 != \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG)
+
+ Return ((Local2 && Local3) << 31)
+ }
+
+ // Battery1
+ If (Local1 == 1)
+ {
+ \_SB.PCI0.LPCB.EC.BAT0.SETT(START_THRESH_ARG, Local0)
+ Return ((Local0 !=
+ \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG)) << 31)
+ }
+
+ // Battery2
+ If (Local1 == 2)
+ {
+ \_SB.PCI0.LPCB.EC.BAT1.SETT(START_THRESH_ARG, Local0)
+ Return ((Local0 !=
+ \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG)) << 31)
+ }
+
+ Return (1 << 31) /* Should not be reached */
+}
+
+/*
+ * GetBatteryCharge Start/Stop Capacity Threshold
+ * In Parameter:
+ * DWORD
+ * Bit 7-0:BatteryID
+ * Bit 31-8: Reserved (0)
+ * Must be Zero
+ *
+ * Out Parameter:
+ * DWORD
+ * Bit 7-0: Charge stop capacity (Unit:%)
+ * =0: Use battery default setting
+ * =1-99: Threshold to stop charging battery (Relative capacity)
+ * =Others: Reserved (0)
+ * Bit 9-8: Capability of BatteryCharge Stop Capacity Threshold
+ * Bit 8:Batterycharge stop capacity threshold
+ * (0:Not support 1:Support)
+ * Bit 9: Specify every battery parameter
+ * (0:Not support(apply parameter for all battery)
+ * 1:Support(apply parameter for all battery))
+ * Bit 30-10: Reserved (0)
+ * Bit 31: Error status
+ * 0 ... Success
+ * 1 ... Fail
+*/
+
+// Get stop threshold
+Method (BCSG, 1, NotSerialized)
+{
+ // Battery1
+ If (Arg0 == 1)
+ {
+ Return (0x300 | \_SB.PCI0.LPCB.EC.BAT0.GETT(STOP_THRESH_ARG))
+ }
+
+ // Battery2
+ If (Arg0 == 2)
+ {
+ Return (0x300 | \_SB.PCI0.LPCB.EC.BAT1.GETT(STOP_THRESH_ARG))
+ }
+
+ Return (1 << 31)
+}
+
+// Get start threshold
+Method (BCTG, 1, NotSerialized)
+{
+ // Battery 1
+ If (Arg0 == 1)
+ {
+ Return (0x300 | \_SB.PCI0.LPCB.EC.BAT0.GETT(START_THRESH_ARG))
+ }
+
+ // Battery 2
+ If (Arg0 == 2)
+ {
+ Return (0x300 | \_SB.PCI0.LPCB.EC.BAT1.GETT(START_THRESH_ARG))
+ }
+
+ Return (1 << 31)
+}
diff --git a/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl
new file mode 100644
index 0000000000..52176490f4
--- /dev/null
+++ b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl
@@ -0,0 +1,117 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (c) 2017 Arthur Heymans <arthur@aheymans.xyz>
+ * Copyright (c) 2018 Evgeny Zinoviev <me@ch1p.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+
+Scope(\_SB.PCI0.LPCB.EC)
+{
+ Field (ERAM, ByteAcc, NoLock, Preserve)
+ {
+ Offset (0x03),
+ , 2,
+ BSTP, 1, /* Battery start/stop threshold */
+ Offset (0x24),
+ TSH0, 8, /* Battery0 threshold */
+ Offset (0x25),
+ TSH1, 8, /* Battery1 threshold */
+ }
+}
+
+Scope(\_SB.PCI0.LPCB.EC.BAT0)
+{
+ /*
+ * Set threshold on battery0,
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ * Arg1: Percentage
+ */
+ Method (SETT, 2, NotSerialized)
+ {
+ if (Arg0 <= 1 && Arg1 <= 100)
+ {
+ BSTP = Arg0
+#if defined(H8_BAT_THRESHOLDS_BIT7)
+ TSH0 = Arg1
+#else
+ TSH0 = Arg1 | 0x80
+#endif
+ }
+ }
+
+ /**
+ * Get threshold on battery0
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ */
+ Method (GETT, 1, NotSerialized)
+ {
+ if (Arg0 <= 1)
+ {
+ BSTP = Arg0
+#if defined(H8_BAT_THRESHOLDS_BIT7)
+ Return (TSH0)
+#else
+ Return (TSH0 & ~0x80)
+#endif
+ }
+ Return (0)
+ }
+}
+
+Scope(\_SB.PCI0.LPCB.EC.BAT1)
+{
+ /*
+ * Set threshold on battery1
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ * Arg1: Percentage
+ */
+ Method (SETT, 2, NotSerialized)
+ {
+ if (Arg0 <= 1 && Arg1 <= 100)
+ {
+ BSTP = Arg0
+#if defined(H8_BAT_THRESHOLDS_BIT7)
+ TSH1 = Arg1
+#else
+ TSH1 = Arg1 | 0x80
+#endif
+ }
+ }
+
+ /**
+ * Get threshold on battery1
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ */
+ Method (GETT, 1, NotSerialized)
+ {
+ if (Arg0 <= 1)
+ {
+ BSTP = Arg0
+#if defined(H8_BAT_THRESHOLDS_BIT7)
+ Return (TSH1)
+#else
+ Return (TSH1 & ~0x80)
+#endif
+ }
+ Return (0)
+ }
+}
diff --git a/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl
new file mode 100644
index 0000000000..88a66f0e4a
--- /dev/null
+++ b/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl
@@ -0,0 +1,120 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (c) 2017 Arthur Heymans <arthur@aheymans.xyz>
+ * Copyright (c) 2018 Evgeny Zinoviev <me@ch1p.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+
+Scope(\_SB.PCI0.LPCB.EC)
+{
+ Field (ERAM, ByteAcc, NoLock, Preserve)
+ {
+ Offset (0xb0),
+ TSL0, 8, /* Battery0 start threshold */
+ Offset (0xb1),
+ TSH0, 8, /* Battery0 stop threshold */
+ Offset (0xb2),
+ TSL1, 8, /* Battery1 start threshold */
+ Offset (0xb3),
+ TSH1, 8, /* Battery1 stop threshold */
+ }
+}
+
+Scope(\_SB.PCI0.LPCB.EC.BAT0)
+{
+ /*
+ * Set threshold on battery0
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ * Arg1: Percentage
+ */
+ Method (SETT, 2, NotSerialized)
+ {
+ if (Arg1 <= 100)
+ {
+ if (Arg0 == 0)
+ {
+ TSL0 = Arg1
+ }
+ if (Arg0 == 1)
+ {
+ TSH0 = Arg1
+ }
+ }
+ }
+
+ /**
+ * Get threshold on battery0
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ */
+ Method (GETT, 1, NotSerialized)
+ {
+ if (Arg0 == 0)
+ {
+ Return (TSL0)
+ }
+ if (Arg0 == 1)
+ {
+ Return (TSH0)
+ }
+ Return (0)
+ }
+}
+
+Scope(\_SB.PCI0.LPCB.EC.BAT1)
+{
+ /*
+ * Set threshold on battery1
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ * Arg1: Percentage
+ */
+ Method (SETT, 2, NotSerialized)
+ {
+ if (Arg1 <= 100)
+ {
+ if (Arg0 == 0)
+ {
+ TSL1 = Arg1
+ }
+ if (Arg0 == 1)
+ {
+ TSH1 = Arg1
+ }
+ }
+ }
+
+ /**
+ * Get threshold on battery1
+ *
+ * Arg0: 0: Start threshold
+ * 1: Stop threshold
+ */
+ Method (GETT, 1, NotSerialized)
+ {
+ if (Arg0 == 0)
+ {
+ Return (TSL1)
+ }
+ if (Arg0 == 1)
+ {
+ Return (TSH1 & ~0x80)
+ }
+ Return (0)
+ }
+}
diff --git a/src/mainboard/lenovo/t400/Kconfig b/src/mainboard/lenovo/t400/Kconfig
index 57e31f22f0..9f9405162c 100644
--- a/src/mainboard/lenovo/t400/Kconfig
+++ b/src/mainboard/lenovo/t400/Kconfig
@@ -9,6 +9,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_I82801IX
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select H8_DOCK_EARLY_INIT
select BOARD_ROMSIZE_KB_8192
select DRIVERS_GENERIC_IOAPIC
diff --git a/src/mainboard/lenovo/t400/acpi/ec.asl b/src/mainboard/lenovo/t400/acpi/ec.asl
index c3569e8c41..cb3dd8710d 100644
--- a/src/mainboard/lenovo/t400/acpi/ec.asl
+++ b/src/mainboard/lenovo/t400/acpi/ec.asl
@@ -1 +1,2 @@
#include <ec/lenovo/h8/acpi/ec.asl>
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl>
diff --git a/src/mainboard/lenovo/t420/Kconfig b/src/mainboard/lenovo/t420/Kconfig
index d4492321af..f40e9c0c92 100644
--- a/src/mainboard/lenovo/t420/Kconfig
+++ b/src/mainboard/lenovo/t420/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_BD82X6X
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_8192
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/t420/acpi/ec.asl b/src/mainboard/lenovo/t420/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/t420/acpi/ec.asl
+++ b/src/mainboard/lenovo/t420/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/t420s/Kconfig b/src/mainboard/lenovo/t420s/Kconfig
index 05868161eb..71b94afa52 100644
--- a/src/mainboard/lenovo/t420s/Kconfig
+++ b/src/mainboard/lenovo/t420s/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_BD82X6X
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_8192
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/t420s/acpi/ec.asl b/src/mainboard/lenovo/t420s/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/t420s/acpi/ec.asl
+++ b/src/mainboard/lenovo/t420s/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/t430/Kconfig b/src/mainboard/lenovo/t430/Kconfig
index ed9128cdf1..687edea021 100644
--- a/src/mainboard/lenovo/t430/Kconfig
+++ b/src/mainboard/lenovo/t430/Kconfig
@@ -5,6 +5,7 @@ config BOARD_SPECIFIC_OPTIONS
select BOARD_ROMSIZE_KB_12288
select DRIVERS_RICOH_RCE822
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select EC_LENOVO_PMH7
select NO_UART_ON_SUPERIO
select HAVE_ACPI_RESUME
diff --git a/src/mainboard/lenovo/t430/acpi/ec.asl b/src/mainboard/lenovo/t430/acpi/ec.asl
index 63d6a824bc..ec45363125 100644
--- a/src/mainboard/lenovo/t430/acpi/ec.asl
+++ b/src/mainboard/lenovo/t430/acpi/ec.asl
@@ -14,3 +14,4 @@
*/
#include <ec/lenovo/h8/acpi/ec.asl>
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/t430s/Kconfig b/src/mainboard/lenovo/t430s/Kconfig
index 3a4320555f..47ff441d83 100644
--- a/src/mainboard/lenovo/t430s/Kconfig
+++ b/src/mainboard/lenovo/t430s/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_16384
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/t430s/acpi/ec.asl b/src/mainboard/lenovo/t430s/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/t430s/acpi/ec.asl
+++ b/src/mainboard/lenovo/t430s/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/t520/Kconfig b/src/mainboard/lenovo/t520/Kconfig
index 3e9f1d6c50..c4140836da 100644
--- a/src/mainboard/lenovo/t520/Kconfig
+++ b/src/mainboard/lenovo/t520/Kconfig
@@ -6,6 +6,7 @@ config BOARD_LENOVO_BASEBOARD_T520
select SOUTHBRIDGE_INTEL_BD82X6X
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_8192
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/t520/acpi/ec.asl b/src/mainboard/lenovo/t520/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/t520/acpi/ec.asl
+++ b/src/mainboard/lenovo/t520/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/t530/Kconfig b/src/mainboard/lenovo/t530/Kconfig
index f714c5043a..14f9fb2478 100644
--- a/src/mainboard/lenovo/t530/Kconfig
+++ b/src/mainboard/lenovo/t530/Kconfig
@@ -6,6 +6,7 @@ config BOARD_LENOVO_BASEBOARD_T530
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_12288
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/t530/acpi/ec.asl b/src/mainboard/lenovo/t530/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/t530/acpi/ec.asl
+++ b/src/mainboard/lenovo/t530/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/x1_carbon_gen1/Kconfig b/src/mainboard/lenovo/x1_carbon_gen1/Kconfig
index 45e0587651..202fabd5fd 100644
--- a/src/mainboard/lenovo/x1_carbon_gen1/Kconfig
+++ b/src/mainboard/lenovo/x1_carbon_gen1/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_12288
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/x1_carbon_gen1/acpi/ec.asl b/src/mainboard/lenovo/x1_carbon_gen1/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/x1_carbon_gen1/acpi/ec.asl
+++ b/src/mainboard/lenovo/x1_carbon_gen1/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/x200/Kconfig b/src/mainboard/lenovo/x200/Kconfig
index 6d32a693ce..7b905bcfff 100644
--- a/src/mainboard/lenovo/x200/Kconfig
+++ b/src/mainboard/lenovo/x200/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_I82801IX
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_8192
select DRIVERS_GENERIC_IOAPIC
diff --git a/src/mainboard/lenovo/x200/acpi/ec.asl b/src/mainboard/lenovo/x200/acpi/ec.asl
index c3569e8c41..cb3dd8710d 100644
--- a/src/mainboard/lenovo/x200/acpi/ec.asl
+++ b/src/mainboard/lenovo/x200/acpi/ec.asl
@@ -1 +1,2 @@
#include <ec/lenovo/h8/acpi/ec.asl>
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl>
diff --git a/src/mainboard/lenovo/x201/Kconfig b/src/mainboard/lenovo/x201/Kconfig
index ca2556e7bc..69e20385bf 100644
--- a/src/mainboard/lenovo/x201/Kconfig
+++ b/src/mainboard/lenovo/x201/Kconfig
@@ -21,6 +21,7 @@ config BOARD_SPECIFIC_OPTIONS
select MAINBOARD_HAS_TPM1
select INTEL_GMA_HAVE_VBT
select MAINBOARD_USES_IFD_GBE_REGION
+ select H8_HAS_BAT_TRESHOLDS_IMPL
config MAINBOARD_DIR
string
diff --git a/src/mainboard/lenovo/x201/acpi/ec.asl b/src/mainboard/lenovo/x201/acpi/ec.asl
index d631f121fb..411a0ece82 100644
--- a/src/mainboard/lenovo/x201/acpi/ec.asl
+++ b/src/mainboard/lenovo/x201/acpi/ec.asl
@@ -19,3 +19,6 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#define H8_BAT_THRESHOLDS_BIT7
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl>
diff --git a/src/mainboard/lenovo/x220/Kconfig b/src/mainboard/lenovo/x220/Kconfig
index e58926ac0b..70245d20bc 100644
--- a/src/mainboard/lenovo/x220/Kconfig
+++ b/src/mainboard/lenovo/x220/Kconfig
@@ -7,6 +7,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_8192
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/x220/acpi/ec.asl b/src/mainboard/lenovo/x220/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/x220/acpi/ec.asl
+++ b/src/mainboard/lenovo/x220/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>
diff --git a/src/mainboard/lenovo/x230/Kconfig b/src/mainboard/lenovo/x230/Kconfig
index 787b31fb4c..3ec537a242 100644
--- a/src/mainboard/lenovo/x230/Kconfig
+++ b/src/mainboard/lenovo/x230/Kconfig
@@ -8,6 +8,7 @@ config BOARD_SPECIFIC_OPTIONS
select SOUTHBRIDGE_INTEL_C216
select EC_LENOVO_PMH7
select EC_LENOVO_H8
+ select H8_HAS_BAT_TRESHOLDS_IMPL
select NO_UART_ON_SUPERIO
select BOARD_ROMSIZE_KB_12288
select HAVE_ACPI_TABLES
diff --git a/src/mainboard/lenovo/x230/acpi/ec.asl b/src/mainboard/lenovo/x230/acpi/ec.asl
index d631f121fb..4b11e56bed 100644
--- a/src/mainboard/lenovo/x230/acpi/ec.asl
+++ b/src/mainboard/lenovo/x230/acpi/ec.asl
@@ -19,3 +19,5 @@
Scope(\_SB.PCI0.LPCB.EC)
{
}
+
+#include <ec/lenovo/h8/acpi/thinkpad_bat_thresholds_b0.asl>