aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
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
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')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-1000.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-2000.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c16
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-calib.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debugfs.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom.c38
8 files changed, 46 insertions, 44 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index 605ee3df1d82..22eb0622ac21 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -131,14 +131,13 @@ static void iwl1000_hw_set_hw_params(struct iwl_priv *priv)
131 131
132 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ); 132 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ);
133 133
134 hw_params(priv).tx_chains_num = num_of_ant(cfg(priv)->valid_tx_ant); 134 hw_params(priv).tx_chains_num =
135 num_of_ant(hw_params(priv).valid_tx_ant);
135 if (cfg(priv)->rx_with_siso_diversity) 136 if (cfg(priv)->rx_with_siso_diversity)
136 hw_params(priv).rx_chains_num = 1; 137 hw_params(priv).rx_chains_num = 1;
137 else 138 else
138 hw_params(priv).rx_chains_num = 139 hw_params(priv).rx_chains_num =
139 num_of_ant(cfg(priv)->valid_rx_ant); 140 num_of_ant(hw_params(priv).valid_rx_ant);
140 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant;
141 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant;
142 141
143 iwl1000_set_ct_threshold(priv); 142 iwl1000_set_ct_threshold(priv);
144 143
diff --git a/drivers/net/wireless/iwlwifi/iwl-2000.c b/drivers/net/wireless/iwlwifi/iwl-2000.c
index e6e8c79a80d8..43d17a4564e3 100644
--- a/drivers/net/wireless/iwlwifi/iwl-2000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-2000.c
@@ -127,14 +127,13 @@ static void iwl2000_hw_set_hw_params(struct iwl_priv *priv)
127 127
128 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ); 128 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ);
129 129
130 hw_params(priv).tx_chains_num = num_of_ant(cfg(priv)->valid_tx_ant); 130 hw_params(priv).tx_chains_num =
131 num_of_ant(hw_params(priv).valid_tx_ant);
131 if (cfg(priv)->rx_with_siso_diversity) 132 if (cfg(priv)->rx_with_siso_diversity)
132 hw_params(priv).rx_chains_num = 1; 133 hw_params(priv).rx_chains_num = 1;
133 else 134 else
134 hw_params(priv).rx_chains_num = 135 hw_params(priv).rx_chains_num =
135 num_of_ant(cfg(priv)->valid_rx_ant); 136 num_of_ant(hw_params(priv).valid_rx_ant);
136 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant;
137 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant;
138 137
139 iwl2000_set_ct_threshold(priv); 138 iwl2000_set_ct_threshold(priv);
140 139
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index ccaeead29c2f..8cdc4a35a973 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -167,10 +167,10 @@ static void iwl5000_hw_set_hw_params(struct iwl_priv *priv)
167 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) | 167 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) |
168 BIT(IEEE80211_BAND_5GHZ); 168 BIT(IEEE80211_BAND_5GHZ);
169 169
170 hw_params(priv).tx_chains_num = num_of_ant(cfg(priv)->valid_tx_ant); 170 hw_params(priv).tx_chains_num =
171 hw_params(priv).rx_chains_num = num_of_ant(cfg(priv)->valid_rx_ant); 171 num_of_ant(hw_params(priv).valid_tx_ant);
172 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant; 172 hw_params(priv).rx_chains_num =
173 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant; 173 num_of_ant(hw_params(priv).valid_rx_ant);
174 174
175 iwl5000_set_ct_threshold(priv); 175 iwl5000_set_ct_threshold(priv);
176 176
@@ -190,10 +190,10 @@ static void iwl5150_hw_set_hw_params(struct iwl_priv *priv)
190 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) | 190 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) |
191 BIT(IEEE80211_BAND_5GHZ); 191 BIT(IEEE80211_BAND_5GHZ);
192 192
193 hw_params(priv).tx_chains_num = num_of_ant(cfg(priv)->valid_tx_ant); 193 hw_params(priv).tx_chains_num =
194 hw_params(priv).rx_chains_num = num_of_ant(cfg(priv)->valid_rx_ant); 194 num_of_ant(hw_params(priv).valid_tx_ant);
195 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant; 195 hw_params(priv).rx_chains_num =
196 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant; 196 num_of_ant(hw_params(priv).valid_rx_ant);
197 197
198 iwl5150_set_ct_threshold(priv); 198 iwl5150_set_ct_threshold(priv);
199 199
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 223e60a1b79d..720e8e6e62ae 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -149,14 +149,13 @@ static void iwl6000_hw_set_hw_params(struct iwl_priv *priv)
149 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) | 149 hw_params(priv).ht40_channel = BIT(IEEE80211_BAND_2GHZ) |
150 BIT(IEEE80211_BAND_5GHZ); 150 BIT(IEEE80211_BAND_5GHZ);
151 151
152 hw_params(priv).tx_chains_num = num_of_ant(cfg(priv)->valid_tx_ant); 152 hw_params(priv).tx_chains_num =
153 num_of_ant(hw_params(priv).valid_tx_ant);
153 if (cfg(priv)->rx_with_siso_diversity) 154 if (cfg(priv)->rx_with_siso_diversity)
154 hw_params(priv).rx_chains_num = 1; 155 hw_params(priv).rx_chains_num = 1;
155 else 156 else
156 hw_params(priv).rx_chains_num = 157 hw_params(priv).rx_chains_num =
157 num_of_ant(cfg(priv)->valid_rx_ant); 158 num_of_ant(hw_params(priv).valid_rx_ant);
158 hw_params(priv).valid_tx_ant = cfg(priv)->valid_tx_ant;
159 hw_params(priv).valid_rx_ant = cfg(priv)->valid_rx_ant;
160 159
161 iwl6000_set_ct_threshold(priv); 160 iwl6000_set_ct_threshold(priv);
162 161
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-calib.c b/drivers/net/wireless/iwlwifi/iwl-agn-calib.c
index 12acc81ed419..84fc5ce91b35 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-calib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-calib.c
@@ -848,7 +848,7 @@ static void iwl_find_disconn_antenna(struct iwl_priv *priv, u32* average_sig,
848 * connect the first valid tx chain 848 * connect the first valid tx chain
849 */ 849 */
850 first_chain = 850 first_chain =
851 find_first_chain(cfg(priv)->valid_tx_ant); 851 find_first_chain(hw_params(priv).valid_tx_ant);
852 data->disconn_array[first_chain] = 0; 852 data->disconn_array[first_chain] = 0;
853 active_chains |= BIT(first_chain); 853 active_chains |= BIT(first_chain);
854 IWL_DEBUG_CALIB(priv, 854 IWL_DEBUG_CALIB(priv,
@@ -1082,7 +1082,7 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv)
1082 1082
1083 iwlagn_gain_computation(priv, average_noise, 1083 iwlagn_gain_computation(priv, average_noise,
1084 min_average_noise_antenna_i, min_average_noise, 1084 min_average_noise_antenna_i, min_average_noise,
1085 find_first_chain(cfg(priv)->valid_rx_ant)); 1085 find_first_chain(hw_params(priv).valid_rx_ant));
1086 1086
1087 /* Some power changes may have been made during the calibration. 1087 /* Some power changes may have been made during the calibration.
1088 * Update and commit the RXON 1088 * Update and commit the RXON
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index e1bf12578f87..6cec7e63c171 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -699,7 +699,7 @@ int iwl_alive_start(struct iwl_priv *priv)
699 priv->active_rate = IWL_RATES_MASK; 699 priv->active_rate = IWL_RATES_MASK;
700 700
701 /* Configure Tx antenna selection based on H/W config */ 701 /* Configure Tx antenna selection based on H/W config */
702 iwlagn_send_tx_ant_config(priv, cfg(priv)->valid_tx_ant); 702 iwlagn_send_tx_ant_config(priv, hw_params(priv).valid_tx_ant);
703 703
704 if (iwl_is_associated_ctx(ctx) && !priv->shrd->wowlan) { 704 if (iwl_is_associated_ctx(ctx) && !priv->shrd->wowlan) {
705 struct iwl_rxon_cmd *active_rxon = 705 struct iwl_rxon_cmd *active_rxon =
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index dd502e82e410..b6740c33b519 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -1546,15 +1546,18 @@ static ssize_t iwl_dbgfs_ucode_tx_stats_read(struct file *file,
1546 if (tx->tx_power.ant_a || tx->tx_power.ant_b || tx->tx_power.ant_c) { 1546 if (tx->tx_power.ant_a || tx->tx_power.ant_b || tx->tx_power.ant_c) {
1547 pos += scnprintf(buf + pos, bufsz - pos, 1547 pos += scnprintf(buf + pos, bufsz - pos,
1548 "tx power: (1/2 dB step)\n"); 1548 "tx power: (1/2 dB step)\n");
1549 if ((cfg(priv)->valid_tx_ant & ANT_A) && tx->tx_power.ant_a) 1549 if ((hw_params(priv).valid_tx_ant & ANT_A) &&
1550 tx->tx_power.ant_a)
1550 pos += scnprintf(buf + pos, bufsz - pos, 1551 pos += scnprintf(buf + pos, bufsz - pos,
1551 fmt_hex, "antenna A:", 1552 fmt_hex, "antenna A:",
1552 tx->tx_power.ant_a); 1553 tx->tx_power.ant_a);
1553 if ((cfg(priv)->valid_tx_ant & ANT_B) && tx->tx_power.ant_b) 1554 if ((hw_params(priv).valid_tx_ant & ANT_B) &&
1555 tx->tx_power.ant_b)
1554 pos += scnprintf(buf + pos, bufsz - pos, 1556 pos += scnprintf(buf + pos, bufsz - pos,
1555 fmt_hex, "antenna B:", 1557 fmt_hex, "antenna B:",
1556 tx->tx_power.ant_b); 1558 tx->tx_power.ant_b);
1557 if ((cfg(priv)->valid_tx_ant & ANT_C) && tx->tx_power.ant_c) 1559 if ((hw_params(priv).valid_tx_ant & ANT_C) &&
1560 tx->tx_power.ant_c)
1558 pos += scnprintf(buf + pos, bufsz - pos, 1561 pos += scnprintf(buf + pos, bufsz - pos,
1559 fmt_hex, "antenna C:", 1562 fmt_hex, "antenna C:",
1560 tx->tx_power.ant_c); 1563 tx->tx_power.ant_c);
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