}
 }
 
-int mt7615_eeprom_get_power_index(struct ieee80211_channel *chan,
+int mt7615_eeprom_get_power_index(struct mt7615_dev *dev,
+                                 struct ieee80211_channel *chan,
                                  u8 chain_idx)
 {
        int index;
        if (chain_idx > 3)
                return -EINVAL;
 
+       /* TSSI disabled */
+       if (mt7615_ext_pa_enabled(dev, chan->band)) {
+               if (chan->band == NL80211_BAND_2GHZ)
+                       return MT_EE_EXT_PA_2G_TARGET_POWER;
+               else
+                       return MT_EE_EXT_PA_5G_TARGET_POWER;
+       }
+
+       /* TSSI enabled */
        if (chan->band == NL80211_BAND_2GHZ) {
                index = MT_EE_TX0_2G_TARGET_POWER + chain_idx * 6;
        } else {
 
        MT_EE_VERSION =                         0x002,
        MT_EE_MAC_ADDR =                        0x004,
        MT_EE_NIC_CONF_0 =                      0x034,
+       MT_EE_NIC_CONF_1 =                      0x036,
        MT_EE_WIFI_CONF =                       0x03e,
        MT_EE_TX0_2G_TARGET_POWER =             0x058,
        MT_EE_TX0_5G_G0_TARGET_POWER =          0x070,
        MT_EE_TX1_5G_G0_TARGET_POWER =          0x098,
+       MT_EE_EXT_PA_2G_TARGET_POWER =          0x0f2,
+       MT_EE_EXT_PA_5G_TARGET_POWER =          0x0f3,
        MT_EE_TX2_5G_G0_TARGET_POWER =          0x142,
        MT_EE_TX3_5G_G0_TARGET_POWER =          0x16a,
 
        __MT_EE_MAX =                           0x3bf
 };
 
+#define MT_EE_NIC_CONF_TSSI_2G                 BIT(5)
+#define MT_EE_NIC_CONF_TSSI_5G                 BIT(6)
+
 #define MT_EE_NIC_WIFI_CONF_BAND_SEL           GENMASK(5, 4)
 enum mt7615_eeprom_band {
        MT_EE_DUAL_BAND,
        return MT_CH_5G_UNII_3;
 }
 
+static inline bool
+mt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band)
+{
+       u8 *eep = dev->mt76.eeprom.data;
+
+       if (band == NL80211_BAND_5GHZ)
+               return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G);
+       else
+               return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G);
+}
+
 #endif
 
 #include <linux/etherdevice.h>
 #include "mt7615.h"
 #include "mac.h"
+#include "eeprom.h"
 
 static void mt7615_phy_init(struct mt7615_dev *dev)
 {
 mt7615_init_txpower(struct mt7615_dev *dev,
                    struct ieee80211_supported_band *sband)
 {
-       int i, n_chains = hweight8(dev->mt76.antenna_mask);
+       int i, n_chains = hweight8(dev->mt76.antenna_mask), target_chains;
        u8 *eep = (u8 *)dev->mt76.eeprom.data;
+       enum nl80211_band band = sband->band;
 
+       target_chains = mt7615_ext_pa_enabled(dev, band) ? 1 : n_chains;
        for (i = 0; i < sband->n_channels; i++) {
                struct ieee80211_channel *chan = &sband->channels[i];
                u8 target_power = 0;
                int j;
 
-               for (j = 0; j < n_chains; j++) {
+               for (j = 0; j < target_chains; j++) {
                        int index;
 
-                       index = mt7615_eeprom_get_power_index(chan, j);
+                       index = mt7615_eeprom_get_power_index(dev, chan, j);
                        target_power = max(target_power, eep[index]);
                }
 
 
 {
        int i, ret, n_chains = hweight8(dev->mt76.antenna_mask);
        struct cfg80211_chan_def *chandef = &dev->mt76.chandef;
+       int freq = chandef->center_freq1, len, target_chains;
        u8 *req, *data, *eep = (u8 *)dev->mt76.eeprom.data;
+       enum nl80211_band band = chandef->chan->band;
        struct ieee80211_hw *hw = mt76_hw(dev);
-       int freq = chandef->center_freq1, len;
        struct {
                u8 center_chan;
                u8 dbdc_idx;
                u8 rsv;
        } __packed req_hdr = {
                .center_chan = ieee80211_frequency_to_channel(freq),
-               .band = chandef->chan->band,
+               .band = band,
        };
        s8 tx_power;
 
        tx_power = max_t(s8, tx_power, 0);
        dev->mt76.txpower_cur = tx_power;
 
-       for (i = 0; i < n_chains; i++) {
+       target_chains = mt7615_ext_pa_enabled(dev, band) ? 1 : n_chains;
+       for (i = 0; i < target_chains; i++) {
                int index = -MT_EE_NIC_CONF_0;
 
-               ret = mt7615_eeprom_get_power_index(chandef->chan, i);
+               ret = mt7615_eeprom_get_power_index(dev, chandef->chan, i);
                if (ret < 0)
                        goto out;
 
 
 int mt7615_register_device(struct mt7615_dev *dev);
 void mt7615_unregister_device(struct mt7615_dev *dev);
 int mt7615_eeprom_init(struct mt7615_dev *dev);
-int mt7615_eeprom_get_power_index(struct ieee80211_channel *chan,
+int mt7615_eeprom_get_power_index(struct mt7615_dev *dev,
+                                 struct ieee80211_channel *chan,
                                  u8 chain_idx);
 int mt7615_dma_init(struct mt7615_dev *dev);
 void mt7615_dma_cleanup(struct mt7615_dev *dev);