OSDN Git Service

wifi: mt76: mt7915: rework mt7915_thermal_temp_store()
authorHoward Hsu <howard-yh.hsu@mediatek.com>
Wed, 14 Dec 2022 02:28:08 +0000 (10:28 +0800)
committerFelix Fietkau <nbd@nbd.name>
Fri, 3 Feb 2023 13:47:15 +0000 (14:47 +0100)
Call mt7915_mcu_set_thermal_protect() through
mt7915_thermal_temp_store() to update firmware trigger/restore temp
directly.

Fixes: 02ee68b95d81 ("mt76: mt7915: add control knobs for thermal throttling")
Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Howard Hsu <howard-yh.hsu@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/init.c
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h

index be435ae..0ab9e13 100644 (file)
@@ -83,9 +83,23 @@ static ssize_t mt7915_thermal_temp_store(struct device *dev,
 
        mutex_lock(&phy->dev->mt76.mutex);
        val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 60, 130);
+
+       if ((i - 1 == MT7915_CRIT_TEMP_IDX &&
+            val > phy->throttle_temp[MT7915_MAX_TEMP_IDX]) ||
+           (i - 1 == MT7915_MAX_TEMP_IDX &&
+            val < phy->throttle_temp[MT7915_CRIT_TEMP_IDX])) {
+               dev_err(phy->dev->mt76.dev,
+                       "temp1_max shall be greater than temp1_crit.");
+               return -EINVAL;
+       }
+
        phy->throttle_temp[i - 1] = val;
        mutex_unlock(&phy->dev->mt76.mutex);
 
+       ret = mt7915_mcu_set_thermal_protect(phy);
+       if (ret)
+               return ret;
+
        return count;
 }
 
@@ -195,8 +209,8 @@ static int mt7915_thermal_init(struct mt7915_phy *phy)
                return PTR_ERR(hwmon);
 
        /* initialize critical/maximum high temperature */
-       phy->throttle_temp[0] = 110;
-       phy->throttle_temp[1] = 120;
+       phy->throttle_temp[MT7915_CRIT_TEMP_IDX] = 110;
+       phy->throttle_temp[MT7915_MAX_TEMP_IDX] = 120;
 
        return 0;
 }
index 855779f..e58650b 100644 (file)
@@ -70,6 +70,9 @@
 
 #define MT7915_WED_RX_TOKEN_SIZE       12288
 
+#define MT7915_CRIT_TEMP_IDX           0
+#define MT7915_MAX_TEMP_IDX            1
+
 struct mt7915_vif;
 struct mt7915_sta;
 struct mt7915_dfs_pulse;