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 <code>/sys/devices/platform/smapi</code> filesystem. Much like the <code>/proc</code> 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.

+

[[Category:Kernel]]

+

tp_smapi is a set of kernel modules that retrieves information from and conveys commands to the hardware of many ThinkPad laptops. This information is presented through the {{ic|/sys/devices/platform/smapi}} filesystem. Much like the {{ic|/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 supported ThinkPad laptop.

==Supported Laptops==

==Supported Laptops==

First check whether your laptop is supported. Thinkwiki has a comprehensive [http://www.thinkwiki.org/wiki/Tp_smapi#Model-specific_status 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.

First check whether your laptop is supported. Thinkwiki has a comprehensive [http://www.thinkwiki.org/wiki/Tp_smapi#Model-specific_status 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.

+

+

If you are installing on a recent Thinkpad that has an Ivy Bridge processor (X230, T430, T530, etc.), tp_smapi will not work. Use [https://aur.archlinux.org/packages.php?ID=54293 tpacpi-bat] or [https://aur.archlinux.org/packages/tpacpi-bat-git tpacpi-bat-git].

==Installation==

==Installation==

−

Install [http://aur.archlinux.org/packages.php?ID=3985 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 <code>/sys/devices/platform/smapi</code> filesystem.

+

[[pacman|Install]] the {{Pkg|tp_smapi}} package that recently moved to the community repository.

After a reboot tp_smapi and it's dependencys will get autoloaded and the sysfs-interface under {{ic|/sys/devices/platform/smapi}} should be fully functional.

==Features==

==Features==

Line 24:

Line 51:

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.

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.

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.

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.

Line 34:

Line 66:

Set it runnable:

Set it runnable:

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

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

−

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

If start-charge_thresh is supported but not stop_charge_thresh but you still want to have your computer stop charging your battery you have two options.

−

* copy the original <code>/etc/acpi/handler.sh</code> to <code>/etc/acpi/handler.sh.start</code>.

+

−

* edit <code>/etc/acpi/handler.sh</code> as above and copy it to <code>/etc/acpi/handler.sh.stop</code>

+

Note : none of the two options works on T42p.

+

+

===1st Option===

+

+

* create the script {{ic|/usr/sbin/set_battery_thresholds}} as above

+

* copy the original {{ic|/etc/acpi/handler.sh}} to {{ic|/etc/acpi/handler.sh.start}}

+

* edit {{ic|/etc/acpi/handler.sh}} as above and copy it to {{ic|/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.

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.

−

<pre>

+

{{bc|<nowiki>

#!/bin/bash

#!/bin/bash

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

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

−

# The following command is for testing/debugging purposes, can be removed

−

echo "charge is $CURRENTCHARGE"

−

−

if [ x$CURRENTCHARGE == x ]; then

−

# The following command is for testing/debugging purposes, can be removed

−

echo "Cannot get a charge reading"

−

#Exit if cannot get battery charge reading, like when battery is removed

−

exit 0

−

fi

if [ $CURRENTCHARGE -gt 80 ]; then

if [ $CURRENTCHARGE -gt 80 ]; then

−

#Replace the following line with the command you wish to run when charge is over 80%

cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh

cp /etc/acpi/handler.sh.stop /etc/acpi/handler.sh

echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh

echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh

exit 0

exit 0

fi

fi

−

if [ $CURRENTCHARGE -lt 75 ]; then

+

if [ $CURRENTCHARGE -lt 60 ]; then

−

#Replace the following line with the command you wish to run when charge is less than 40%

cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh

cp /etc/acpi/handler.sh.start /etc/acpi/handler.sh

echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh

echo 99 > /sys/devices/platform/smapi/BAT0/start_charge_thresh

Line 165:

Line 138:

exit 0

exit 0

−

</pre>

+

</nowiki>}}

+

+

===2nd Option===

+

+

To control the battery charging thresholds, install the Perl script [https://aur.archlinux.org/packages.php?ID=54293 tpacpi-bat] or [https://aur.archlinux.org/packages/tpacpi-bat-git tpacpi-bat-git] from the AUR.

The example values 40 and 80 given here are in percent of the full battery capacity. Adjust them to your own needs. You may also want to add these lines to /etc/rc.local to set the at startup. While these values should be permanent, they will be reset any time the battery is removed.

+

+

{{Note|See tpacpi-bat help for the list of commands: {{ic|perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h}}.}}

==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 22:04, 10 October 2013

tp_smapi is a set of kernel modules that retrieves information from and conveys commands to the hardware of many 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 supported ThinkPad laptop.

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.

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.

Check whether settings were accepted

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:

The example values 40 and 80 given here are in percent of the full battery capacity. Adjust them to your own needs. You may also want to add these lines to /etc/rc.local to set the at startup. While these values should be permanent, they will be reset any time the battery is removed.

Note: See tpacpi-bat help for the list of commands: perl /usr/lib/perl5/vendor_perl/tpacpi-bat -h.