mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
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 Co-developed-by: Aishwarya R <aishwarya.r@oss.qualcomm.com> Signed-off-by: Aishwarya R <aishwarya.r@oss.qualcomm.com> Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com> Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Link: https://patch.msgid.link/20260223132622.43464-1-maharaja.kennadyrajan@oss.qualcomm.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
41 lines
982 B
C
41 lines
982 B
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/*
|
|
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
|
|
*/
|
|
|
|
#ifndef _ATH12K_THERMAL_
|
|
#define _ATH12K_THERMAL_
|
|
|
|
#define ATH12K_THERMAL_SYNC_TIMEOUT_HZ (5 * HZ)
|
|
|
|
struct ath12k_thermal {
|
|
struct completion wmi_sync;
|
|
|
|
/* temperature value in Celsius degree protected by data_lock. */
|
|
int temperature;
|
|
struct device *hwmon_dev;
|
|
};
|
|
|
|
#if IS_REACHABLE(CONFIG_THERMAL)
|
|
int ath12k_thermal_register(struct ath12k_base *ab);
|
|
void ath12k_thermal_unregister(struct ath12k_base *ab);
|
|
void ath12k_thermal_event_temperature(struct ath12k *ar, int temperature);
|
|
#else
|
|
static inline int ath12k_thermal_register(struct ath12k_base *ab)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void ath12k_thermal_unregister(struct ath12k_base *ab)
|
|
{
|
|
}
|
|
|
|
static inline void ath12k_thermal_event_temperature(struct ath12k *ar,
|
|
int temperature)
|
|
{
|
|
}
|
|
|
|
#endif
|
|
#endif /* _ATH12K_THERMAL_ */
|