aboutsummaryrefslogtreecommitdiff
path: root/src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl
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 /src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl
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>
Diffstat (limited to 'src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl')
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl117
1 files changed, 117 insertions, 0 deletions
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)
+ }
+}