mt76: mt7615: fix delta tx power for mt7663
authorLorenzo Bianconi <lorenzo@kernel.org>
Sun, 3 May 2020 15:30:53 +0000 (17:30 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 12 May 2020 17:52:34 +0000 (19:52 +0200)
Fix mt7663 eeprom definitions for delta tx power parsing

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h
drivers/net/wireless/mediatek/mt76/mt7615/init.c
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h

index 97f1733..6a5ae04 100644 (file)
@@ -225,6 +225,23 @@ int mt7615_eeprom_get_target_power_index(struct mt7615_dev *dev,
        return index;
 }
 
+int mt7615_eeprom_get_power_delta_index(struct mt7615_dev *dev,
+                                       enum nl80211_band band)
+{
+       /* assume the first rate has the highest power offset */
+       if (is_mt7663(&dev->mt76)) {
+               if (band == NL80211_BAND_2GHZ)
+                       return MT_EE_TX0_5G_G0_TARGET_POWER;
+               else
+                       return MT7663_EE_5G_RATE_POWER;
+       }
+
+       if (band == NL80211_BAND_2GHZ)
+               return MT_EE_2G_RATE_POWER;
+       else
+               return MT_EE_5G_RATE_POWER;
+}
+
 static void mt7615_apply_cal_free_data(struct mt7615_dev *dev)
 {
        static const u16 ical[] = {
index a497f04..40fed7a 100644 (file)
@@ -31,6 +31,7 @@ enum mt7615_eeprom_field {
        MT_EE_CALDATA_FLASH =                   0x052,
        MT_EE_TX0_2G_TARGET_POWER =             0x058,
        MT_EE_TX0_5G_G0_TARGET_POWER =          0x070,
+       MT7663_EE_5G_RATE_POWER =               0x089,
        MT_EE_TX1_5G_G0_TARGET_POWER =          0x098,
        MT_EE_2G_RATE_POWER =                   0x0be,
        MT_EE_5G_RATE_POWER =                   0x0d5,
index c6c1701..1d49d65 100644 (file)
@@ -222,17 +222,13 @@ void mt7615_init_txpower(struct mt7615_dev *dev,
                         struct ieee80211_supported_band *sband)
 {
        int i, n_chains = hweight8(dev->mphy.antenna_mask), target_chains;
+       int delta_idx, delta = mt76_tx_power_nss_delta(n_chains);
        u8 *eep = (u8 *)dev->mt76.eeprom.data;
        enum nl80211_band band = sband->band;
-       int delta = mt76_tx_power_nss_delta(n_chains);
        u8 rate_val;
 
-       /* assume the first rate has the highest power offset */
-       if (band == NL80211_BAND_2GHZ)
-               rate_val = eep[MT_EE_2G_RATE_POWER];
-       else
-               rate_val = eep[MT_EE_5G_RATE_POWER];
-
+       delta_idx = mt7615_eeprom_get_power_delta_index(dev, band);
+       rate_val = eep[delta_idx];
        if ((rate_val & ~MT_EE_RATE_POWER_MASK) ==
            (MT_EE_RATE_POWER_EN | MT_EE_RATE_POWER_SIGN))
                delta += rate_val & MT_EE_RATE_POWER_MASK;
index d28e638..dc60abb 100644 (file)
@@ -380,6 +380,8 @@ int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr);
 int mt7615_eeprom_get_target_power_index(struct mt7615_dev *dev,
                                         struct ieee80211_channel *chan,
                                         u8 chain_idx);
+int mt7615_eeprom_get_power_delta_index(struct mt7615_dev *dev,
+                                       enum nl80211_band band);
 int mt7615_wait_pdma_busy(struct mt7615_dev *dev);
 int mt7615_dma_init(struct mt7615_dev *dev);
 void mt7615_dma_cleanup(struct mt7615_dev *dev);