TLP icon indicating copy to clipboard operation
TLP copied to clipboard

[Thinkpad X13s ARM] Broken charging state detection with qcom_battmgr driver

Open tamara-schmitz opened this issue 5 months ago • 7 comments

Describe the bug

TLP reports to be in battery mode regardless whether the device is charging via USB-C or not. It appears that only power supply qcom-battmgr-ac is checked which does not exist as a port on the laptop instead of the USB-C charging port qcom-battmgr-usb.

Expected behavior

TLP properly detects whether the battery is charging or not by checking both power supply classes.

To Reproduce

The device in question is the Lenovo Thinkpad X13s with a Qualcomm Snapdragon 8cx Gen 3 platform. It can only be charged via USB-C. The power supply kernel driver is the qcom_battmgr.

OS: openSUSE Tumbleweed 20240902 Kernel: 6.10.5-1-default TLP: 1.6.1-2.1

Other applications can report the charging state just fine.

Additional context

Checking the battery and state with tlp and tlp-stat -b

$ tlp-stat -b
--- TLP 1.6.1 --------------------------------------------

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

+++ Battery Status: qcom-battmgr-bat
/sys/class/power_supply/qcom-battmgr-bat/manufacturer       =SMP
/sys/class/power_supply/qcom-battmgr-bat/model_name         = LNV-5B10W51878
/sys/class/power_supply/qcom-battmgr-bat/cycle_count        =     75
/sys/class/power_supply/qcom-battmgr-bat/energy_full_design =  49530 [mWh]
/sys/class/power_supply/qcom-battmgr-bat/energy_full        =  48800 [mWh]
/sys/class/power_supply/qcom-battmgr-bat/energy_now         =  40504 [mWh]
/sys/class/power_supply/qcom-battmgr-bat/power_now          =  32509 [mW]
/sys/class/power_supply/qcom-battmgr-bat/status             = Charging

/sys/class/power_supply/qcom-battmgr-bat/charge_control_start_threshold = (not available)
/sys/class/power_supply/qcom-battmgr-bat/charge_control_end_threshold = (not available)

Charge                                                      =   83.0 [%]
Capacity                                                    =   98.5 [%]

$ tlp start
TLP started in battery mode (auto).

Some sysfs files:

$ ls /sys/class/power_supply/
qcom-battmgr-ac  qcom-battmgr-bat  qcom-battmgr-usb  qcom-battmgr-wls

# on USB-C charging
$ cat /sys/class/power_supply/qcom-battmgr-ac/online
0
$ cat /sys/class/power_supply/qcom-battmgr-bat/status
Charging
$ cat /sys/class/power_supply/qcom-battmgr-usb/online
1
$ cat /sys/class/power_supply/qcom-battmgr-wls/online
0

# on battery
$ cat /sys/class/power_supply/qcom-battmgr-ac/online
0
$ cat /sys/class/power_supply/qcom-battmgr-bat/status
Discharging
$ cat /sys/class/power_supply/qcom-battmgr-usb/online
0
$ cat /sys/class/power_supply/qcom-battmgr-wls/online
0

TLP trace:

--- TLP 1.6.1 --------------------------------------------

Sep 03 16:50:59 fridayaxe tlp[1961]: Applying power save settings...done.
Sep 03 16:50:59 fridayaxe tlp[1961]: Setting battery charge thresholds...done.
Sep 03 18:50:09 fridayaxe tlp[116491]: TLP started in battery mode (auto).
Sep 03 18:54:24 fridayaxe tlp[120281]: parse_args4config: tlp-stat -T --
Sep 03 18:54:35 fridayaxe tlp[120370]: parse_args4config: tlp start --
Sep 03 18:54:35 fridayaxe tlp[120370]: +++ start (1.6.1) ++++++++++++++++++++++++++++++++++++++++
Sep 03 18:54:35 fridayaxe tlp[120370]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Sep 03 18:54:35 fridayaxe tlp[120370]: SHELL=/usr/bin/bash; umask=0022
Sep 03 18:54:35 fridayaxe tlp[120370]: get_sys_power_supply(qcom-battmgr-ac).ac_offline: syspwr=1
Sep 03 18:54:35 fridayaxe tlp[120370]: clear_manual_mode
Sep 03 18:54:35 fridayaxe tlp[120370]: power_source=bat
Sep 03 18:54:35 fridayaxe tlp[120370]: manual_mode=none
Sep 03 18:54:35 fridayaxe tlp[120370]: power_mode=bat
Sep 03 18:54:35 fridayaxe tlp[120370]: lock_tlp().success
Sep 03 18:54:35 fridayaxe tlp[120370]: compare_and_save_power_state(1).equal
Sep 03 18:54:35 fridayaxe tlp[120370]: set_laptopmode(1): 2; rc=0
Sep 03 18:54:35 fridayaxe tlp[120370]: set_dirty_parms(1): 6000; ec=0
Sep 03 18:54:35 fridayaxe tlp[120370]: set_platform_profile(1).not_configured
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_driver_opmode(1).not_configured
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_scaling_governor(1): schedutil; ec=0
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_scaling_min_max_freq(1).not_configured
Sep 03 18:54:35 fridayaxe tlp[120370]: set_intel_cpu_perf_pct(1).no_intel_pstate
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_boost_all(1).not_configured
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_dyn_boost(1).not_configured
Sep 03 18:54:35 fridayaxe tlp[120370]: set_cpu_perf_policy(1).epp.unsupported_cpu
Sep 03 18:54:36 fridayaxe tlp[120370]: set_cpu_perf_policy(1).epb.unsupported_cpu
Sep 03 18:54:36 fridayaxe tlp[120370]: set_nmi_watchdog.disabled_by_kernel: 0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_mem_sleep(1).rejected_by_kernel
Sep 03 18:54:36 fridayaxe tlp[120370]: set_ahci_port_runtime_pm(1).no-port
Sep 03 18:54:36 fridayaxe tlp[120370]: set_runtime_pm(1).auto: /sys/bus/pci/devices/0002:00:00.0 [0x060400]; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_runtime_pm(1).auto: /sys/bus/pci/devices/0002:01:00.0 [0x010802]; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_runtime_pm(1).auto: /sys/bus/pci/devices/0006:00:00.0 [0x060400]; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_runtime_pm(1).auto: /sys/bus/pci/devices/0006:01:00.0 [0x028000]; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: *** set_ahci_disk_runtime_pm(1).all
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(nvme0n1): dev=nvme0n1; id=nvme-KBG5AZNT512G_LA_KIOXIA_62EPG67LQJX6; type=nvme; path=platform-1c20000.pcie-pci-0002:01:00.0-nvme-1; bus=; dpath=nvme0n1; apm=0; mq=1; runpm=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_ahci_disk_runtime_pm(1).auto: disk=nvme0n1 timeout=15000; rc=1
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(sda).missing
Sep 03 18:54:36 fridayaxe tlp[120370]: set_sata_link_power(1).not_available
Sep 03 18:54:36 fridayaxe tlp[120370]: *** set_disk_apm_level(1).all
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(nvme0n1): dev=nvme0n1; id=nvme-KBG5AZNT512G_LA_KIOXIA_62EPG67LQJX6; type=nvme; path=platform-1c20000.pcie-pci-0002:01:00.0-nvme-1; bus=; dpath=nvme0n1; apm=0; mq=1; runpm=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_disk_apm_level(1): nvme0n1 [nvme-KBG5AZNT512G_LA_KIOXIA_62EPG67LQJX6] 128; not supported
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(sda).missing
Sep 03 18:54:36 fridayaxe tlp[120370]: set_disk_spindown_timeout(1).not_configured
Sep 03 18:54:36 fridayaxe tlp[120370]: *** set_disk_iosched(1).all
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(nvme0n1): dev=nvme0n1; id=nvme-KBG5AZNT512G_LA_KIOXIA_62EPG67LQJX6; type=nvme; path=platform-1c20000.pcie-pci-0002:01:00.0-nvme-1; bus=; dpath=nvme0n1; apm=0; mq=1; runpm=0
Sep 03 18:54:36 fridayaxe tlp[120370]: set_disk_iosched: nvme0n1 [nvme-KBG5AZNT512G_LA_KIOXIA_62EPG67LQJX6] keep; keep as is
Sep 03 18:54:36 fridayaxe tlp[120370]: get_disk_dev(sda).missing
Sep 03 18:54:36 fridayaxe tlp[120370]: set_pcie_aspm(1): powersave
Sep 03 18:54:36 fridayaxe tlp[120370]: set_intel_gpu_min_max_boost_freq(1).not_configured
Sep 03 18:54:36 fridayaxe tlp[120370]: set_amdgpu_profile(1).no_gpu
Sep 03 18:54:36 fridayaxe tlp[120370]: set_wifi_power_mode(1, wlP6p1s0).iw: on; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: poweroff_drivebay(1).disabled
Sep 03 18:54:36 fridayaxe tlp[120370]: usb_suspend_device.batch.auto.no_change: Bus 1 Dev 1 ID 1d6b:0002 /sys/bus/usb/devices/usb1 []
Sep 03 18:54:36 fridayaxe tlp[120370]: usb_suspend_device.batch.auto.no_change: Bus 2 Dev 1 ID 1d6b:0003 /sys/bus/usb/devices/usb2 []
Sep 03 18:54:36 fridayaxe tlp[120370]: usb_suspend_device.batch.auto.no_change: Bus 3 Dev 1 ID 1d6b:0002 /sys/bus/usb/devices/usb3 []
Sep 03 18:54:36 fridayaxe tlp[120370]: usb_suspend_device.batch.auto.no_change: Bus 4 Dev 1 ID 1d6b:0003 /sys/bus/usb/devices/usb4 []
Sep 03 18:54:36 fridayaxe tlp[120370]: set_usb_suspend.done
Sep 03 18:54:36 fridayaxe tlp[120370]: set_run_flag.touch: usb_done; rc=0
Sep 03 18:54:36 fridayaxe tlp[120370]: check_thinkpad.not_a_thinkpad: model=ThinkPad X13s Gen 1
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.thinkpad.not_a_thinkpad
Sep 03 18:54:36 fridayaxe tlp[120370]: check_thinkpad.not_a_thinkpad: model=ThinkPad X13s Gen 1
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.thinkpad-legacy.not_a_thinkpad
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.asus.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.huawei.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.lenovo.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.samsung.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.lg.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.lg-legacy.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.sony.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.system76.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.toshiba.no_match
Sep 03 18:54:36 fridayaxe tlp[120370]: batdrv_init.generic: batteries=qcom-battmgr-bat
Sep 03 18:54:36 fridayaxe tlp[120370]: set_charge_thresholds.no_method
Sep 03 18:54:36 fridayaxe tlp[120370]: set_radio_device_states(1): enable= disable=
Sep 03 18:54:36 fridayaxe tlp[120370]: save_runconf.ok: /run/tlp/tlp-run.conf_tmpDnzKaP -> /run/tlp/run.conf
Sep 03 18:54:36 fridayaxe tlp[120370]: unlock_tlp()
Sep 03 18:54:36 fridayaxe tlp[120370]: TLP started in battery mode (auto).
Sep 03 18:54:37 fridayaxe tlp[120628]: parse_args4config: tlp-stat -T --

tamara-schmitz avatar Sep 03 '24 19:09 tamara-schmitz