aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2013-09-02 04:29:03 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-09-26 15:13:28 -0400
commitf96bd2ad2259dc5d94fddffe37c668017209712b (patch)
tree6856e81d536ba88f7997ca8b2d62a92f3b847600 /drivers/net
parent6ac2150927399ae0f6d34430145bddc761cbb1a0 (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.c36
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9002_phy.c1
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_phy.c6
-rw-r--r--drivers/net/wireless/ath/ath9k/ath9k.h1
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.h1
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