add tx power configuration support to mt7615 driver
Subsystems (2)
Lorenzo Bianconi
maintainercover add tx power configuration support to mt7615 driver
Cap tx power according to the value configured by the user. Initialize get_txpower mac80211 callback in order to report the configured tx power to mac80211
Lorenzo Bianconi (4):
mt76: generalize mt76_get_txpower for 4x4:4 devices
mt76: mt7615: add the capability to configure tx power
mt76: mt7615: init get_txpower mac80211 callback
mt76: mt7615: rearrange locking in mt7615_config
drivers/net/wireless/mediatek/mt76/mac80211.c | 15 ++++- .../wireless/mediatek/mt76/mt7615/eeprom.c | 34 ++++++++++ .../wireless/mediatek/mt76/mt7615/eeprom.h | 35 ++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 17 ++--- .../net/wireless/mediatek/mt76/mt7615/mcu.c | 64 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mcu.h | 1 + .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 + 7 files changed, 159 insertions(+), 10 deletions(-)
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 1/4 mt76: generalize mt76_get_txpower for 4x4:4 devices
Genralize mt76_get_txpower routine for 4x4:4 capable devices in order to be reused in mt7615 driver
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +13 -2
@@ -766,10 +766,21 @@ int mt76_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif, *dbm =DIV_ROUND_UP (dev->txpower_cur,2 );/* convert from per-chain power to combined -* output on 2x2 devices +* output power */ -if (n_chains >1 ) +switch (n_chains) { +case 4 : + *dbm +=6 ; +break ; +case 3 : + *dbm +=4 ; +break ; +case 2 : *dbm +=3 ; +break ; +default : +break ; + }return 0 ; }
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 2/4 mt76: mt7615: add the capability to configure tx power
In reply to Lorenzo BianconiIntroduce mt7615_mcu_set_tx_power routine in order to cap tx power according to the value configured by the user
--- .../wireless/mediatek/mt76/mt7615/eeprom.c | 34 ++++++++++ .../wireless/mediatek/mt76/mt7615/eeprom.h | 35 ++++++++++ .../net/wireless/mediatek/mt76/mt7615/main.c | 3 + .../net/wireless/mediatek/mt76/mt7615/mcu.c | 64 +++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7615/mcu.h | 1 + .../wireless/mediatek/mt76/mt7615/mt7615.h | 3 + 6 files changed, 140 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +34 -0
@@ -110,6 +110,40 @@ static void mt7615_eeprom_parse_hw_cap(struct mt7615_dev *dev) } } +int mt7615_eeprom_get_power_index (struct ieee80211_channel *chan, +u8 chain_idx) +{ +int index; + +if (chain_idx >3 ) +return -EINVAL ; + +if (chan->band ==NL80211_BAND_2GHZ ) { + index =MT_EE_TX0_2G_TARGET_POWER + chain_idx *6 ; + }else { +int group =mt7615_get_channel_group (chan->hw_value); + +switch (chain_idx) { +case 1 : + index =MT_EE_TX1_5G_G0_TARGET_POWER ; +break ; +case 2 : + index =MT_EE_TX2_5G_G0_TARGET_POWER ; +break ; +case 3 : + index =MT_EE_TX3_5G_G0_TARGET_POWER ; +break ; +case 0 : +default : + index =MT_EE_TX0_5G_G0_TARGET_POWER ; +break ; + } + index +=5 * group; + } + +return index; +} +int mt7615_eeprom_init (struct mt7615_dev *dev) {int ret;
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h +35 -0
@@ -12,6 +12,11 @@ enum mt7615_eeprom_field {MT_EE_MAC_ADDR =0x004 ,MT_EE_NIC_CONF_0 =0x034 ,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_TX2_5G_G0_TARGET_POWER =0x142 , +MT_EE_TX3_5G_G0_TARGET_POWER =0x16a , __MT_EE_MAX =0x3bf };
@@ -24,4 +29,34 @@ enum mt7615_eeprom_band { MT_EE_DBDC, }; +enum mt7615_channel_group { +MT_CH_5G_JAPAN , +MT_CH_5G_UNII_1 , +MT_CH_5G_UNII_2A , +MT_CH_5G_UNII_2B , +MT_CH_5G_UNII_2E_1 , +MT_CH_5G_UNII_2E_2 , +MT_CH_5G_UNII_2E_3 , +MT_CH_5G_UNII_3 , + __MT_CH_MAX +}; + +static inline enum mt7615_channel_group +mt7615_get_channel_group (int channel) +{ +if (channel >=184 && channel <=196 ) +return MT_CH_5G_JAPAN ; +if (channel <=48 ) +return MT_CH_5G_UNII_1 ; +if (channel <=64 ) +return MT_CH_5G_UNII_2A ; +if (channel <=114 ) +return MT_CH_5G_UNII_2E_1 ; +if (channel <=144 ) +return MT_CH_5G_UNII_2E_2 ; +if (channel <=161 ) +return MT_CH_5G_UNII_2E_3 ; +return MT_CH_5G_UNII_3 ; +} +#endif
drivers/net/wireless/mediatek/mt76/mt7615/main.c +3 -0
@@ -201,6 +201,9 @@ static int mt7615_config(struct ieee80211_hw *hw, u32 changed)mutex_unlock (&dev->mt76.mutex); } +if (changed &IEEE80211_CONF_CHANGE_POWER ) + ret =mt7615_mcu_set_tx_power (dev); +if (changed &IEEE80211_CONF_CHANGE_MONITOR ) {mutex_lock (&dev->mt76.mutex);
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +64 -0
70 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7615/mcu.h +1 -0
@@ -70,6 +70,7 @@ enum {enum {MCU_EXT_CMD_PM_STATE_CTRL =0x07 ,MCU_EXT_CMD_CHANNEL_SWITCH =0x08 , +MCU_EXT_CMD_SET_TX_POWER_CTRL =0x11 ,MCU_EXT_CMD_EFUSE_BUFFER_MODE =0x21 ,MCU_EXT_CMD_STA_REC_UPDATE =0x25 ,MCU_EXT_CMD_BSS_INFO_UPDATE =0x26 ,
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +3 -0
@@ -105,6 +105,8 @@ u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);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, +u8 chain_idx);int mt7615_dma_init (struct mt7615_dev *dev);void mt7615_dma_cleanup (struct mt7615_dev *dev);int mt7615_mcu_init (struct mt7615_dev *dev);
@@ -167,6 +169,7 @@ int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);int mt7615_mcu_init_mac (struct mt7615_dev *dev);int mt7615_mcu_set_rts_thresh (struct mt7615_dev *dev,u32 val);int mt7615_mcu_ctrl_pm_state (struct mt7615_dev *dev,int enter); +int mt7615_mcu_set_tx_power (struct mt7615_dev *dev);void mt7615_mcu_exit (struct mt7615_dev *dev); int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 3/4 mt76: mt7615: init get_txpower mac80211 callback
In reply to Lorenzo BianconiInitialize get_txpower mac80211 callback to mt76_get_txpower in order to report the configured tx power to mac80211
--- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +1 -0
@@ -493,4 +493,5 @@ const struct ieee80211_ops mt7615_ops = { .sw_scan_start = mt7615_sw_scan, .sw_scan_complete = mt7615_sw_scan_complete, .release_buffered_frames = mt76_release_buffered_frames, + .get_txpower = mt76_get_txpower, };
Signature · 1 line
2.21.0
Lorenzo Bianconi
maintainerPATCH 4/4 mt76: mt7615: rearrange locking in mt7615_config
In reply to Lorenzo BianconiSince all the routines in mt7615_config grub mt76.mutex moves mutex_lock/mutex_unlock at the beginning/end of mt7615_config
--- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7615/main.c +5 -8
@@ -191,31 +191,28 @@ static int mt7615_config(struct ieee80211_hw *hw, u32 changed)struct mt7615_dev *dev = hw->priv;int ret =0 ; -if (changed &IEEE80211_CONF_CHANGE_CHANNEL ) { -mutex_lock (&dev->mt76.mutex); +mutex_lock (&dev->mt76.mutex); +if (changed &IEEE80211_CONF_CHANGE_CHANNEL ) {ieee80211_stop_queues (hw); ret =mt7615_set_channel (dev, &hw->conf.chandef);ieee80211_wake_queues (hw); - -mutex_unlock (&dev->mt76.mutex); }if (changed &IEEE80211_CONF_CHANGE_POWER ) ret =mt7615_mcu_set_tx_power (dev);if (changed &IEEE80211_CONF_CHANGE_MONITOR ) { -mutex_lock (&dev->mt76.mutex); -if (!(hw->conf.flags &IEEE80211_CONF_MONITOR )) dev->mt76.rxfilter |=MT_WF_RFCR_DROP_OTHER_UC ;else dev->mt76.rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC ;mt76_wr (dev,MT_WF_RFCR , dev->mt76.rxfilter); - -mutex_unlock (&dev->mt76.mutex); } + +mutex_unlock (&dev->mt76.mutex); +return ret; }
Signature · 1 line
2.21.0
Quoted 9 lines · Lorenzo Bianconi
Cap tx power according to the value configured by the user. Initialize
get_txpowermac80211 callback in order to report the configured tx power to mac80211Lorenzo Bianconi (4):
mt76: generalizemt76_get_txpowerfor 4x4:4 devices
mt76: mt7615: add the capability to configure tx power
mt76: mt7615: initget_txpowermac80211 callback
mt76: mt7615: rearrange locking inmt7615_config
Applied, thanks.
- Felix