Home Linux Tips & TricksHow to Set Battery Charge Thresholds on Linux with TLP

How to Set Battery Charge Thresholds on Linux with TLP

By sk
1.5K views 16 mins read

Quick Answer

Install TLP (sudo apt install tlp tlp-pd), add START_CHARGE_THRESH_BAT0=75 and STOP_CHARGE_THRESH_BAT0=80 to /etc/tlp.conf, then run sudo tlp start. Not all brands support both thresholds — see the brand-specific sections below.

1. Introduction

Keeping your laptop battery charged to 100% all the time is one of the fastest ways to shorten its lifespan. Battery charge thresholds let you tell your laptop's hardware to start and stop charging at defined levels — for example, don't charge below 50% and stop at 80%. This simple change can significantly extend how long your battery lasts before needing replacement.

This details guide covers setup Laptop battery charge thresholds for all major laptop brands supported by TLP, including ThinkPad, ASUS, Dell, Samsung, Huawei, LG, MSI, Sony, Toshiba, Tuxedo, Framework, Apple Silicon (Asahi), System76, and more.

2. Why Set Battery Charge Thresholds?

Lithium-ion batteries degrade faster the closer they are kept to 100% charge. By default, most laptops charge fully and maintain that level while plugged in — convenient for runtime, but hard on long-term battery health.

Charge thresholds work at the hardware level, written into your laptop's Embedded Controller (EC) firmware via a kernel driver. This means:

  • Thresholds remain active even when the laptop is switched off
  • No background process is required to enforce them
  • The effect is persistent across reboots on most hardware

There are two threshold types:

  • Start threshold: charging begins only when the battery drops below this level
  • Stop threshold: charging stops once the battery reaches this level

Not all brands support both. ASUS, Samsung, and LG only expose a simple on/off toggle. ThinkPad, Dell, and Huawei support full start and stop control. Details are in each brand's section below.

3. Prerequisites

  • A Linux laptop (Ubuntu, Fedora, Arch, etc.)
  • sudo / root access
  • TLP 1.4 or newer (1.8+ required for Dell and Framework)
  • A supported laptop model (see Section 5)

4. Installing TLP in Linux

Ubuntu / Linux Mint (non-LMDE):

The official TLP docs recommend adding the TLP PPA for the latest version:

sudo add-apt-repository ppa:linrunner/tlp
sudo apt update
sudo apt install tlp tlp-pd tlp-rdw

⚠️ Ubuntu 22.04 only: Due to a bug in the Ubuntu packages, you must manually enable the service after installation:

sudo systemctl enable tlp.service

This is resolved in Ubuntu 24.04 and newer.

Debian / Linux Mint Debian Edition (LMDE):

sudo apt update
sudo apt install tlp tlp-pd tlp-rdw

Fedora / RHEL / AlmaLinux / Rocky Linux:

sudo dnf install tlp tlp-pd tlp-rdw

⚠️ Fedora conflict: Remove conflicting power management tools before or after installing TLP:

sudo dnf remove tuned tuned-ppd

Arch Linux / Endeavour OS / Manjaro Linux:

sudo pacman -S tlp tlp-pd tlp-rdw

openSUSE:

sudo zypper install tlp tlp-pd tlp-rdw

⚠️ openSUSE conflict: Remove the conflicting package on openSUSE Leap 15.4+ and Tumbleweed:

sudo zypper remove power-profiles-daemon

4.1. Enable tlp Service at boot

Once installed, enable tlp service to start at system startup:

sudo systemctl enable tlp.service

If you installed tlp-pd (recommended for TLP 1.9+), also enable its service:

sudo systemctl enable --now tlp-pd.service

Mask the rfkill services to avoid conflicts:

sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket

What is tlp-pd? It is an optional companion package (TLP 1.9+) that replaces power-profiles-daemon while implementing the same D-Bus API. This means GNOME and KDE power profile switching continues to work normally, with TLP handling the actual power management underneath.

5. Is My Laptop Supported?

Run the following to check immediately:

sudo tlp-stat -b

Supported hardware shows an active plugin, for example:

+++ Battery Care
Plugin: thinkpad
Supported features: charge thresholds, recalibration
Driver usage:
* natacpi (thinkpad_acpi) = active (charge thresholds, recalibration)

Unsupported hardware shows:

+++ Battery Care
Plugin: generic
Supported features: none available

If your hardware is unsupported, TLP cannot control charge thresholds regardless of configuration. See Troubleshooting section for more.

Alternative config location: Instead of editing /etc/tlp.conf directly, put your settings in /etc/tlp.d/01-mytlp.conf. This keeps your changes separate from the main config file, which may be overwritten by package upgrades. Note that /etc/tlp.d/ files are read before /etc/tlp.conf, and /etc/tlp.conf has final precedence — so ensure your settings are not also uncommented in /etc/tlp.conf.

6. Set Laptop Battery Charge Thresholds with TLP on Linux (Brand-by-Brand Configuration)

6.1. Lenovo ThinkPad (2011 onwards)

Kernel driverthinkpad_acpi (built-in, loads automatically)
TLP versionAny
Threshold supportStart and stop
Start range0–99 (0 = off; 96 = hardware default)
Stop range1–100 (100 = hardware default / off)

To setup battery charge thresholds in Lenovo Thinkpads, edit /etc/tlp.conf file:

sudo nano /etc/tlp.conf

Add/modify the following lines:

START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

For ThinkPads with a second (UltraBay) battery:

START_CHARGE_THRESH_BAT1=75
STOP_CHARGE_THRESH_BAT1=80

Adjust these values as per your requirements.

6.2. Lenovo / IBM Legacy ThinkPad (pre-2011)

Kernel driversthinkpad_acpi (built-in) + tp_smapi (out-of-tree, must be installed separately)
TLP versionAny
Threshold supportStart and stop
Start range2–96 (96 = hardware default)
Stop range6–100 (100 = hardware default / off)

Install tp_smapi first (package name varies by distro. Check tlp-stat -b for a recommendation), then configure the same as modern ThinkPads:

START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

6.3. Lenovo Non-ThinkPad (IdeaPad, Yoga, Legion, ThinkBook)

Kernel driverideapad_laptop (built-in)
TLP version1.4+
Threshold supportFixed stop threshold via battery conservation mode (toggle only)
Values1 = conservation mode on (~60–80% cap, varies by model) · 0 = off (charges to 100%)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value — required but ignored
STOP_CHARGE_THRESH_BAT0=1

This is a binary on/off toggle, not an arbitrary percentage. The exact cap (commonly 60% or 80%) depends on the model. There is no way to read the actual threshold level via Linux; TLP cannot display it in tlp-stat -b.

Some IdeaPad/Legion models ignore the setting entirely — conservation mode remains off permanently. Check tlp-stat -b after applying to confirm it worked.

6.4. ASUS

Kernel driverasus_wmi (built-in, kernel 5.4+)
TLP version1.4+
Threshold supportStop only
Range1–100 (0 = disabled; 100 = hardware default)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value
STOP_CHARGE_THRESH_BAT0=80

ASUS quirk: Some ASUS models silently ignore values other than 40, 60, or 80. If your setting doesn't take effect, try one of those three values.

Note: ASUS laptops reset charge thresholds on power-on. TLP restores them at boot, but there is a brief window at startup where the threshold may not yet be active. If it consistently fails to apply at boot, adding asus_wmi to the Initramfs fixes this (see Arch Wiki link given at the end).

6.5. Dell

Kernel driverdell_laptop (built-in, kernel 6.12+)
TLP version1.8+
Threshold supportStart and stop
Start range50–95 (95 = hardware default); hardware enforces start = stop − 5
Stop range55–100 (100 = hardware default / off)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

Dell threshold support requires kernel 6.12 or newer. On older kernels, tlp-stat -b reports thresholds as (not available).

TLP sets the Dell battery charge type to Custom mode for thresholds to be effective. Other Dell charge types (Adaptive, Standard, etc.) are not compatible with TLP.

If a BIOS Admin password is set on your Dell, it must be temporarily removed in order to write the thresholds via tlp setcharge.

6.6. Huawei MateBook

Kernel driverhuawei_wmi (built-in, kernel 5.4+)
TLP version1.4+
Threshold supportStart and stop
Start range0–99 (0 = hardware default / off)
Stop range1–100 (100 = hardware default)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

Both BAT0 and BAT1 share the BAT0 parameter — setting THRESH_BAT0 applies to all Huawei batteries.

6.7. LG Gram

Kernel driverlg_laptop (built-in)
TLP version1.4+
Threshold supportFixed stop threshold via battery care limit (toggle only)
Values1 = battery care limit on (charges to 80%) · 0 = off (charges to 100%)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value
STOP_CHARGE_THRESH_BAT0=1

This is a binary on/off toggle, not an arbitrary percentage. 1 enables the 80% cap; 0 disables it. Setting any other value will not work.

A regression in kernel 6.9 breaks lg_laptop. If your LG Gram thresholds stop working after a kernel update, upgrade to kernel 6.10.7 or later (mainline 6.6 LTS and Ubuntu's 6.8 were also patched).

6.8. MSI

Kernel drivermsi_ec (built-in, kernel 6.3+)
TLP version1.7+
Threshold supportStart and stop; hardware enforces start = stop − 10
Stop range10–100 (100 = hardware default)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # don't care — hardware enforces stop - 10
STOP_CHARGE_THRESH_BAT0=80

The msi_ec driver only supports specific MSI models and BIOS versions. If tlp-stat -b shows Supported features: none available on an MSI laptop, the issue is with the msi_ec driver, not TLP — open an issue at the msi-ec GitHub repository.

6.9. Samsung

Kernel driversamsung_laptop (built-in)
TLP version1.4+
Threshold supportFixed stop threshold via battery life extender (toggle only)
Values1 = battery life extender on (charges to 80%) · 0 = off (charges to 100%)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value
STOP_CHARGE_THRESH_BAT0=1

This is a binary on/off toggle, not a percentage. 1 caps charging at 80%; 0 disables the cap.

6.10. Apple Silicon Macbooks (Asahi Linux)

Kernel drivermacsmc_power (Asahi Linux kernel 6.3+)
TLP version1.7+
Threshold supportStop only; hardware auto-sets start threshold
Stop values80 or 100 only

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # hardware-controlled; ignored by TLP
STOP_CHARGE_THRESH_BAT0=80

When STOP=80, the hardware automatically enforces a start threshold of 75%. When STOP=100, the threshold is disabled. No other stop values are accepted by this hardware.

6.11. Framework & Chromebooks (coreboot)

Covers Framework laptops and Chromebooks running custom coreboot/UEFI firmware via chrultrabook.

Kernel drivercros_charge-control (built-in, kernel 6.12+; possibly 6.17 for Framework)
TLP version1.8+
Threshold supportStop (EC firmware v2); Start + Stop (EC firmware v3)
Start range0–99 (0 = hardware default / off)
Stop range1–100 (100 = hardware default / off)

/etc/tlp.conf Sample Configuration:

# EC firmware v3 (start + stop):
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

# EC firmware v2 (stop only):
START_CHARGE_THRESH_BAT0=0
STOP_CHARGE_THRESH_BAT0=80

Framework laptops: The module option cros_charge-control.probe_with_fwk_charge_control=1 must be set. Recent Framework EC firmware changes break the driver on all models. Fixed in kernel 6.17. Check the TLP issue tracker for current status.

6.12. Sony VAIO

Kernel driversony_laptop (built-in)
TLP version1.5+
Threshold supportStop only
Allowed stop values50, 80, or 100 only

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value
STOP_CHARGE_THRESH_BAT0=80

Only the specific values 50, 80, and 100 are accepted — no other percentages will work.

6.13. Toshiba / Dynabook

Kernel drivertoshiba_laptop (built-in, kernel 6.0+)
TLP version1.6+
Threshold supportFixed stop threshold (80 or 100% only)
Allowed stop values80 (enabled) or 100 (disabled)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=0   # dummy value
STOP_CHARGE_THRESH_BAT0=80

The threshold is stored in NVRAM and persists even if the battery is removed and reinserted.

6.14. Tuxedo

Applies to Tuxedo laptops with a Clevo ODM chassis only — not all Tuxedo models are supported.

Kernel driverclevo_acpi (out-of-tree — install tuxedo-drivers package)
TLP version1.9+
Threshold supportStart and stop
Start allowed values40, 50, 60, 70, 80, 95 (95 = hardware default)
Stop allowed values60, 70, 80, 90, 100 (100 = hardware default / off)

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=70
STOP_CHARGE_THRESH_BAT0=80

Only the specific values listed above are accepted — arbitrary percentages will not work.

Tuxedo models without a Clevo ODM chassis are unsupported. If tlp-stat -b shows Supported features: none available, do not file a TLP issue — contact Tuxedo to request kernel driver support.

6.15. System76

Kernel driversystem76_acpi (built-in, kernel 5.16+)
TLP version1.6+
Threshold supportStart and stop
Start range0–99 (0 = off; 90 = hardware default)
Stop range1–100 (100 = hardware default / off)

Applies to System76 laptops with open-source EC firmware only.

/etc/tlp.conf Sample Configuration:

START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80

Thresholds are reset to hardware defaults on EC reset (i.e. when AC is unplugged while the laptop is powered off). TLP will restore them on the next boot.

system76-power charge-thresholds is an alternative tool that also works on System76 hardware, but TLP is the recommended approach when already in use on the system.

7. Recommended Threshold Values

Usage PatternStart (%)Stop (%)Notes
Mostly plugged in7580Best for long-term battery health
Mixed use6080Good balance of runtime and longevity
Frequent travel7595Maximises runtime; modest longevity trade-off
Threshold disabled96100TLP default; equivalent to no threshold

For brands using a binary toggle (Samsung, LG, Lenovo non-ThinkPad), ignore this table and use STOP=1 to enable the fixed cap, or STOP=0 to disable it.

For Dell, the hardware enforces start = stop − 5, so a stop of 80 automatically means a start of 75.

For MSI, the hardware enforces start = stop − 10, so a stop of 80 automatically means a start of 70.

8. Applying, Verifying, and Temporary Changes

8.1. Apply permanently

After editing /etc/tlp.conf (or a file in /etc/tlp.d/), apply the settings:

sudo tlp start

8.2. Verify thresholds are active

You should see something like:

Charge start threshold : 75 [%] Charge stop threshold : 80 [%]

You can also read values directly from sysfs (where supported):

cat /sys/class/power_supply/BAT0/charge_control_start_threshold
cat /sys/class/power_supply/BAT0/charge_control_end_threshold

8.3. Apply thresholds temporarily (without editing config)

Use tlp setcharge to test values for the current session. They revert on the next boot:

sudo tlp setcharge 60 80 BAT0    # sets 60/80 on BAT0 temporarily
sudo tlp setcharge # restores values from config file

tlp setcharge also validates your values and reports errors before applying, making it a safe way to test a configuration.

8.4. Need a full charge before a long trip?

sudo tlp fullcharge              # temporarily charges BAT0 to 100%

Your configured thresholds are automatically restored on the next boot, or by running sudo tlp setcharge without arguments.

8.5. Charge to stop threshold once (without going to 100%)

sudo tlp chargeonce              # charges BAT0 up to the stop threshold
sudo tlp chargeonce BAT1 # charges BAT1 up to its stop threshold

Useful if you want to top up to your configured limit after a deep discharge, without triggering a full charge. Configured thresholds are restored on the next boot.

8.6. Force-discharge the battery while on AC power

sudo tlp discharge BAT0          # fully discharges BAT0 while plugged in
sudo tlp discharge BAT0 50 # discharges BAT0 down to 50% (TLP 1.8+)

The command shows remaining capacity and estimated time. Discharge can be stopped at any time with Ctrl+C. The laptop remains fully usable during the process and will not suddenly shut off when empty — charging begins automatically once the battery is empty.

Requires AC power to be connected.

9. Frequently Asked Questions (FAQ)

Q: Does TLP work on HP or Acer laptops?

A: HP and Acer are not currently supported by TLP battery care. Run sudo tlp-stat -b command. If it shows Supported features: none available, TLP cannot set thresholds on your hardware.

Q: Will thresholds survive a reboot or power-off?

A: Yes, on most hardware. TLP writes thresholds into the EC firmware, which persists across reboots and even when the laptop is fully powered off. The exceptions are ASUS (resets on power-on, TLP restores at boot) and some Lenovo non-ThinkPad models that ignore the setting altogether.

Q: Can I set thresholds without TLP?

A: Yes, by writing directly to sysfs (root required, does not persist across reboots):

sudo sh -c "echo 75 > /sys/class/power_supply/BAT0/charge_control_start_threshold"
sudo sh -c "echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold"


TLP handles persistence automatically, which is why it's the recommended approach.

Q: Is there a GUI option for TLP?

A: For GNOME users, the Battery Health Charging GNOME Shell extension adds a toggle in the system status menu. It uses the same kernel interfaces as TLP. Check the extension's device compatibility list before installing.

Q: Does the stop threshold reduce battery runtime?

A: No. The stop threshold only limits how full the battery charges and has no impact on runtime while on battery. The start threshold is what matters for runtime: a lower start threshold means the battery may have discharged further before charging resumes, so you may sometimes unplug with less charge. Use tlp fullcharge before a long trip if needed.

Q: My thinkpad has two batteries. Do I need to configure both?

A: Yes, if you want thresholds on both. The main battery is usually BAT0, the UltraBay/slice battery is BAT1. Use the BAT1 variants of the parameters for the secondary battery.

10. Troubleshooting

Issue 1. Supported features: none available

Solution: Your hardware or kernel driver does not support charge thresholds via TLP. Check the Driver usage section of sudo tlp-stat -b. If all drivers show inactive or not available, your laptop model is unsupported by TLP battery care.

Issue 2. Thresholds configured but not applying

Solution:

  1. Check the required kernel driver is loaded: lsmod | grep <driver> (e.g. thinkpad_acpi, asus_wmi, dell_laptop)
  2. Check TLP service is running: sudo systemctl status tlp
  3. Check for conflicting power managers: systemctl status power-profiles-daemon laptop-mode

Issue 3. Dell: thresholds show as (not available)

Solution: You need kernel 6.12 or newer. Dell charge threshold support is not available in earlier kernels.

Issue 4. ASUS: threshold doesn't take effect

Solution: Try setting the stop threshold to exactly 40, 60, or 80 — some ASUS models only accept these three values.

Issue 5. ASUS: threshold not set at boot

Solution: Add the asus_wmi module to Initramfs so it loads earlier in the boot sequence. The procedure varies by distro — see the Arch Wiki or TLP's ASUS FAQ.

Issue 6. LG Gram: threshold stopped working after kernel update

Solution: A regression in kernel 6.9 breaks lg_laptop. Upgrade to 6.10.7 or later.

Issue 7. MSI: Supported features: none available

Solution: The msi_ec driver only supports specific MSI models and BIOS versions. This is a driver issue, not a TLP issue. File a report at msi-ec on GitHub.

Issue 8. Lenovo IdeaPad: conservation mode ignored

Solution: Some IdeaPad/Legion models do not honour the conservation mode setting at all — this is a hardware/firmware limitation that TLP cannot work around.

Issue 9. TLP breaks GNOME Power Mode selector

Solution: Installing TLP disables power-profiles-daemon, which removes the Power Mode option from GNOME Settings. Install the optional tlp-pd package and enable its service to restore it:

# Ubuntu/Debian
sudo apt install tlp-pd
sudo systemctl enable --now tlp-pd.service

# Fedora
sudo dnf install tlp-pd
sudo systemctl enable --now tlp-pd.service

# Arch
sudo pacman -S tlp-pd
sudo systemctl enable --now tlp-pd.service

Recommended Read:


Conclusion

Charge thresholds are one of those Linux advantages that Windows and macOS users simply don't have at this level of control. TLP makes it accessible for every major laptop brand — no scripts, no cron jobs, no manual effort after setup.

Battery charge thresholds are also one of the simplest things you can do to extend your laptop's battery lifespan on Linux. With TLP handling persistence at the hardware level, the fix takes under five minutes and works silently in the background from that point on. Set it once, verify it with tlp-stat -b, and forget about it.

If this guide helped you, consider sharing it with someone still charging their laptop to 100% every night.

Resources:

You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More