diff options
author | Alexey Kharlamov <der@2-47.ru> | 2018-01-09 00:50:06 +0300 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-03-06 20:00:00 +0000 |
commit | 93d6ba0889d0247ac264172858ef57698c960464 (patch) | |
tree | e71b9c4fc4afd1c31a60f6b406bcc6b741fed536 /src/ec/lenovo/h8/acpi/thinkpad_bat_thresholds_24.asl | |
parent | b697c90a4c7bf8ae2c693af538b6573fd469228a (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.asl | 117 |
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) + } +} |