Table of Contents
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.serviceThis 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 replacespower-profiles-daemonwhile 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.confdirectly, 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.confhas 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 driver | thinkpad_acpi (built-in, loads automatically) |
| TLP version | Any |
| Threshold support | Start and stop |
| Start range | 0–99 (0 = off; 96 = hardware default) |
| Stop range | 1–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 drivers | thinkpad_acpi (built-in) + tp_smapi (out-of-tree, must be installed separately) |
| TLP version | Any |
| Threshold support | Start and stop |
| Start range | 2–96 (96 = hardware default) |
| Stop range | 6–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 driver | ideapad_laptop (built-in) |
| TLP version | 1.4+ |
| Threshold support | Fixed stop threshold via battery conservation mode (toggle only) |
| Values | 1 = 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 -bafter applying to confirm it worked.
6.4. ASUS
| Kernel driver | asus_wmi (built-in, kernel 5.4+) |
| TLP version | 1.4+ |
| Threshold support | Stop only |
| Range | 1–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_wmito the Initramfs fixes this (see Arch Wiki link given at the end).
6.5. Dell
| Kernel driver | dell_laptop (built-in, kernel 6.12+) |
| TLP version | 1.8+ |
| Threshold support | Start and stop |
| Start range | 50–95 (95 = hardware default); hardware enforces start = stop − 5 |
| Stop range | 55–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 -breports 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 driver | huawei_wmi (built-in, kernel 5.4+) |
| TLP version | 1.4+ |
| Threshold support | Start and stop |
| Start range | 0–99 (0 = hardware default / off) |
| Stop range | 1–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_BAT0applies to all Huawei batteries.
6.7. LG Gram
| Kernel driver | lg_laptop (built-in) |
| TLP version | 1.4+ |
| Threshold support | Fixed stop threshold via battery care limit (toggle only) |
| Values | 1 = 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.
1enables the 80% cap;0disables 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 driver | msi_ec (built-in, kernel 6.3+) |
| TLP version | 1.7+ |
| Threshold support | Start and stop; hardware enforces start = stop − 10 |
| Stop range | 10–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_ecdriver only supports specific MSI models and BIOS versions. Iftlp-stat -bshowsSupported features: none availableon an MSI laptop, the issue is with themsi_ecdriver, not TLP — open an issue at the msi-ec GitHub repository.
6.9. Samsung
| Kernel driver | samsung_laptop (built-in) |
| TLP version | 1.4+ |
| Threshold support | Fixed stop threshold via battery life extender (toggle only) |
| Values | 1 = 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.
1caps charging at 80%;0disables the cap.
6.10. Apple Silicon Macbooks (Asahi Linux)
| Kernel driver | macsmc_power (Asahi Linux kernel 6.3+) |
| TLP version | 1.7+ |
| Threshold support | Stop only; hardware auto-sets start threshold |
| Stop values | 80 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%. WhenSTOP=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 driver | cros_charge-control (built-in, kernel 6.12+; possibly 6.17 for Framework) |
| TLP version | 1.8+ |
| Threshold support | Stop (EC firmware v2); Start + Stop (EC firmware v3) |
| Start range | 0–99 (0 = hardware default / off) |
| Stop range | 1–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=1must 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 driver | sony_laptop (built-in) |
| TLP version | 1.5+ |
| Threshold support | Stop only |
| Allowed stop values | 50, 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 driver | toshiba_laptop (built-in, kernel 6.0+) |
| TLP version | 1.6+ |
| Threshold support | Fixed stop threshold (80 or 100% only) |
| Allowed stop values | 80 (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 driver | clevo_acpi (out-of-tree — install tuxedo-drivers package) |
| TLP version | 1.9+ |
| Threshold support | Start and stop |
| Start allowed values | 40, 50, 60, 70, 80, 95 (95 = hardware default) |
| Stop allowed values | 60, 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 -bshowsSupported features: none available, do not file a TLP issue — contact Tuxedo to request kernel driver support.
6.15. System76
| Kernel driver | system76_acpi (built-in, kernel 5.16+) |
| TLP version | 1.6+ |
| Threshold support | Start and stop |
| Start range | 0–99 (0 = off; 90 = hardware default) |
| Stop range | 1–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-thresholdsis 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 Pattern | Start (%) | Stop (%) | Notes |
|---|---|---|---|
| Mostly plugged in | 75 | 80 | Best for long-term battery health |
| Mixed use | 60 | 80 | Good balance of runtime and longevity |
| Frequent travel | 75 | 95 | Maximises runtime; modest longevity trade-off |
| Threshold disabled | 96 | 100 | TLP default; equivalent to no threshold |
For brands using a binary toggle (Samsung, LG, Lenovo non-ThinkPad), ignore this table and use
STOP=1to enable the fixed cap, orSTOP=0to 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 setchargealso 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)
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.
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.
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.
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.
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.
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:
- Check the required kernel driver is loaded:
lsmod | grep <driver>(e.g.thinkpad_acpi,asus_wmi,dell_laptop) - Check TLP service is running:
sudo systemctl status tlp - 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:
- Automatically Optimize CPU Speed And Power With Auto-cpufreq In Linux
- CPU Power Manager – Control And Manage CPU Frequency In Linux
- How To Check Laptop Battery Status And Level In Terminal In Linux
- How To Monitor Battery Level And Get Notifications On Linux Using battmon
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:
