]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 May 2021 08:29:31 +0000 (10:29 +0200)
[ Upstream commit a226ccd04c479ccd23d6927c64bad1b441707f70 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c

index 7a2be3f61398e5b4f75f1488ef70e3b120464938..c3e32555cf242aab14fa1d88dd3219180b8f43b1 100644 (file)
@@ -114,7 +114,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)
@@ -123,15 +123,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[] = {