diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-05-18 02:16:45 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-05-19 09:38:21 -0400 |
commit | 5c90422439d62b574fd9e021fabaae2dc9a3065e (patch) | |
tree | 07aa1c5b8deab261bf06f40395853ca63078d912 /drivers/net/wireless/iwlwifi/mvm/utils.c | |
parent | 894981ed43fc5e706330469e27972f7c2dd046cb (diff) |
iwlwifi: mvm: don't allow diversity if BT Coex / TT forbid it
We should not allow diversity when BT Coex needs the second
antenna. Thermal Throttling can also request to stop using
the second antenna. Honour those requests.
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/utils.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/utils.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c index b269f1e30e87..42cea32ac546 100644 --- a/drivers/net/wireless/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/iwlwifi/mvm/utils.c | |||
@@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | |||
650 | ieee80211_request_smps(vif, smps_mode); | 650 | ieee80211_request_smps(vif, smps_mode); |
651 | } | 651 | } |
652 | 652 | ||
653 | static void iwl_mvm_diversity_iter(void *_data, u8 *mac, | ||
654 | struct ieee80211_vif *vif) | ||
655 | { | ||
656 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); | ||
657 | bool *result = _data; | ||
658 | int i; | ||
659 | |||
660 | for (i = 0; i < NUM_IWL_MVM_SMPS_REQ; i++) { | ||
661 | if (mvmvif->smps_requests[i] == IEEE80211_SMPS_STATIC || | ||
662 | mvmvif->smps_requests[i] == IEEE80211_SMPS_DYNAMIC) | ||
663 | *result = false; | ||
664 | } | ||
665 | } | ||
666 | |||
667 | bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm) | ||
668 | { | ||
669 | bool result = true; | ||
670 | |||
671 | lockdep_assert_held(&mvm->mutex); | ||
672 | |||
673 | if (num_of_ant(mvm->fw->valid_rx_ant) == 1) | ||
674 | return false; | ||
675 | |||
676 | if (!mvm->cfg->rx_with_siso_diversity) | ||
677 | return false; | ||
678 | |||
679 | ieee80211_iterate_active_interfaces_atomic( | ||
680 | mvm->hw, IEEE80211_IFACE_ITER_NORMAL, | ||
681 | iwl_mvm_diversity_iter, &result); | ||
682 | |||
683 | return result; | ||
684 | } | ||
685 | |||
653 | int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | 686 | int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif, |
654 | bool value) | 687 | bool value) |
655 | { | 688 | { |