Difference between revisions of "Tp smapi"

From ArchWiki
Jump to: navigation, search
(Got rid of mindless complexity... combined the simple script and advanced script)
(Workaround for Partially Supported Laptops)
Line 91: Line 91:
 
exit 0
 
exit 0
 
</pre>
 
</pre>
 +
 +
Alternatively, see the solution proposed in [https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_T420#Synaptics this] wiki page on installing Arch on the ThinkPad T420.
  
 
==See Also==
 
==See Also==
 
[http://www.thinkwiki.org/wiki/Tp_smapi tp_smapi on ThinkWiki]
 
[http://www.thinkwiki.org/wiki/Tp_smapi tp_smapi on ThinkWiki]

Revision as of 12:00, 25 November 2011

tp_smapi is a set of kernel modules that retrieves information from and conveys commands to the hardware of ThinkPad laptops. This information is presented through the /sys/devices/platform/smapi filesystem. Much like the /proc filesystem, you can read and write information to these files to get information about and send commands to the hardware. tp_smapi is highly recommended if you're using a ThinkPad laptop.

Supported Laptops

First check whether your laptop is supported. Thinkwiki has a comprehensive list of all supported Thinkpads. In case your TP does not support stop_threshold but only start_threshold please go here Tp_smapi#Workaround for Partially Supported Laptops for a decent workaround.

Installation

Install tp_smapi from AUR. After installing, add tp_smapi to your MODULES array. After a reboot, this will activate most of the drivers, represented through the /sys/devices/platform/smapi filesystem.

Features

Here are a couple of useful things you can do using tp_smapi. Please feel free to add your own.

Control Battery Charging

It's bad for most laptop batteries to hold a full charge for long periods of time. You should try to keep your battery in the 40-80% charged range, unless you need the battery life for extended periods of time.

General Way

tp_smapi lets you control the start and stop charging threshold to do just that. Run these commands to set these to good values:

echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh

This will cause the battery to begin charging when it falls below 40% charge and stop charging once it exceeds 80% charge. This will extend the lifetime of your battery.

Note that when you remove and re-insert the battery, these thresholds may be reset to their default values. To work around this, create a script to set these values, and make this script run both at startup and when a battery is inserted. More specific instructions follow.

Create a script /usr/sbin/set_battery_thresholds:

#!/bin/sh
# set the battery charging thresholds to extend battery lifespan
echo ${2:-40} > /sys/devices/platform/smapi/BAT${1:-0}/start_charge_thresh
echo ${3:-80} > /sys/devices/platform/smapi/BAT${1:-0}/stop_charge_thresh

With this script to set a battery threshold is very simple, just type (if set_bat_thresh is the name of the script):

set_battery_thresholds 0 96 100

Or run it with no arguments to default to BAT0, and thresholds of 40% and 80%.

NB: if you let the battery discharge below 40%, you will get problems, since it is not charged anymore. A solution consists in setting only the parameter stop_charge_thresh and control manually the lower battery value.

Set it runnable:

[root ~]# chmod 744 /usr/sbin/set_battery_thresholds

Make this script run at startup by editing /etc/rc.local:

#... other rc.local stuff
/usr/sbin/set_battery_thresholds

Make it run when a battery is inserted. This requires that acpid is installed and running. Edit /etc/acpi/handler.sh:

#... other ACPI stuff
battery)
  case "$2" in
    BAT0)
      case "$4" in
        00000000)
        ;;
        00000001)
        /usr/sbin/set_battery_thresholds
        ;;
#... more ACPI stuff

Check whether settings were accepted

To check whether your settings were accepted check the output of the following:

cat /sys/devices/platform/smapi/BAT0/start_charge_thresh
cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh

Protect the Hard Disk from Drops

tp_smapi includes a driver to read the accelerometer in your laptop to detect drops and other events that could cause damage to your hard drive. See the HDAPS page for more information on this useful feature.

Workaround for Partially Supported Laptops

For partially supported laptops you can still gain control over your battery. First check what is actually supported:

cat /sys/devices/platform/smapi/BAT0/start_charge_thresh
cat /sys/devices/platform/smapi/BAT0/stop_charge_thresh

If start-charge_thresh is supported but not stop_charge_thresh but you still want to have your computer stop charging your battery you can trick it so it still works. To do so,

  • create the script /usr/sbin/set_battery_thresholds as above
  • copy the original /etc/acpi/handler.sh to /etc/acpi/handler.sh.start
  • edit /etc/acpi/handler.sh as above and copy it to /etc/acpi/handler.sh.stop

Now copy the following script, make it executable, adjust the values to your liking and run it every couple of minutes as a root cron.

#!/bin/bash

CURRENTCHARGE=$(acpitool -b | cut -d, -f2 | cut -d. -f1 | cut -b2-)

if [ $CURRENTCHARGE -gt 80 ]; then
    cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh
    echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    exit 0
fi
if [ $CURRENTCHARGE -lt 60 ]; then
    cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh    
    echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    echo 0 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
    exit 0 
fi

exit 0

Alternatively, see the solution proposed in this wiki page on installing Arch on the ThinkPad T420.

See Also

tp_smapi on ThinkWiki