Tag: battery
Linux Power Management
by Mostafa on Feb.13, 2014, under How To ..., Linux, Software
Just came across TLP – Linux Advanced Power Management which looks quite interesting. Not least because it contains built-in support for tpacpi-bat which I have discussed previously as a solution for setting the battery charge thresholds on my ThinkPad E530.
Pre-built binary packages are provided via a Yum repository system which is also a nice touch — making this a very easy solution to get set up with. The default configuration file saved in /etc/defaults/tlp looks sensible, although I did have to uncomment the battery charge thresholds.
ThinkPad E530 battery charge threshold on Linux
by Mostafa on Mar.04, 2013, under Hardware, Linux
Leaving a battery charged at 100% for extended periods of time can significantly reduce its service life. Unfortunately, this is quite often the case with laptops that spend a lot of time tethered to an AC power socket. On Windows systems, the Lenovo ThinkVantage power management tools offer a solution that can be used to stop charging before the battery charge level reaches 100%, and re-start charging after it drops below another predefined level. E.g., with the charge thresholds set at 40% and 80%, a laptop connected to the AC adapter will:
- Start charging when the battery is below 40%
- Stop charging when the level reaches 80%
- Do nothing while it is above 40% — even though the AC adapter is connected
According to ThinkWiki, similar functionality can be had on Linux using tp_smapi but unfortunately support for E-series laptops is currently missing.
Searching further finally led me to tpacpi-bat. It is a very young project (about 3 months old at the time of writing) but I am happy to say that it successfully sets both start and stop thresholds on my E530 ThinkPad. The tpacpi-bat Perl script did require one small change to get it working:
diff --git a/tpacpi-bat b/tpacpi-bat index d9ecf99..2dcdd9d 100755 --- a/tpacpi-bat +++ b/tpacpi-bat @@ -39,7 +39,8 @@ use warnings; use File::Basename; my $acpiCallDev = '/proc/acpi/call'; -my $aslBase = '\_SB.PCI0.LPC.EC.HKEY'; +my $aslBase = '\_SB.PCI0.LPCB.EC0.HKEY'; sub readPeakShiftState($); sub readInhibitCharge($);
… but I’ll chalk it up to the rather immature state of the project. The most important thing is that it works as expected. The $aslBase setting for other ThinkPad models can be found by following these steps taken from the project’s issue tracker:
$ sudo acpidump -b -t DSDT -o /tmp/dsdt.aml $ iasl -d /tmp/dsdt.aml $ cat /tmp/dsdt.dsl | grep \\\\_SB\.PCI.*HKEY -o | uniq
If the tpacpi.service file is utilised to automatically set the thresholds at system start, it should also be modified as appropriate (particularly ExecStart=).