Describe the bug
DEVICES_TO_DISABLE_ON_BAT is used for both the balanced (BAT) and power-saver (SAV) profiles. There is no DEVICES_TO_DISABLE_ON_SAV parameter — it does not exist in any source file, defaults.conf, or template. This makes it impossible to configure different radio device states for balanced vs. power-saver profiles, despite TLP having _ON_SAV fallback variants for virtually every other setting (CPU governor, energy policy, platform profile, PCIe ASPM, GPU frequencies, etc.).
Expected behavior
Following TLP's established convention for _ON_SAV parameters, DEVICES_TO_DISABLE_ON_SAV should be respected when the SAV profile is active, falling back to DEVICES_TO_DISABLE_ON_BAT when not set (for backward compatibility). This would allow users to differentiate device behavior between balanced and power-saver, e.g.:
DEVICES_TO_DISABLE_ON_BAT="" # Bluetooth stays on in balanced
DEVICES_TO_DISABLE_ON_SAV="bluetooth" # Bluetooth turns off in power-saver
To Reproduce
- Occurs on both AC and battery.
- Set
DEVICES_TO_DISABLE_ON_BAT="bluetooth" in /etc/tlp.conf.
- Run
sudo tlp bat — Bluetooth turns off (expected per config).
- Run
sudo tlp sav — Bluetooth also turns off (unexpected — user may want Bluetooth to stay on in balanced and only disable in power-saver).
Root cause
In /usr/share/tlp/func.d/30-tlp-func-rf-sw, line 427–430:
"$PP_BAL"|"$PP_SAV") # balanced/power-saver profile --> build disable list
quiet=1
devs2enable=""
devs2disable="${DEVICES_TO_DISABLE_ON_BAT:-}"
The PP_BAL and PP_SAV cases are combined in a single | branch and both read ${DEVICES_TO_DISABLE_ON_BAT:-}. Neither DEVICES_TO_DISABLE_ON_SAV nor DEVICES_TO_DISABLE_ON_SAV_NOT_IN_USE exist anywhere in the TLP source — not in defaults.conf, not in any function file, not in any config template. grep -r across the entire codebase returns zero matches for them.
The same applies to DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE on line 433 — also no SAV counterpart.
tlp-stat output (upload this to Gist and paste the link above)
Full tlp-stat output
--- TLP 1.10.1 --------------------------------------------
+++ Configured Settings:
/etc/tlp.conf L0004: TLP_ENABLE="1"
defaults.conf L0007: TLP_WARN_LEVEL="3"
defaults.conf L0008: TLP_MSG_COLORS="91 93 1 92"
/etc/tlp.conf L0005: TLP_AUTO_SWITCH="1"
/etc/tlp.conf L0006: TLP_PROFILE_AC="BAL"
/etc/tlp.conf L0007: TLP_PROFILE_BAT="SAV"
/etc/tlp.conf L0008: DISK_IDLE_SECS_ON_AC="0"
/etc/tlp.conf L0009: DISK_IDLE_SECS_ON_BAT="2"
/etc/tlp.conf L0010: MAX_LOST_WORK_SECS_ON_AC="30"
/etc/tlp.conf L0011: MAX_LOST_WORK_SECS_ON_BAT="300"
/etc/tlp.conf L0015: CPU_ENERGY_PERF_POLICY_ON_AC="performance"
/etc/tlp.conf L0016: CPU_ENERGY_PERF_POLICY_ON_BAT="balance_power"
/etc/tlp.conf L0017: CPU_ENERGY_PERF_POLICY_ON_SAV="power"
/etc/tlp.conf L0030: PLATFORM_PROFILE_ON_AC="performance"
/etc/tlp.conf L0031: PLATFORM_PROFILE_ON_BAT="balanced"
/etc/tlp.conf L0032: PLATFORM_PROFILE_ON_SAV="quiet"
defaults.conf L0022: NMI_WATCHDOG="0"
/etc/tlp.conf L0035: DISK_DEVICES="nvme-INTEL_SSDPEKNU512GZ_BTKA151410KY512A nvme-Samsung_SSD_980_1TB_S649NL0T857112D"
defaults.conf L0024: DISK_APM_LEVEL_ON_AC="254 254"
defaults.conf L0025: DISK_APM_LEVEL_ON_BAT="128 128"
defaults.conf L0026: DISK_APM_CLASS_DENYLIST="usb ieee1394"
/etc/tlp.conf L0036: DISK_IOSCHED="none none"
defaults.conf L0028: SATA_LINKPWR_ON_AC="med_power_with_dipm"
defaults.conf L0029: SATA_LINKPWR_ON_BAT="med_power_with_dipm"
/etc/tlp.conf L0037: AHCI_RUNTIME_PM_ON_AC="auto"
/etc/tlp.conf L0038: AHCI_RUNTIME_PM_ON_BAT="auto"
/etc/tlp.conf L0039: AHCI_RUNTIME_PM_TIMEOUT="10"
/etc/tlp.conf L0052: PCIE_ASPM_ON_AC="powersupersave"
/etc/tlp.conf L0053: PCIE_ASPM_ON_BAT="powersupersave"
/etc/tlp.conf L0054: PCIE_ASPM_ON_SAV="powersupersave"
defaults.conf L0036: INTEL_GPU_POWER_PROFILE_ON_AC="base"
defaults.conf L0037: INTEL_GPU_POWER_PROFILE_ON_BAT="power_saving"
defaults.conf L0038: INTEL_GPU_POWER_PROFILE_ON_SAV="power_saving"
defaults.conf L0039: RADEON_DPM_PERF_LEVEL_ON_AC="auto"
defaults.conf L0040: RADEON_DPM_PERF_LEVEL_ON_BAT="auto"
defaults.conf L0041: RADEON_DPM_PERF_LEVEL_ON_SAV="low"
defaults.conf L0042: AMDGPU_ABM_LEVEL_ON_AC="0"
defaults.conf L0043: AMDGPU_ABM_LEVEL_ON_BAT="1"
defaults.conf L0044: AMDGPU_ABM_LEVEL_ON_SAV="3"
/etc/tlp.conf L0049: WIFI_PWR_ON_AC="off"
/etc/tlp.conf L0050: WIFI_PWR_ON_BAT="on"
defaults.conf L0047: WOL_DISABLE="Y"
defaults.conf L0048: SOUND_POWER_SAVE_ON_AC="1"
defaults.conf L0049: SOUND_POWER_SAVE_ON_BAT="1"
/etc/tlp.conf L0051: SOUND_POWER_SAVE_CONTROLLER="Y"
defaults.conf L0051: BAY_POWEROFF_ON_AC="0"
defaults.conf L0052: BAY_POWEROFF_ON_BAT="0"
defaults.conf L0053: BAY_DEVICE="sr0"
/etc/tlp.conf L0055: RUNTIME_PM_ON_AC="auto"
/etc/tlp.conf L0056: RUNTIME_PM_ON_BAT="auto"
defaults.conf L0056: RUNTIME_PM_DRIVER_DENYLIST="amdgpu mei_me nouveau nvidia xhci_hcd"
/etc/tlp.conf L0057: USB_AUTOSUSPEND="1"
defaults.conf L0058: USB_EXCLUDE_AUDIO="1"
defaults.conf L0059: USB_EXCLUDE_BTUSB="0"
defaults.conf L0060: USB_EXCLUDE_PHONE="0"
defaults.conf L0061: USB_EXCLUDE_PRINTER="1"
defaults.conf L0062: USB_EXCLUDE_WWAN="0"
defaults.conf L0063: RESTORE_DEVICE_STATE_ON_STARTUP="0" #! Parameter is deprecated: feature will be removed with the next release
defaults.conf L0064: RESTORE_THRESHOLDS_ON_BAT="1"
defaults.conf L0065: NATACPI_ENABLE="1"
defaults.conf L0066: TPSMAPI_ENABLE="1"
/etc/tlp.conf L0012: CPU_SCALING_GOVERNOR_ON_AC="performance"
/etc/tlp.conf L0013: CPU_SCALING_GOVERNOR_ON_BAT="powersave"
/etc/tlp.conf L0014: CPU_SCALING_GOVERNOR_ON_SAV="powersave"
/etc/tlp.conf L0018: CPU_MIN_PERF_ON_AC="0"
/etc/tlp.conf L0019: CPU_MAX_PERF_ON_AC="100"
/etc/tlp.conf L0020: CPU_MIN_PERF_ON_BAT="0"
/etc/tlp.conf L0021: CPU_MAX_PERF_ON_BAT="50"
/etc/tlp.conf L0022: CPU_MIN_PERF_ON_SAV="0"
/etc/tlp.conf L0023: CPU_MAX_PERF_ON_SAV="30"
/etc/tlp.conf L0024: CPU_BOOST_ON_AC="1"
/etc/tlp.conf L0025: CPU_BOOST_ON_BAT="0"
/etc/tlp.conf L0026: CPU_BOOST_ON_SAV="0"
/etc/tlp.conf L0027: CPU_HWP_DYN_BOOST_ON_AC="1"
/etc/tlp.conf L0028: CPU_HWP_DYN_BOOST_ON_BAT="0"
/etc/tlp.conf L0029: CPU_HWP_DYN_BOOST_ON_SAV="0"
/etc/tlp.conf L0033: MEM_SLEEP_ON_AC="s2idle"
/etc/tlp.conf L0034: MEM_SLEEP_ON_BAT="s2idle"
/etc/tlp.conf L0040: INTEL_GPU_MIN_FREQ_ON_AC="100"
/etc/tlp.conf L0041: INTEL_GPU_MIN_FREQ_ON_BAT="100"
/etc/tlp.conf L0042: INTEL_GPU_MIN_FREQ_ON_SAV="100"
/etc/tlp.conf L0043: INTEL_GPU_MAX_FREQ_ON_AC="1200"
/etc/tlp.conf L0044: INTEL_GPU_MAX_FREQ_ON_BAT="200"
/etc/tlp.conf L0045: INTEL_GPU_MAX_FREQ_ON_SAV="200"
/etc/tlp.conf L0046: INTEL_GPU_BOOST_FREQ_ON_AC="1400"
/etc/tlp.conf L0047: INTEL_GPU_BOOST_FREQ_ON_BAT="400"
/etc/tlp.conf L0048: INTEL_GPU_BOOST_FREQ_ON_SAV="300"
/etc/tlp.conf L0058: DEVICES_TO_DISABLE_ON_BAT="bluetooth"
/etc/tlp.conf L0059: START_CHARGE_THRESH_BAT1="70"
/etc/tlp.conf L0060: STOP_CHARGE_THRESH_BAT1="75"
+++ System Info
System = ASUSTeK COMPUTER INC. 1.0 ASUS TUF Gaming F15 FX507ZE_FX507ZE
BIOS = American Megatrends International, LLC. FX507ZE.316
EC firmware = 3.7
OS release = Arch Linux
Kernel = 7.1.2-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 28 Jun 2026 00:15:00 +0000 x86_64
Init system = systemd 261
Boot mode = UEFI
Suspend mode = [s2idle] deep
+++ TLP Status
tlp = enabled, last run: 11:37:51 AM, 1434 sec(s) ago
tlp-rdw = enabled
tlp-pd = not installed
TLP profile = performance/AC
Power source = AC
+++ Processor
CPU model = 12th Gen Intel(R) Core(TM) i7-12700H
scaling_driver = intel_pstate
scaling_governor = performance
scaling_available_governors = performance powersave
intel_pstate/status = active
intel_pstate/hwp_dynamic_boost = 1
+++ Platform
platform_profile = performance
+++ Temperatures
CPU temp (coretemp) = 62 [C]
+++ Disks
nvme0n1: INTEL SSDPEKNU512GZ (67.3 TB written)
nvme1n1: Samsung SSD 980 1TB (81.7 TB written)
+++ Intel Graphics
i915: rc6_enabled, PSR1 enabled
+++ Wireless
bluetooth = on
wifi = on
hci0(btusb) : bluetooth, connected
wlan0(iwlwifi) : wifi, connected, power management = off
+++ Audio
snd_hda_intel power_save = 1
+++ PCIe
ASPM policy = powersupersave
Runtime PM autosuspend = enabled
+++ USB
Autosuspend = enabled
Exclude bluetooth = disabled
Bus 003 Device 004 ID 8087:0026 control = auto, autosuspend_delay_ms = 2000 -- Intel Corp. AX201 Bluetooth (btusb)
Additional context
- TLP version: 1.10.1
- Distribution: Arch Linux
- Kernel: 7.1.2-arch1-1
- Laptop: ASUS TUF Gaming F15 FX507ZE
A minimal fix is to split the combined case so SAV reads its own variable with BAT as fallback:
"$PP_BAL") # balanced profile
quiet=1
devs2enable=""
devs2disable="${DEVICES_TO_DISABLE_ON_BAT:-}"
for dev in ${DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE:-}; do
{ case $dev in
bluetooth) any_bluetooth_in_use ;;
nfc) any_nfc_in_use ;;
wifi) any_wifi_in_use ;;
wwan) any_wwan_in_use ;;
esac } || wordinlist "$dev" "$devs2disable" || devs2disable="$dev $devs2disable"
done
devs2disable="${devs2disable# }"
;;
"$PP_SAV") # power-saver profile
quiet=1
devs2enable=""
devs2disable="${DEVICES_TO_DISABLE_ON_SAV:-${DEVICES_TO_DISABLE_ON_BAT:-}}"
for dev in ${DEVICES_TO_DISABLE_ON_SAV_NOT_IN_USE:-${DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE:-}}; do
{ case $dev in
bluetooth) any_bluetooth_in_use ;;
nfc) any_nfc_in_use ;;
wifi) any_wifi_in_use ;;
wwan) any_wwan_in_use ;;
esac } || wordinlist "$dev" "$devs2disable" || devs2disable="$dev $devs2disable"
done
devs2disable="${devs2disable# }"
;;
This preserves backward compatibility (if only DEVICES_TO_DISABLE_ON_BAT is set, both profiles use it) while allowing users to override for SAV when desired.
tlp-statoutputs via Gist (see below)Describe the bug
DEVICES_TO_DISABLE_ON_BATis used for both the balanced (BAT) and power-saver (SAV) profiles. There is noDEVICES_TO_DISABLE_ON_SAVparameter — it does not exist in any source file,defaults.conf, or template. This makes it impossible to configure different radio device states for balanced vs. power-saver profiles, despite TLP having_ON_SAVfallback variants for virtually every other setting (CPU governor, energy policy, platform profile, PCIe ASPM, GPU frequencies, etc.).Expected behavior
Following TLP's established convention for
_ON_SAVparameters,DEVICES_TO_DISABLE_ON_SAVshould be respected when the SAV profile is active, falling back toDEVICES_TO_DISABLE_ON_BATwhen not set (for backward compatibility). This would allow users to differentiate device behavior between balanced and power-saver, e.g.:To Reproduce
DEVICES_TO_DISABLE_ON_BAT="bluetooth"in/etc/tlp.conf.sudo tlp bat— Bluetooth turns off (expected per config).sudo tlp sav— Bluetooth also turns off (unexpected — user may want Bluetooth to stay on in balanced and only disable in power-saver).Root cause
In
/usr/share/tlp/func.d/30-tlp-func-rf-sw, line 427–430:The
PP_BALandPP_SAVcases are combined in a single|branch and both read${DEVICES_TO_DISABLE_ON_BAT:-}. NeitherDEVICES_TO_DISABLE_ON_SAVnorDEVICES_TO_DISABLE_ON_SAV_NOT_IN_USEexist anywhere in the TLP source — not indefaults.conf, not in any function file, not in any config template.grep -racross the entire codebase returns zero matches for them.The same applies to
DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USEon line 433 — also no SAV counterpart.tlp-stat output (upload this to Gist and paste the link above)
Full tlp-stat output
Additional context
A minimal fix is to split the combined case so SAV reads its own variable with BAT as fallback:
This preserves backward compatibility (if only
DEVICES_TO_DISABLE_ON_BATis set, both profiles use it) while allowing users to override for SAV when desired.