Lines Matching defs:antcomb
71 static inline bool ath_is_alt_ant_ratio_better(struct ath_ant_comb *antcomb,
82 if (alt_ratio >= antcomb->ant_ratio2 &&
83 alt_rssi_avg >= antcomb->low_rssi_thresh &&
91 struct ath_ant_comb *antcomb,
114 if (alt_rssi_avg < 4 || alt_rssi_avg < antcomb->low_rssi_thresh)
119 (alt_ratio > antcomb->ant_ratio))
124 if (alt_rssi_avg < 4 || alt_rssi_avg < antcomb->low_rssi_thresh)
129 (alt_ratio > antcomb->ant_ratio))
138 static void ath_lnaconf_alt_good_scan(struct ath_ant_comb *antcomb,
142 antcomb->quick_scan_cnt = 0;
145 antcomb->rssi_lna2 = main_rssi_avg;
147 antcomb->rssi_lna1 = main_rssi_avg;
151 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
152 antcomb->first_quick_scan_conf =
154 antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
157 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
158 antcomb->first_quick_scan_conf =
160 antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA2;
163 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA2;
164 antcomb->first_quick_scan_conf =
166 antcomb->second_quick_scan_conf =
170 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1;
171 antcomb->first_quick_scan_conf =
173 antcomb->second_quick_scan_conf =
177 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
178 antcomb->first_quick_scan_conf =
180 antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
183 antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
184 antcomb->first_quick_scan_conf =
186 antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA2;
193 static void ath_ant_set_alt_ratio(struct ath_ant_comb *antcomb,
197 if (antcomb->first_ratio && antcomb->second_ratio) {
198 if (antcomb->rssi_second > antcomb->rssi_third) {
200 if ((antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) ||
201 (antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2))
210 antcomb->first_quick_scan_conf;
211 } else if ((antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) ||
212 (antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2)) {
220 conf->alt_lna_conf = antcomb->second_quick_scan_conf;
222 } else if (antcomb->first_ratio) {
224 if ((antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) ||
225 (antcomb->first_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2))
233 conf->alt_lna_conf = antcomb->first_quick_scan_conf;
234 } else if (antcomb->second_ratio) {
236 if ((antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA1) ||
237 (antcomb->second_quick_scan_conf == ATH_ANT_DIV_COMB_LNA2))
245 conf->alt_lna_conf = antcomb->second_quick_scan_conf;
248 if ((antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) ||
249 (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2))
257 conf->alt_lna_conf = antcomb->main_conf;
261 static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb,
267 switch (antcomb->quick_scan_cnt) {
270 div_ant_conf->main_lna_conf = antcomb->main_conf;
271 div_ant_conf->alt_lna_conf = antcomb->first_quick_scan_conf;
275 div_ant_conf->main_lna_conf = antcomb->main_conf;
276 div_ant_conf->alt_lna_conf = antcomb->second_quick_scan_conf;
277 antcomb->rssi_first = main_rssi_avg;
278 antcomb->rssi_second = alt_rssi_avg;
280 if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) {
282 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
286 antcomb->total_pkt_count))
287 antcomb->first_ratio = true;
289 antcomb->first_ratio = false;
290 } else if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2) {
291 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
295 antcomb->total_pkt_count))
296 antcomb->first_ratio = true;
298 antcomb->first_ratio = false;
300 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
304 antcomb->total_pkt_count))
305 antcomb->first_ratio = true;
307 antcomb->first_ratio = false;
311 antcomb->alt_good = false;
312 antcomb->scan_not_start = false;
313 antcomb->scan = false;
314 antcomb->rssi_first = main_rssi_avg;
315 antcomb->rssi_third = alt_rssi_avg;
317 switch(antcomb->second_quick_scan_conf) {
319 antcomb->rssi_lna1 = alt_rssi_avg;
322 antcomb->rssi_lna2 = alt_rssi_avg;
325 if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2)
326 antcomb->rssi_lna2 = main_rssi_avg;
327 else if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1)
328 antcomb->rssi_lna1 = main_rssi_avg;
334 if (antcomb->rssi_lna2 > antcomb->rssi_lna1 +
340 if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA1) {
341 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
345 antcomb->total_pkt_count))
346 antcomb->second_ratio = true;
348 antcomb->second_ratio = false;
349 } else if (antcomb->main_conf == ATH_ANT_DIV_COMB_LNA2) {
350 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
354 antcomb->total_pkt_count))
355 antcomb->second_ratio = true;
357 antcomb->second_ratio = false;
359 if (ath_is_alt_ant_ratio_better(antcomb, alt_ratio,
363 antcomb->total_pkt_count))
364 antcomb->second_ratio = true;
366 antcomb->second_ratio = false;
369 ath_ant_set_alt_ratio(antcomb, div_ant_conf);
378 struct ath_ant_comb *antcomb,
441 if (!(antcomb->scan) &&
451 if (!(antcomb->scan) &&
458 if (!(antcomb->scan) &&
468 if (!(antcomb->scan) &&
500 if (!antcomb->scan && (alt_ratio > antcomb->ant_ratio))
509 if (!antcomb->scan && (alt_ratio > antcomb->ant_ratio))
515 if (!antcomb->scan && (alt_ratio > antcomb->ant_ratio))
524 if (!antcomb->scan && (alt_ratio > antcomb->ant_ratio))
542 if (antcomb->fast_div_bias)
543 ant_conf->fast_div_bias = antcomb->fast_div_bias;
589 static void ath_ant_try_scan(struct ath_ant_comb *antcomb,
596 antcomb->rssi_lna2 = alt_rssi_avg;
597 antcomb->rssi_lna1 = main_rssi_avg;
598 antcomb->scan = true;
604 antcomb->rssi_lna1 = alt_rssi_avg;
605 antcomb->rssi_lna2 = main_rssi_avg;
606 antcomb->scan = true;
612 antcomb->rssi_add = alt_rssi_avg;
613 antcomb->scan = true;
618 antcomb->rssi_sub = alt_rssi_avg;
619 antcomb->scan = false;
620 if (antcomb->rssi_lna2 >
621 (antcomb->rssi_lna1 + conf->lna1_lna2_switch_delta)) {
623 if ((antcomb->rssi_add > antcomb->rssi_lna1) &&
624 (antcomb->rssi_add > antcomb->rssi_sub)) {
628 } else if (antcomb->rssi_sub >
629 antcomb->rssi_lna1) {
640 if ((antcomb->rssi_add > antcomb->rssi_lna2) &&
641 (antcomb->rssi_add > antcomb->rssi_sub)) {
645 } else if (antcomb->rssi_sub >
646 antcomb->rssi_lna1) {
663 struct ath_ant_comb *antcomb,
670 if (ath_ant_div_comb_alt_check(div_ant_conf, antcomb, alt_ratio,
700 static bool ath_ant_short_scan_check(struct ath_ant_comb *antcomb)
704 if (!antcomb->scan || !antcomb->alt_good)
707 if (time_after(jiffies, antcomb->scan_start_time +
711 if (antcomb->total_pkt_count == ATH_ANT_DIV_COMB_SHORT_SCAN_PKTCOUNT) {
712 alt_ratio = ((antcomb->alt_recv_cnt * 100) /
713 antcomb->total_pkt_count);
714 if (alt_ratio < antcomb->ant_ratio)
724 struct ath_ant_comb *antcomb = &sc->ant_comb;
737 if (alt_rssi >= antcomb->low_rssi_thresh) {
738 antcomb->ant_ratio = ATH_ANT_DIV_COMB_ALT_ANT_RATIO;
739 antcomb->ant_ratio2 = ATH_ANT_DIV_COMB_ALT_ANT_RATIO2;
741 antcomb->ant_ratio = ATH_ANT_DIV_COMB_ALT_ANT_RATIO_LOW_RSSI;
742 antcomb->ant_ratio2 = ATH_ANT_DIV_COMB_ALT_ANT_RATIO2_LOW_RSSI;
747 antcomb->total_pkt_count++;
748 antcomb->main_total_rssi += main_rssi;
749 antcomb->alt_total_rssi += alt_rssi;
752 antcomb->main_recv_cnt++;
754 antcomb->alt_recv_cnt++;
766 short_scan = ath_ant_short_scan_check(antcomb);
768 if (((antcomb->total_pkt_count < ATH_ANT_DIV_COMB_MAX_PKTCOUNT) ||
772 if (antcomb->total_pkt_count) {
773 alt_ratio = ((antcomb->alt_recv_cnt * 100) /
774 antcomb->total_pkt_count);
775 main_rssi_avg = (antcomb->main_total_rssi /
776 antcomb->total_pkt_count);
777 alt_rssi_avg = (antcomb->alt_total_rssi /
778 antcomb->total_pkt_count);
784 antcomb->count++;
786 if (antcomb->count == ATH_ANT_DIV_COMB_MAX_COUNT) {
787 if (alt_ratio > antcomb->ant_ratio) {
788 ath_lnaconf_alt_good_scan(antcomb, div_ant_conf,
790 antcomb->alt_good = true;
792 antcomb->alt_good = false;
795 antcomb->count = 0;
796 antcomb->scan = true;
797 antcomb->scan_not_start = true;
800 if (!antcomb->scan) {
801 ret = ath_ant_try_switch(&div_ant_conf, antcomb, alt_ratio,
808 if (!antcomb->scan &&
812 if (!antcomb->scan_not_start) {
813 ath_ant_try_scan(antcomb, &div_ant_conf, curr_alt_set,
816 if (!antcomb->alt_good) {
817 antcomb->scan_not_start = false;
832 ath_select_ant_div_from_quick_scan(antcomb, &div_ant_conf,
835 antcomb->quick_scan_cnt++;
839 ath_ant_div_conf_fast_divbias(&div_ant_conf, antcomb, alt_ratio);
843 antcomb->scan_start_time = jiffies;
844 antcomb->total_pkt_count = 0;
845 antcomb->main_total_rssi = 0;
846 antcomb->alt_total_rssi = 0;
847 antcomb->main_recv_cnt = 0;
848 antcomb->alt_recv_cnt = 0;