Message ID | 1482445906-20421-1-git-send-email-ryanhsu@qca.qualcomm.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Kalle Valo |
Headers | show |
Ryan Hsu <ryanhsu@qca.qualcomm.com> wrote: > From: Ryan Hsu <ryanhsu@qca.qualcomm.com> > > The txpower is being recalculated when adding interface to make sure > txpower won't overshoot the spec, and when removing the interface, > the txpower should again to be recalculated to restore the correct value > from the active interface list. > > Following is one of the scenario > vdev0 is created as STA and connected: txpower:23 > vdev1 is created as P2P_DEVICE for control interface: txpower:0 > vdev2 is created as p2p go/gc interface: txpower is 21 > > So the vdev2@txpower:21 will be set to firmware when vdev2 is created. > When we tear down the vdev2, the txpower needs to be recalculated to > re-set it to vdev0@txpower:23 as vdev0/vdev1 are the active interface. > > ath10k_pci mac vdev 0 peer create 8c:fd:f0:01:62:98 > ath10k_pci mac vdev_id 0 txpower 23 > ... (adding interface) > ath10k_pci mac vdev create 2 (add interface) type 1 subtype 3 > ath10k_pci mac vdev_id 2 txpower 21 > ath10k_pci mac txpower 21 > ... (removing interface) > ath10k_pci mac vdev 2 delete (remove interface) > ath10k_pci vdev 1 txpower 0 > ath10k_pci vdev 0 txpower 23 > ath10k_pci mac txpower 23 > > Signed-off-by: Ryan Hsu <ryanhsu@qca.qualcomm.com> Patch applied to ath-next branch of ath.git, thanks. d679fa1b3c89 ath10k: recal the txpower when removing interface
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index aa545a1..6475dc8 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -5194,6 +5194,10 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw, ath10k_warn(ar, "failed to recalc monitor: %d\n", ret); } + ret = ath10k_mac_txpower_recalc(ar); + if (ret) + ath10k_warn(ar, "failed to recalc tx power: %d\n", ret); + spin_lock_bh(&ar->htt.tx_lock); ath10k_mac_vif_tx_unlock_all(arvif); spin_unlock_bh(&ar->htt.tx_lock);