[PATCH ath-next v2] wifi: ath12k: add basic hwmon temperature reporting
Maharaja Kennadyrajan
quic_mkenna at quicinc.com
Thu Feb 19 03:45:44 PST 2026
On 2/19/2026 5:01 PM, Pablo MARTIN-GOMEZ wrote:
> Hello,
>
> On 19/02/2026 08:34, Maharaja Kennadyrajan wrote:
>> Add initial thermal support by wiring up a per-radio (pdev) hwmon
>> temperature
>> sensor backed by the existing WMI pdev temperature command and event.
>> When userspace reads the sysfs file temp1_input, the driver sends
>> WMI_PDEV_GET_TEMPERATURE_CMDID (tag WMI_TAG_PDEV_GET_TEMPERATURE_CMD)
>> and waits
>> for the corresponding WMI_PDEV_TEMPERATURE_EVENTID
>> (tag WMI_TAG_PDEV_TEMPERATURE_EVENT) to get the temperature and pdev_id.
>>
>> Export the reported value in millidegrees Celsius as required by hwmon.
>> The temperature reported is per-radio (pdev). In a multi-radio wiphy
>> under a
>> single phy, a separate hwmon device is created for each radio.
>>
>> Sample command and output:
>> $ cat /sys/devices/pci0000:00/.../ieee80211/phyX/hwmonY/temp1_input
>> $ 50000
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01243-QCAHKSWPL_SILICONZ-1
>> Tested-on: WCN7850 hw2.0 PCI
>> WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3
>>
>> Reported-by: kernel test robot <lkp at intel.com>
>> Closes:
>> https://lore.kernel.org/oe-kbuild-all/202602160145.YQdvbqYY-lkp@intel.com/
>> Co-developed-by: Aishwarya R <aishwarya.r at oss.qualcomm.com>
>> Signed-off-by: Aishwarya R <aishwarya.r at oss.qualcomm.com>
>> Signed-off-by: Maharaja Kennadyrajan
>> <maharaja.kennadyrajan at oss.qualcomm.com>
>> ---
>>
>> v2: Fixed the kernel test robot reported build test error.
>>
>> drivers/net/wireless/ath/ath12k/Makefile | 1 +
>> drivers/net/wireless/ath/ath12k/core.c | 13 +++
>> drivers/net/wireless/ath/ath12k/core.h | 3 +
>> drivers/net/wireless/ath/ath12k/mac.c | 5 +
>> drivers/net/wireless/ath/ath12k/thermal.c | 125 ++++++++++++++++++++++
>> drivers/net/wireless/ath/ath12k/thermal.h | 44 ++++++++
>> drivers/net/wireless/ath/ath12k/wmi.c | 57 +++++-----
>> 7 files changed, 217 insertions(+), 31 deletions(-)
>> create mode 100644 drivers/net/wireless/ath/ath12k/thermal.c
>> create mode 100644 drivers/net/wireless/ath/ath12k/thermal.h
>>
> [...]
>> +
>> +int ath12k_thermal_register(struct ath12k_base *ab)
>> +{
>> + struct ath12k *ar;
>> + int i, j, ret;
>> +
>> + if (!IS_REACHABLE(CONFIG_HWMON))
>> + return 0;
>> +
>> + for (i = 0; i < ab->num_radios; i++) {
>> + ar = ab->pdevs[i].ar;
>> + if (!ar)
>> + continue;
>> +
>> + ar->thermal.hwmon_dev =
>> + hwmon_device_register_with_groups(&ar->ah->hw->wiphy->dev,
>> + "ath12k_hwmon", ar,
>> + ath12k_hwmon_groups);
>> + if (IS_ERR(ar->thermal.hwmon_dev)) {
>> + ret = PTR_ERR(ar->thermal.hwmon_dev);
>> + ar->thermal.hwmon_dev = NULL;
>> + ath12k_err(ar->ab, "failed to register hwmon device: %d\n",
>> + ret);
>> + for (j = i - 1; j >= 0; j--) {
>> + ar = ab->pdevs[i].ar;
> Shouldn't it be `ar = ab->pdevs[j].ar;`?
My bad. It should by ab->pdev[j] not ab->pdev[i]. Will be addressed in
the next version.
>> + if (!ar)
>> + continue;
>> +
>> + hwmon_device_unregister(ar->thermal.hwmon_dev);
>> + ar->thermal.hwmon_dev = NULL;
>> + }
>> + return ret;
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>
> [...]
>
> Best regards,
>
> Pablo MG
>
>
More information about the ath12k
mailing list