Skip to content

DEVICES_TO_DISABLE_ON_BAT applies to both balanced and power-saver profiles; no DEVICES_TO_DISABLE_ON_SAV exists #891

Description

@dusklinux

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

  1. Occurs on both AC and battery.
  2. Set DEVICES_TO_DISABLE_ON_BAT="bluetooth" in /etc/tlp.conf.
  3. Run sudo tlp bat — Bluetooth turns off (expected per config).
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions