diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2013-08-01 02:23:23 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-08-01 15:52:05 -0400 |
commit | 37133002f5263153e71a509191fbb8951c1de3e0 (patch) | |
tree | c79c321ec594feafc5bd3c627604c996779aca46 /drivers/net/wireless/ath/ath9k/antenna.c | |
parent | 9ddf03017917970c53da577b263e1686ef5c9652 (diff) |
ath9k: Use a subroutine to calculate ALT ratio
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/antenna.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/antenna.c | 173 |
1 files changed, 79 insertions, 94 deletions
diff --git a/drivers/net/wireless/ath/ath9k/antenna.c b/drivers/net/wireless/ath/ath9k/antenna.c index 6495fc620b40..ea4ee08cddf2 100644 --- a/drivers/net/wireless/ath/ath9k/antenna.c +++ b/drivers/net/wireless/ath/ath9k/antenna.c | |||
@@ -125,6 +125,74 @@ static void ath_lnaconf_alt_good_scan(struct ath_ant_comb *antcomb, | |||
125 | } | 125 | } |
126 | } | 126 | } |
127 | 127 | ||
128 | static void ath_ant_set_alt_ratio(struct ath_ant_comb *antcomb, | ||
129 | struct ath_hw_antcomb_conf *conf) | ||
130 | { | ||
131 | /* set alt to the conf with maximun ratio */ | ||
132 | if (antcomb->first_ratio && antcomb->second_ratio) { | ||
133 | if (antcomb->rssi_second > antcomb->rssi_third) { | ||
134 | /* first alt*/ | ||
135 | if ((antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
136 | (antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2)) | ||
137 | /* Set alt LNA1 or LNA2*/ | ||
138 | if (conf->main_lna_conf == ATH_ANT_DIV_COMB_LNA2) | ||
139 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA1; | ||
140 | else | ||
141 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA2; | ||
142 | else | ||
143 | /* Set alt to A+B or A-B */ | ||
144 | conf->alt_lna_conf = | ||
145 | antcomb->first_quick_scan_conf; | ||
146 | } else if ((antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
147 | (antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2)) { | ||
148 | /* Set alt LNA1 or LNA2 */ | ||
149 | if (conf->main_lna_conf == ATH_ANT_DIV_COMB_LNA2) | ||
150 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA1; | ||
151 | else | ||
152 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA2; | ||
153 | } else { | ||
154 | /* Set alt to A+B or A-B */ | ||
155 | conf->alt_lna_conf = antcomb->second_quick_scan_conf; | ||
156 | } | ||
157 | } else if (antcomb->first_ratio) { | ||
158 | /* first alt */ | ||
159 | if ((antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
160 | (antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2)) | ||
161 | /* Set alt LNA1 or LNA2 */ | ||
162 | if (conf->main_lna_conf == ATH_ANT_DIV_COMB_LNA2) | ||
163 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA1; | ||
164 | else | ||
165 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA2; | ||
166 | else | ||
167 | /* Set alt to A+B or A-B */ | ||
168 | conf->alt_lna_conf = antcomb->first_quick_scan_conf; | ||
169 | } else if (antcomb->second_ratio) { | ||
170 | /* second alt */ | ||
171 | if ((antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
172 | (antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2)) | ||
173 | /* Set alt LNA1 or LNA2 */ | ||
174 | if (conf->main_lna_conf == ATH_ANT_DIV_COMB_LNA2) | ||
175 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA1; | ||
176 | else | ||
177 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA2; | ||
178 | else | ||
179 | /* Set alt to A+B or A-B */ | ||
180 | conf->alt_lna_conf = antcomb->second_quick_scan_conf; | ||
181 | } else { | ||
182 | /* main is largest */ | ||
183 | if ((antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
184 | (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2)) | ||
185 | /* Set alt LNA1 or LNA2 */ | ||
186 | if (conf->main_lna_conf == ATH_ANT_DIV_COMB_LNA2) | ||
187 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA1; | ||
188 | else | ||
189 | conf->alt_lna_conf = ATH_ANT_DIV_COMB_LNA2; | ||
190 | else | ||
191 | /* Set alt to A+B or A-B */ | ||
192 | conf->alt_lna_conf = antcomb->main_conf; | ||
193 | } | ||
194 | } | ||
195 | |||
128 | static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb, | 196 | static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb, |
129 | struct ath_hw_antcomb_conf *div_ant_conf, | 197 | struct ath_hw_antcomb_conf *div_ant_conf, |
130 | int main_rssi_avg, int alt_rssi_avg, | 198 | int main_rssi_avg, int alt_rssi_avg, |
@@ -181,17 +249,21 @@ static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb, | |||
181 | antcomb->rssi_first = main_rssi_avg; | 249 | antcomb->rssi_first = main_rssi_avg; |
182 | antcomb->rssi_third = alt_rssi_avg; | 250 | antcomb->rssi_third = alt_rssi_avg; |
183 | 251 | ||
184 | if (antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) | 252 | switch(antcomb->second_quick_scan_conf) { |
253 | case ATH_ANT_DIV_COMB_LNA1: | ||
185 | antcomb->rssi_lna1 = alt_rssi_avg; | 254 | antcomb->rssi_lna1 = alt_rssi_avg; |
186 | else if (antcomb->second_quick_scan_conf == | 255 | break; |
187 | ATH_ANT_DIV_COMB_LNA2) | 256 | case ATH_ANT_DIV_COMB_LNA2: |
188 | antcomb->rssi_lna2 = alt_rssi_avg; | 257 | antcomb->rssi_lna2 = alt_rssi_avg; |
189 | else if (antcomb->second_quick_scan_conf == | 258 | break; |
190 | ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2) { | 259 | case ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2: |
191 | if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2) | 260 | if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2) |
192 | antcomb->rssi_lna2 = main_rssi_avg; | 261 | antcomb->rssi_lna2 = main_rssi_avg; |
193 | else if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) | 262 | else if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) |
194 | antcomb->rssi_lna1 = main_rssi_avg; | 263 | antcomb->rssi_lna1 = main_rssi_avg; |
264 | break; | ||
265 | default: | ||
266 | break; | ||
195 | } | 267 | } |
196 | 268 | ||
197 | if (antcomb->rssi_lna2 > antcomb->rssi_lna1 + | 269 | if (antcomb->rssi_lna2 > antcomb->rssi_lna1 + |
@@ -229,95 +301,8 @@ static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb, | |||
229 | antcomb->second_ratio = false; | 301 | antcomb->second_ratio = false; |
230 | } | 302 | } |
231 | 303 | ||
232 | /* set alt to the conf with maximun ratio */ | 304 | ath_ant_set_alt_ratio(antcomb, div_ant_conf); |
233 | if (antcomb->first_ratio && antcomb->second_ratio) { | 305 | |
234 | if (antcomb->rssi_second > antcomb->rssi_third) { | ||
235 | /* first alt*/ | ||
236 | if ((antcomb->first_quick_scan_conf == | ||
237 | ATH_ANT_DIV_COMB_LNA1) || | ||
238 | (antcomb->first_quick_scan_conf == | ||
239 | ATH_ANT_DIV_COMB_LNA2)) | ||
240 | /* Set alt LNA1 or LNA2*/ | ||
241 | if (div_ant_conf->main_lna_conf == | ||
242 | ATH_ANT_DIV_COMB_LNA2) | ||
243 | div_ant_conf->alt_lna_conf = | ||
244 | ATH_ANT_DIV_COMB_LNA1; | ||
245 | else | ||
246 | div_ant_conf->alt_lna_conf = | ||
247 | ATH_ANT_DIV_COMB_LNA2; | ||
248 | else | ||
249 | /* Set alt to A+B or A-B */ | ||
250 | div_ant_conf->alt_lna_conf = | ||
251 | antcomb->first_quick_scan_conf; | ||
252 | } else if ((antcomb->second_quick_scan_conf == | ||
253 | ATH_ANT_DIV_COMB_LNA1) || | ||
254 | (antcomb->second_quick_scan_conf == | ||
255 | ATH_ANT_DIV_COMB_LNA2)) { | ||
256 | /* Set alt LNA1 or LNA2 */ | ||
257 | if (div_ant_conf->main_lna_conf == | ||
258 | ATH_ANT_DIV_COMB_LNA2) | ||
259 | div_ant_conf->alt_lna_conf = | ||
260 | ATH_ANT_DIV_COMB_LNA1; | ||
261 | else | ||
262 | div_ant_conf->alt_lna_conf = | ||
263 | ATH_ANT_DIV_COMB_LNA2; | ||
264 | } else { | ||
265 | /* Set alt to A+B or A-B */ | ||
266 | div_ant_conf->alt_lna_conf = | ||
267 | antcomb->second_quick_scan_conf; | ||
268 | } | ||
269 | } else if (antcomb->first_ratio) { | ||
270 | /* first alt */ | ||
271 | if ((antcomb->first_quick_scan_conf == | ||
272 | ATH_ANT_DIV_COMB_LNA1) || | ||
273 | (antcomb->first_quick_scan_conf == | ||
274 | ATH_ANT_DIV_COMB_LNA2)) | ||
275 | /* Set alt LNA1 or LNA2 */ | ||
276 | if (div_ant_conf->main_lna_conf == | ||
277 | ATH_ANT_DIV_COMB_LNA2) | ||
278 | div_ant_conf->alt_lna_conf = | ||
279 | ATH_ANT_DIV_COMB_LNA1; | ||
280 | else | ||
281 | div_ant_conf->alt_lna_conf = | ||
282 | ATH_ANT_DIV_COMB_LNA2; | ||
283 | else | ||
284 | /* Set alt to A+B or A-B */ | ||
285 | div_ant_conf->alt_lna_conf = | ||
286 | antcomb->first_quick_scan_conf; | ||
287 | } else if (antcomb->second_ratio) { | ||
288 | /* second alt */ | ||
289 | if ((antcomb->second_quick_scan_conf == | ||
290 | ATH_ANT_DIV_COMB_LNA1) || | ||
291 | (antcomb->second_quick_scan_conf == | ||
292 | ATH_ANT_DIV_COMB_LNA2)) | ||
293 | /* Set alt LNA1 or LNA2 */ | ||
294 | if (div_ant_conf->main_lna_conf == | ||
295 | ATH_ANT_DIV_COMB_LNA2) | ||
296 | div_ant_conf->alt_lna_conf = | ||
297 | ATH_ANT_DIV_COMB_LNA1; | ||
298 | else | ||
299 | div_ant_conf->alt_lna_conf = | ||
300 | ATH_ANT_DIV_COMB_LNA2; | ||
301 | else | ||
302 | /* Set alt to A+B or A-B */ | ||
303 | div_ant_conf->alt_lna_conf = | ||
304 | antcomb->second_quick_scan_conf; | ||
305 | } else { | ||
306 | /* main is largest */ | ||
307 | if ((antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) || | ||
308 | (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2)) | ||
309 | /* Set alt LNA1 or LNA2 */ | ||
310 | if (div_ant_conf->main_lna_conf == | ||
311 | ATH_ANT_DIV_COMB_LNA2) | ||
312 | div_ant_conf->alt_lna_conf = | ||
313 | ATH_ANT_DIV_COMB_LNA1; | ||
314 | else | ||
315 | div_ant_conf->alt_lna_conf = | ||
316 | ATH_ANT_DIV_COMB_LNA2; | ||
317 | else | ||
318 | /* Set alt to A+B or A-B */ | ||
319 | div_ant_conf->alt_lna_conf = antcomb->main_conf; | ||
320 | } | ||
321 | break; | 306 | break; |
322 | default: | 307 | default: |
323 | break; | 308 | break; |