aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-eeprom.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-03-05 14:24:32 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:11 -0500
commit7e79a3937a44b1dc5f457e6dbb8c50e93719286a (patch)
tree305626d41a85e102396f23e4f5b7bb611a3f0935 /drivers/net/wireless/iwlwifi/iwl-eeprom.c
parent54708d8df355b7ecf1d25d4049336840e6107d96 (diff)
iwlwifi: use valid TX/RX antenna from hw_params
It's not really a good idea to write to the global static configuration. Use the valid TX/RX antenna information only from the HW params struct except in the case where the values from the config are used to override the values from the EEPROM. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-eeprom.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
index d8668bccc083..6915b33add36 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
@@ -271,25 +271,27 @@ int iwl_eeprom_init_hw_params(struct iwl_priv *priv)
271 271
272 IWL_INFO(priv, "Device SKU: 0x%X\n", hw_params(priv).sku); 272 IWL_INFO(priv, "Device SKU: 0x%X\n", hw_params(priv).sku);
273 273
274 if (!cfg(priv)->valid_tx_ant && !cfg(priv)->valid_rx_ant) { 274 radio_cfg = iwl_eeprom_query16(shrd, EEPROM_RADIO_CONFIG);
275 /* not using .cfg overwrite */ 275
276 radio_cfg = iwl_eeprom_query16(shrd, EEPROM_RADIO_CONFIG); 276 hw_params(priv).valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg);
277 cfg(priv)->valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); 277 hw_params(priv).valid_rx_ant = EEPROM_RF_CFG_RX_ANT_MSK(radio_cfg);
278 cfg(priv)->valid_rx_ant = EEPROM_RF_CFG_RX_ANT_MSK(radio_cfg); 278
279 if (!cfg(priv)->valid_tx_ant || !cfg(priv)->valid_rx_ant) { 279 /* check overrides (some devices have wrong EEPROM) */
280 IWL_ERR(priv, "Invalid chain (0x%X, 0x%X)\n", 280 if (cfg(priv)->valid_tx_ant)
281 cfg(priv)->valid_tx_ant, 281 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant;
282 cfg(priv)->valid_rx_ant); 282 if (cfg(priv)->valid_rx_ant)
283 return -EINVAL; 283 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant;
284 } 284
285 IWL_INFO(priv, "Valid Tx ant: 0x%X, Valid Rx ant: 0x%X\n", 285 if (!hw_params(priv).valid_tx_ant || !hw_params(priv).valid_rx_ant) {
286 cfg(priv)->valid_tx_ant, cfg(priv)->valid_rx_ant); 286 IWL_ERR(priv, "Invalid chain (0x%X, 0x%X)\n",
287 hw_params(priv).valid_tx_ant,
288 hw_params(priv).valid_rx_ant);
289 return -EINVAL;
287 } 290 }
288 /* 291
289 * for some special cases, 292 IWL_INFO(priv, "Valid Tx ant: 0x%X, Valid Rx ant: 0x%X\n",
290 * EEPROM did not reflect the correct antenna setting 293 hw_params(priv).valid_tx_ant, hw_params(priv).valid_rx_ant);
291 * so overwrite the valid tx/rx antenna from .cfg 294
292 */
293 return 0; 295 return 0;
294} 296}
295 297