diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-03-05 14:24:32 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-03-06 15:16:11 -0500 |
commit | 7e79a3937a44b1dc5f457e6dbb8c50e93719286a (patch) | |
tree | 305626d41a85e102396f23e4f5b7bb611a3f0935 /drivers/net/wireless/iwlwifi/iwl-eeprom.c | |
parent | 54708d8df355b7ecf1d25d4049336840e6107d96 (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.c | 38 |
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 | ||