mt76: mt7915: fix txpower init for TSSI off chips
authorShayne Chen <shayne.chen@mediatek.com>
Thu, 1 Apr 2021 02:31:29 +0000 (10:31 +0800)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:03:06 +0000 (00:03 +0200)
Fix incorrect txpower init value for TSSI off chips which causes
too small txpower.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c

index 660398ac53c24db23622cb47cdc45a70e0eac021..738ecf8f4fa2f218e5a99c2533fe4941011a33ff 100644 (file)
@@ -124,7 +124,7 @@ int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
                                   struct ieee80211_channel *chan,
                                   u8 chain_idx)
 {
-       int index;
+       int index, target_power;
        bool tssi_on;
 
        if (chain_idx > 3)
@@ -133,15 +133,22 @@ int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
        tssi_on = mt7915_tssi_enabled(dev, chan->band);
 
        if (chan->band == NL80211_BAND_2GHZ) {
-               index = MT_EE_TX0_POWER_2G + chain_idx * 3 + !tssi_on;
+               index = MT_EE_TX0_POWER_2G + chain_idx * 3;
+               target_power = mt7915_eeprom_read(dev, index);
+
+               if (!tssi_on)
+                       target_power += mt7915_eeprom_read(dev, index + 1);
        } else {
-               int group = tssi_on ?
-                           mt7915_get_channel_group(chan->hw_value) : 8;
+               int group = mt7915_get_channel_group(chan->hw_value);
+
+               index = MT_EE_TX0_POWER_5G + chain_idx * 12;
+               target_power = mt7915_eeprom_read(dev, index + group);
 
-               index = MT_EE_TX0_POWER_5G + chain_idx * 12 + group;
+               if (!tssi_on)
+                       target_power += mt7915_eeprom_read(dev, index + 8);
        }
 
-       return mt7915_eeprom_read(dev, index);
+       return target_power;
 }
 
 static const u8 sku_cck_delta_map[] = {