diff mbox

ath10k: recal the txpower when removing interface

Message ID 1482445906-20421-1-git-send-email-ryanhsu@qca.qualcomm.com (mailing list archive)
State Accepted
Commit d679fa1b3c8997e3a371da3cca08c44a38054c34
Delegated to: Kalle Valo
Headers show

Commit Message

Ryan Hsu Dec. 22, 2016, 10:31 p.m. UTC
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>
---
 drivers/net/wireless/ath/ath10k/mac.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Kalle Valo Dec. 30, 2016, 9:15 a.m. UTC | #1
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 mbox

Patch

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);