diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2013-09-02 04:29:03 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-09-26 15:13:28 -0400 |
commit | f96bd2ad2259dc5d94fddffe37c668017209712b (patch) | |
tree | 6856e81d536ba88f7997ca8b2d62a92f3b847600 /drivers/net | |
parent | 6ac2150927399ae0f6d34430145bddc761cbb1a0 (diff) |
ath9k: Add support for AR9565 v1.0.1 LNA diversity
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/antenna.c | 36 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_phy.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 1 |
5 files changed, 15 insertions, 30 deletions
diff --git a/drivers/net/wireless/ath/ath9k/antenna.c b/drivers/net/wireless/ath/ath9k/antenna.c index dd1cc73d7946..bd048cc69a33 100644 --- a/drivers/net/wireless/ath/ath9k/antenna.c +++ b/drivers/net/wireless/ath/ath9k/antenna.c | |||
@@ -332,7 +332,7 @@ static void ath_select_ant_div_from_quick_scan(struct ath_ant_comb *antcomb, | |||
332 | } | 332 | } |
333 | 333 | ||
334 | if (antcomb->rssi_lna2 > antcomb->rssi_lna1 + | 334 | if (antcomb->rssi_lna2 > antcomb->rssi_lna1 + |
335 | ATH_ANT_DIV_COMB_LNA1_LNA2_SWITCH_DELTA) | 335 | div_ant_conf->lna1_lna2_switch_delta) |
336 | div_ant_conf->main_lna_conf = ATH_ANT_DIV_COMB_LNA2; | 336 | div_ant_conf->main_lna_conf = ATH_ANT_DIV_COMB_LNA2; |
337 | else | 337 | else |
338 | div_ant_conf->main_lna_conf = ATH_ANT_DIV_COMB_LNA1; | 338 | div_ant_conf->main_lna_conf = ATH_ANT_DIV_COMB_LNA1; |
@@ -554,42 +554,22 @@ static void ath_ant_div_conf_fast_divbias(struct ath_hw_antcomb_conf *ant_conf, | |||
554 | ant_conf->fast_div_bias = 0x1; | 554 | ant_conf->fast_div_bias = 0x1; |
555 | break; | 555 | break; |
556 | case 0x10: /* LNA2 A-B */ | 556 | case 0x10: /* LNA2 A-B */ |
557 | if ((antcomb->scan == 0) && | 557 | ant_conf->fast_div_bias = 0x2; |
558 | (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) { | ||
559 | ant_conf->fast_div_bias = 0x3f; | ||
560 | } else { | ||
561 | ant_conf->fast_div_bias = 0x1; | ||
562 | } | ||
563 | break; | 558 | break; |
564 | case 0x12: /* LNA2 LNA1 */ | 559 | case 0x12: /* LNA2 LNA1 */ |
565 | ant_conf->fast_div_bias = 0x39; | 560 | ant_conf->fast_div_bias = 0x3f; |
566 | break; | 561 | break; |
567 | case 0x13: /* LNA2 A+B */ | 562 | case 0x13: /* LNA2 A+B */ |
568 | if ((antcomb->scan == 0) && | 563 | ant_conf->fast_div_bias = 0x2; |
569 | (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) { | ||
570 | ant_conf->fast_div_bias = 0x3f; | ||
571 | } else { | ||
572 | ant_conf->fast_div_bias = 0x1; | ||
573 | } | ||
574 | break; | 564 | break; |
575 | case 0x20: /* LNA1 A-B */ | 565 | case 0x20: /* LNA1 A-B */ |
576 | if ((antcomb->scan == 0) && | 566 | ant_conf->fast_div_bias = 0x3; |
577 | (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) { | ||
578 | ant_conf->fast_div_bias = 0x3f; | ||
579 | } else { | ||
580 | ant_conf->fast_div_bias = 0x4; | ||
581 | } | ||
582 | break; | 567 | break; |
583 | case 0x21: /* LNA1 LNA2 */ | 568 | case 0x21: /* LNA1 LNA2 */ |
584 | ant_conf->fast_div_bias = 0x6; | 569 | ant_conf->fast_div_bias = 0x3; |
585 | break; | 570 | break; |
586 | case 0x23: /* LNA1 A+B */ | 571 | case 0x23: /* LNA1 A+B */ |
587 | if ((antcomb->scan == 0) && | 572 | ant_conf->fast_div_bias = 0x3; |
588 | (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO)) { | ||
589 | ant_conf->fast_div_bias = 0x3f; | ||
590 | } else { | ||
591 | ant_conf->fast_div_bias = 0x6; | ||
592 | } | ||
593 | break; | 573 | break; |
594 | case 0x30: /* A+B A-B */ | 574 | case 0x30: /* A+B A-B */ |
595 | ant_conf->fast_div_bias = 0x1; | 575 | ant_conf->fast_div_bias = 0x1; |
@@ -638,7 +618,7 @@ static void ath_ant_try_scan(struct ath_ant_comb *antcomb, | |||
638 | antcomb->rssi_sub = alt_rssi_avg; | 618 | antcomb->rssi_sub = alt_rssi_avg; |
639 | antcomb->scan = false; | 619 | antcomb->scan = false; |
640 | if (antcomb->rssi_lna2 > | 620 | if (antcomb->rssi_lna2 > |
641 | (antcomb->rssi_lna1 + ATH_ANT_DIV_COMB_LNA1_LNA2_SWITCH_DELTA)) { | 621 | (antcomb->rssi_lna1 + conf->lna1_lna2_switch_delta)) { |
642 | /* use LNA2 as main LNA */ | 622 | /* use LNA2 as main LNA */ |
643 | if ((antcomb->rssi_add > antcomb->rssi_lna1) && | 623 | if ((antcomb->rssi_add > antcomb->rssi_lna1) && |
644 | (antcomb->rssi_add > antcomb->rssi_sub)) { | 624 | (antcomb->rssi_add > antcomb->rssi_sub)) { |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c index 1fc1fa955d44..7a5569b679b2 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c | |||
@@ -532,6 +532,7 @@ static void ar9002_hw_antdiv_comb_conf_get(struct ath_hw *ah, | |||
532 | AR_PHY_9285_ANT_DIV_ALT_LNACONF_S; | 532 | AR_PHY_9285_ANT_DIV_ALT_LNACONF_S; |
533 | antconf->fast_div_bias = (regval & AR_PHY_9285_FAST_DIV_BIAS) >> | 533 | antconf->fast_div_bias = (regval & AR_PHY_9285_FAST_DIV_BIAS) >> |
534 | AR_PHY_9285_FAST_DIV_BIAS_S; | 534 | AR_PHY_9285_FAST_DIV_BIAS_S; |
535 | antconf->lna1_lna2_switch_delta = -1; | ||
535 | antconf->lna1_lna2_delta = -3; | 536 | antconf->lna1_lna2_delta = -3; |
536 | antconf->div_group = 0; | 537 | antconf->div_group = 0; |
537 | } | 538 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index 9ca9b2cd9cb6..b8a279e889c1 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
@@ -1375,15 +1375,19 @@ static void ar9003_hw_antdiv_comb_conf_get(struct ath_hw *ah, | |||
1375 | AR_PHY_ANT_FAST_DIV_BIAS_S; | 1375 | AR_PHY_ANT_FAST_DIV_BIAS_S; |
1376 | 1376 | ||
1377 | if (AR_SREV_9330_11(ah)) { | 1377 | if (AR_SREV_9330_11(ah)) { |
1378 | antconf->lna1_lna2_switch_delta = -1; | ||
1378 | antconf->lna1_lna2_delta = -9; | 1379 | antconf->lna1_lna2_delta = -9; |
1379 | antconf->div_group = 1; | 1380 | antconf->div_group = 1; |
1380 | } else if (AR_SREV_9485(ah)) { | 1381 | } else if (AR_SREV_9485(ah)) { |
1382 | antconf->lna1_lna2_switch_delta = -1; | ||
1381 | antconf->lna1_lna2_delta = -9; | 1383 | antconf->lna1_lna2_delta = -9; |
1382 | antconf->div_group = 2; | 1384 | antconf->div_group = 2; |
1383 | } else if (AR_SREV_9565(ah)) { | 1385 | } else if (AR_SREV_9565(ah)) { |
1384 | antconf->lna1_lna2_delta = -3; | 1386 | antconf->lna1_lna2_switch_delta = 3; |
1387 | antconf->lna1_lna2_delta = -9; | ||
1385 | antconf->div_group = 3; | 1388 | antconf->div_group = 3; |
1386 | } else { | 1389 | } else { |
1390 | antconf->lna1_lna2_switch_delta = -1; | ||
1387 | antconf->lna1_lna2_delta = -3; | 1391 | antconf->lna1_lna2_delta = -3; |
1388 | antconf->div_group = 0; | 1392 | antconf->div_group = 0; |
1389 | } | 1393 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 2ee35f677c0e..74a87702979a 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -581,7 +581,6 @@ static inline void ath_fill_led_pin(struct ath_softc *sc) | |||
581 | #define ATH_ANT_DIV_COMB_ALT_ANT_RATIO_LOW_RSSI 50 | 581 | #define ATH_ANT_DIV_COMB_ALT_ANT_RATIO_LOW_RSSI 50 |
582 | #define ATH_ANT_DIV_COMB_ALT_ANT_RATIO2_LOW_RSSI 50 | 582 | #define ATH_ANT_DIV_COMB_ALT_ANT_RATIO2_LOW_RSSI 50 |
583 | 583 | ||
584 | #define ATH_ANT_DIV_COMB_LNA1_LNA2_SWITCH_DELTA -1 | ||
585 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_HI -4 | 584 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_HI -4 |
586 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_MID -2 | 585 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_MID -2 |
587 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_LOW 2 | 586 | #define ATH_ANT_DIV_COMB_LNA1_DELTA_LOW 2 |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 69a907b55a73..88f67c39f94c 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -558,6 +558,7 @@ struct ath_hw_antcomb_conf { | |||
558 | u8 main_gaintb; | 558 | u8 main_gaintb; |
559 | u8 alt_gaintb; | 559 | u8 alt_gaintb; |
560 | int lna1_lna2_delta; | 560 | int lna1_lna2_delta; |
561 | int lna1_lna2_switch_delta; | ||
561 | u8 div_group; | 562 | u8 div_group; |
562 | }; | 563 | }; |
563 | 564 | ||