mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: add support for setting transmit power
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
+6
-1
@@ -503,7 +503,12 @@ mt7603_init_txpower(struct mt7603_dev *dev,
|
||||
max_offset = max(max_offset, cur_offset);
|
||||
}
|
||||
|
||||
target_power = DIV_ROUND_UP(target_power + max_offset, 2);
|
||||
target_power += max_offset;
|
||||
|
||||
dev->tx_power_limit = target_power;
|
||||
dev->mt76.txpower_cur = target_power;
|
||||
|
||||
target_power = DIV_ROUND_UP(target_power, 2);
|
||||
|
||||
/* add 3 dBm for 2SS devices (combined output) */
|
||||
if (dev->mt76.antenna_mask & BIT(1))
|
||||
|
||||
+3
-8
@@ -219,7 +219,8 @@ mt7603_config(struct ieee80211_hw *hw, u32 changed)
|
||||
struct mt7603_dev *dev = hw->priv;
|
||||
int ret = 0;
|
||||
|
||||
if (changed & IEEE80211_CONF_CHANGE_CHANNEL)
|
||||
if (changed & (IEEE80211_CONF_CHANGE_CHANNEL |
|
||||
IEEE80211_CONF_CHANGE_POWER))
|
||||
ret = mt7603_set_channel(dev, &hw->conf.chandef);
|
||||
|
||||
if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
|
||||
@@ -541,12 +542,6 @@ mt7603_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
{
|
||||
}
|
||||
|
||||
static int
|
||||
mt7603_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int *dbm)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int
|
||||
mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_ampdu_params *params)
|
||||
@@ -685,7 +680,7 @@ const struct ieee80211_ops mt7603_ops = {
|
||||
.sw_scan_complete = mt7603_sw_scan_complete,
|
||||
.flush = mt7603_flush,
|
||||
.ampdu_action = mt7603_ampdu_action,
|
||||
.get_txpower = mt7603_get_txpower,
|
||||
.get_txpower = mt76_get_txpower,
|
||||
.wake_tx_queue = mt76_wake_tx_queue,
|
||||
.sta_rate_tbl_update = mt7603_sta_rate_tbl_update,
|
||||
.release_buffered_frames = mt7603_release_buffered_frames,
|
||||
|
||||
+13
-1
@@ -481,6 +481,7 @@ static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev)
|
||||
int mt7603_mcu_set_channel(struct mt7603_dev *dev)
|
||||
{
|
||||
struct cfg80211_chan_def *chandef = &dev->mt76.chandef;
|
||||
struct ieee80211_hw *hw = mt76_hw(dev);
|
||||
int n_chains = __sw_hweight8(dev->mt76.antenna_mask);
|
||||
struct {
|
||||
u8 control_chan;
|
||||
@@ -499,7 +500,9 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev)
|
||||
.rx_streams = n_chains,
|
||||
};
|
||||
struct sk_buff *skb;
|
||||
s8 tx_power;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (dev->mt76.chandef.width == NL80211_CHAN_WIDTH_40) {
|
||||
req.bw = MT_BW_40;
|
||||
@@ -509,7 +512,16 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev)
|
||||
req.center_chan -= 2;
|
||||
}
|
||||
|
||||
memset(req.txpower, 0xff, sizeof(req.txpower));
|
||||
tx_power = hw->conf.power_level * 2;
|
||||
if (dev->mt76.antenna_mask == 3)
|
||||
tx_power -= 6;
|
||||
tx_power = min(tx_power, dev->tx_power_limit);
|
||||
|
||||
dev->mt76.txpower_cur = tx_power;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(req.txpower); i++)
|
||||
req.txpower[i] = tx_power;
|
||||
|
||||
skb = mt7603_mcu_msg_alloc(&req, sizeof(req));
|
||||
ret = mt7603_mcu_msg_send(dev, skb, MCU_EXT_CMD_CHANNEL_SWITCH,
|
||||
MCU_Q_SET);
|
||||
|
||||
@@ -120,6 +120,8 @@ struct mt7603_dev {
|
||||
u8 slottime;
|
||||
s16 coverage_class;
|
||||
|
||||
s8 tx_power_limit;
|
||||
|
||||
ktime_t survey_time;
|
||||
ktime_t ed_time;
|
||||
int beacon_int;
|
||||
|
||||
Reference in New Issue
Block a user