aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2013-08-01 02:23:19 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-08-01 15:52:04 -0400
commit552bde40dd4c5d5b3e48e950e6bf2bfb0de6ab1f (patch)
treee90b27b51474e9077a754648650ecedef5c54562 /drivers/net/wireless/ath/ath9k
parent9383be420460908df0118d54894ef65317821f3a (diff)
ath9k: Add ALT check for cards with GROUP-3 config
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')
-rw-r--r--drivers/net/wireless/ath/ath9k/antenna.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/drivers/net/wireless/ath/ath9k/antenna.c b/drivers/net/wireless/ath/ath9k/antenna.c
index 69674d4ee496..cfb43ccc0852 100644
--- a/drivers/net/wireless/ath/ath9k/antenna.c
+++ b/drivers/net/wireless/ath/ath9k/antenna.c
@@ -25,28 +25,45 @@ static inline bool ath_is_alt_ant_ratio_better(int alt_ratio, int maxdelta,
25 (alt_rssi_avg > main_rssi_avg + mindelta)) && (pkt_count > 50); 25 (alt_rssi_avg > main_rssi_avg + mindelta)) && (pkt_count > 50);
26} 26}
27 27
28static inline bool ath_ant_div_comb_alt_check(u8 div_group, int alt_ratio, 28static inline bool ath_ant_div_comb_alt_check(struct ath_hw_antcomb_conf conf,
29 int curr_main_set, int curr_alt_set, 29 int alt_ratio, int alt_rssi_avg,
30 int alt_rssi_avg, int main_rssi_avg) 30 int main_rssi_avg)
31{ 31{
32 bool result = false; 32 bool result, set1, set2;
33 switch (div_group) { 33
34 result = set1 = set2 = false;
35
36 if (conf.main_lna_conf == ATH_ANT_DIV_COMB_LNA2 &&
37 conf.alt_lna_conf == ATH_ANT_DIV_COMB_LNA1)
38 set1 = true;
39
40 if (conf.main_lna_conf == ATH_ANT_DIV_COMB_LNA1 &&
41 conf.alt_lna_conf == ATH_ANT_DIV_COMB_LNA2)
42 set2 = true;
43
44 switch (conf.div_group) {
34 case 0: 45 case 0:
35 if (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO) 46 if (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)
36 result = true; 47 result = true;
37 break; 48 break;
38 case 1: 49 case 1:
39 case 2: 50 case 2:
40 if ((((curr_main_set == ATH_ANT_DIV_COMB_LNA2) && 51 if (alt_rssi_avg < 4)
41 (curr_alt_set == ATH_ANT_DIV_COMB_LNA1) && 52 break;
42 (alt_rssi_avg >= (main_rssi_avg - 5))) || 53
43 ((curr_main_set == ATH_ANT_DIV_COMB_LNA1) && 54 if ((set1 && (alt_rssi_avg >= (main_rssi_avg - 5))) ||
44 (curr_alt_set == ATH_ANT_DIV_COMB_LNA2) && 55 (set2 && (alt_rssi_avg >= (main_rssi_avg - 2))))
45 (alt_rssi_avg >= (main_rssi_avg - 2)))) &&
46 (alt_rssi_avg >= 4))
47 result = true; 56 result = true;
48 else 57
49 result = false; 58 break;
59 case 3:
60 if (alt_rssi_avg < 4)
61 break;
62
63 if ((set1 && (alt_rssi_avg >= (main_rssi_avg - 3))) ||
64 (set2 && (alt_rssi_avg >= (main_rssi_avg + 3))))
65 result = true;
66
50 break; 67 break;
51 } 68 }
52 69
@@ -632,9 +649,8 @@ void ath_ant_comb_scan(struct ath_softc *sc, struct ath_rx_status *rs)
632 } 649 }
633 650
634 if (!antcomb->scan) { 651 if (!antcomb->scan) {
635 if (ath_ant_div_comb_alt_check(div_ant_conf.div_group, 652 if (ath_ant_div_comb_alt_check(div_ant_conf, alt_ratio,
636 alt_ratio, curr_main_set, curr_alt_set, 653 alt_rssi_avg, main_rssi_avg)) {
637 alt_rssi_avg, main_rssi_avg)) {
638 if (curr_alt_set == ATH_ANT_DIV_COMB_LNA2) { 654 if (curr_alt_set == ATH_ANT_DIV_COMB_LNA2) {
639 /* Switch main and alt LNA */ 655 /* Switch main and alt LNA */
640 div_ant_conf.main_lna_conf = 656 div_ant_conf.main_lna_conf =