diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/bt-coex.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/bt-coex.c | 29 | 
1 files changed, 25 insertions, 4 deletions
| diff --git a/drivers/net/wireless/iwlwifi/mvm/bt-coex.c b/drivers/net/wireless/iwlwifi/mvm/bt-coex.c index 810bfa5f6de0..dbd622a3929c 100644 --- a/drivers/net/wireless/iwlwifi/mvm/bt-coex.c +++ b/drivers/net/wireless/iwlwifi/mvm/bt-coex.c @@ -174,7 +174,7 @@ static const __le32 iwl_tight_lookup[BT_COEX_LUT_SIZE] = {  static const __le32 iwl_loose_lookup[BT_COEX_LUT_SIZE] = {  	cpu_to_le32(0xaaaaaaaa),  	cpu_to_le32(0xaaaaaaaa), -	cpu_to_le32(0xaeaaaaaa), +	cpu_to_le32(0xaaaaaaaa),  	cpu_to_le32(0xaaaaaaaa),  	cpu_to_le32(0xcc00ff28),  	cpu_to_le32(0x0000aaaa), @@ -202,6 +202,22 @@ static const __le32 iwl_concurrent_lookup[BT_COEX_LUT_SIZE] = {  	cpu_to_le32(0x00000000),  }; +/* single shared antenna */ +static const __le32 iwl_single_shared_ant_lookup[BT_COEX_LUT_SIZE] = { +	cpu_to_le32(0x40000000), +	cpu_to_le32(0x00000000), +	cpu_to_le32(0x44000000), +	cpu_to_le32(0x00000000), +	cpu_to_le32(0x40000000), +	cpu_to_le32(0x00000000), +	cpu_to_le32(0x44000000), +	cpu_to_le32(0x00000000), +	cpu_to_le32(0xC0004000), +	cpu_to_le32(0xF0005000), +	cpu_to_le32(0xC0004000), +	cpu_to_le32(0xF0005000), +}; +  int iwl_send_bt_init_conf(struct iwl_mvm *mvm)  {  	struct iwl_bt_coex_cmd cmd = { @@ -225,7 +241,10 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)  					BT_VALID_REDUCED_TX_POWER |  					BT_VALID_LUT); -	if (is_loose_coex()) +	if (mvm->cfg->bt_shared_single_ant) +		memcpy(&cmd.decision_lut, iwl_single_shared_ant_lookup, +		       sizeof(iwl_single_shared_ant_lookup)); +	else if (is_loose_coex())  		memcpy(&cmd.decision_lut, iwl_loose_lookup,  		       sizeof(iwl_tight_lookup));  	else @@ -351,6 +370,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,  	enum ieee80211_band band;  	int ave_rssi; +	lockdep_assert_held(&mvm->mutex);  	if (vif->type != NL80211_IFTYPE_STATION)  		return; @@ -365,7 +385,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,  	smps_mode = IEEE80211_SMPS_AUTOMATIC;  	if (band != IEEE80211_BAND_2GHZ) { -		ieee80211_request_smps(vif, smps_mode); +		iwl_mvm_update_smps(mvm, vif, IWL_MVM_SMPS_REQ_BT_COEX, +				    smps_mode);  		return;  	} @@ -380,7 +401,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,  		       mvmvif->id,  data->notif->bt_status,  		       data->notif->bt_traffic_load, smps_mode); -	ieee80211_request_smps(vif, smps_mode); +	iwl_mvm_update_smps(mvm, vif, IWL_MVM_SMPS_REQ_BT_COEX, smps_mode);  	/* don't reduce the Tx power if in loose scheme */  	if (is_loose_coex()) |