Ver Fonte

iwlwifi: mvm: fix switch from shared antenna in case of BT load

Current code didn't handle well the case where we're in SISO using
ANT B and there's a BT load. Switch to ANT A in this case.

Signed-off-by: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Eyal Shapira há 12 anos atrás
pai
commit
22f6642c52
1 ficheiros alterados com 8 adições e 7 exclusões
  1. 8 7
      drivers/net/wireless/iwlwifi/mvm/rs.c

+ 8 - 7
drivers/net/wireless/iwlwifi/mvm/rs.c

@@ -1324,17 +1324,18 @@ static int rs_move_siso_to_other(struct iwl_mvm *mvm,
 		/* nothing */
 		break;
 	case IWL_BT_COEX_TRAFFIC_LOAD_LOW:
-		/* avoid antenna B unless MIMO */
-		if (tbl->action == IWL_SISO_SWITCH_ANTENNA)
+		/* avoid switching to antenna B but allow MIMO */
+		if (tbl->action == IWL_SISO_SWITCH_ANTENNA &&
+		    tbl->ant_type == ANT_A)
 			tbl->action = IWL_SISO_SWITCH_MIMO2;
 		break;
 	case IWL_BT_COEX_TRAFFIC_LOAD_HIGH:
 	case IWL_BT_COEX_TRAFFIC_LOAD_CONTINUOUS:
-		/* avoid antenna B and MIMO */
-		valid_tx_ant =
-			first_antenna(iwl_fw_valid_tx_ant(mvm->fw));
-		if (tbl->action != IWL_SISO_SWITCH_ANTENNA)
-			tbl->action = IWL_SISO_SWITCH_ANTENNA;
+		/* A - avoid antenna B and MIMO. B - switch to A */
+		if (tbl->ant_type == ANT_A)
+			valid_tx_ant =
+				first_antenna(iwl_fw_valid_tx_ant(mvm->fw));
+		tbl->action = IWL_SISO_SWITCH_ANTENNA;
 		break;
 	default:
 		IWL_ERR(mvm, "Invalid BT load %d",