mt76x2: convert between per-chain tx power and combined output
authorFelix Fietkau <nbd@nbd.name>
Thu, 14 Dec 2017 15:39:12 +0000 (16:39 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 8 Jan 2018 17:25:51 +0000 (19:25 +0200)
Using both chains adds max. 3 dBm. A similar worst-case calculation is
being used in ath9k as well to ensure that the hardware stays within
regulatory limits

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mediatek/mt76/mt76x2_init.c
drivers/net/wireless/mediatek/mt76/mt76x2_main.c

index 0755b45..3e3a01b 100644 (file)
@@ -785,6 +785,9 @@ mt76x2_init_txpower(struct mt76x2_dev *dev,
                chan->max_power = mt76x2_get_max_rate_power(&t) +
                                  target_power;
                chan->max_power /= 2;
+
+               /* convert to combined output power on 2x2 devices */
+               chan->max_power += 3;
        }
 }
 
index a6936b9..f74b819 100644 (file)
@@ -155,6 +155,9 @@ mt76x2_config(struct ieee80211_hw *hw, u32 changed)
        if (changed & IEEE80211_CONF_CHANGE_POWER) {
                dev->txpower_conf = hw->conf.power_level * 2;
 
+               /* convert to per-chain power for 2x2 devices */
+               dev->txpower_conf -= 6;
+
                if (test_bit(MT76_STATE_RUNNING, &dev->mt76.state)) {
                        mt76x2_phy_set_txpower(dev);
                        mt76x2_tx_set_txpwr_auto(dev, dev->txpower_conf);
@@ -437,6 +440,10 @@ mt76x2_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int *dbm)
        struct mt76x2_dev *dev = hw->priv;
 
        *dbm = dev->txpower_cur / 2;
+
+       /* convert from per-chain power to combined output on 2x2 devices */
+       *dbm += 3;
+
        return 0;
 }