diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2013-08-01 02:23:19 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-08-01 15:52:04 -0400 |
commit | 552bde40dd4c5d5b3e48e950e6bf2bfb0de6ab1f (patch) | |
tree | e90b27b51474e9077a754648650ecedef5c54562 /drivers/net/wireless/ath/ath9k | |
parent | 9383be420460908df0118d54894ef65317821f3a (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.c | 50 |
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 | ||
28 | static inline bool ath_ant_div_comb_alt_check(u8 div_group, int alt_ratio, | 28 | static 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 = |