|
@@ -25,28 +25,45 @@ static inline bool ath_is_alt_ant_ratio_better(int alt_ratio, int maxdelta,
|
|
|
(alt_rssi_avg > main_rssi_avg + mindelta)) && (pkt_count > 50);
|
|
|
}
|
|
|
|
|
|
-static inline bool ath_ant_div_comb_alt_check(u8 div_group, int alt_ratio,
|
|
|
- int curr_main_set, int curr_alt_set,
|
|
|
- int alt_rssi_avg, int main_rssi_avg)
|
|
|
+static inline bool ath_ant_div_comb_alt_check(struct ath_hw_antcomb_conf conf,
|
|
|
+ int alt_ratio, int alt_rssi_avg,
|
|
|
+ int main_rssi_avg)
|
|
|
{
|
|
|
- bool result = false;
|
|
|
- switch (div_group) {
|
|
|
+ bool result, set1, set2;
|
|
|
+
|
|
|
+ result = set1 = set2 = false;
|
|
|
+
|
|
|
+ if (conf.main_lna_conf == ATH_ANT_DIV_COMB_LNA2 &&
|
|
|
+ conf.alt_lna_conf == ATH_ANT_DIV_COMB_LNA1)
|
|
|
+ set1 = true;
|
|
|
+
|
|
|
+ if (conf.main_lna_conf == ATH_ANT_DIV_COMB_LNA1 &&
|
|
|
+ conf.alt_lna_conf == ATH_ANT_DIV_COMB_LNA2)
|
|
|
+ set2 = true;
|
|
|
+
|
|
|
+ switch (conf.div_group) {
|
|
|
case 0:
|
|
|
if (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)
|
|
|
result = true;
|
|
|
break;
|
|
|
case 1:
|
|
|
case 2:
|
|
|
- if ((((curr_main_set == ATH_ANT_DIV_COMB_LNA2) &&
|
|
|
- (curr_alt_set == ATH_ANT_DIV_COMB_LNA1) &&
|
|
|
- (alt_rssi_avg >= (main_rssi_avg - 5))) ||
|
|
|
- ((curr_main_set == ATH_ANT_DIV_COMB_LNA1) &&
|
|
|
- (curr_alt_set == ATH_ANT_DIV_COMB_LNA2) &&
|
|
|
- (alt_rssi_avg >= (main_rssi_avg - 2)))) &&
|
|
|
- (alt_rssi_avg >= 4))
|
|
|
+ if (alt_rssi_avg < 4)
|
|
|
+ break;
|
|
|
+
|
|
|
+ if ((set1 && (alt_rssi_avg >= (main_rssi_avg - 5))) ||
|
|
|
+ (set2 && (alt_rssi_avg >= (main_rssi_avg - 2))))
|
|
|
result = true;
|
|
|
- else
|
|
|
- result = false;
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ if (alt_rssi_avg < 4)
|
|
|
+ break;
|
|
|
+
|
|
|
+ if ((set1 && (alt_rssi_avg >= (main_rssi_avg - 3))) ||
|
|
|
+ (set2 && (alt_rssi_avg >= (main_rssi_avg + 3))))
|
|
|
+ result = true;
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -632,9 +649,8 @@ void ath_ant_comb_scan(struct ath_softc *sc, struct ath_rx_status *rs)
|
|
|
}
|
|
|
|
|
|
if (!antcomb->scan) {
|
|
|
- if (ath_ant_div_comb_alt_check(div_ant_conf.div_group,
|
|
|
- alt_ratio, curr_main_set, curr_alt_set,
|
|
|
- alt_rssi_avg, main_rssi_avg)) {
|
|
|
+ if (ath_ant_div_comb_alt_check(div_ant_conf, alt_ratio,
|
|
|
+ alt_rssi_avg, main_rssi_avg)) {
|
|
|
if (curr_alt_set == ATH_ANT_DIV_COMB_LNA2) {
|
|
|
/* Switch main and alt LNA */
|
|
|
div_ant_conf.main_lna_conf =
|