Browse Source

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6

David S. Miller 15 years ago
parent
commit
334656f33c
1 changed files with 12 additions and 0 deletions
  1. 12 0
      drivers/net/wireless/iwlwifi/iwl-calib.c

+ 12 - 0
drivers/net/wireless/iwlwifi/iwl-calib.c

@@ -808,6 +808,18 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv,
 		}
 		}
 	}
 	}
 
 
+	/*
+	 * The above algorithm sometimes fails when the ucode
+	 * reports 0 for all chains. It's not clear why that
+	 * happens to start with, but it is then causing trouble
+	 * because this can make us enable more chains than the
+	 * hardware really has.
+	 *
+	 * To be safe, simply mask out any chains that we know
+	 * are not on the device.
+	 */
+	active_chains &= priv->hw_params.valid_rx_ant;
+
 	num_tx_chains = 0;
 	num_tx_chains = 0;
 	for (i = 0; i < NUM_RX_CHAINS; i++) {
 	for (i = 0; i < NUM_RX_CHAINS; i++) {
 		/* loops on all the bits of
 		/* loops on all the bits of