diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9002_phy.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_phy.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c index f4003512d8d5..1fc1fa955d44 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c | |||
@@ -555,6 +555,69 @@ static void ar9002_hw_antdiv_comb_conf_set(struct ath_hw *ah, | |||
555 | REG_WRITE(ah, AR_PHY_MULTICHAIN_GAIN_CTL, regval); | 555 | REG_WRITE(ah, AR_PHY_MULTICHAIN_GAIN_CTL, regval); |
556 | } | 556 | } |
557 | 557 | ||
558 | #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT | ||
559 | |||
560 | static void ar9002_hw_set_bt_ant_diversity(struct ath_hw *ah, bool enable) | ||
561 | { | ||
562 | struct ath_btcoex_hw *btcoex = &ah->btcoex_hw; | ||
563 | u8 antdiv_ctrl1, antdiv_ctrl2; | ||
564 | u32 regval; | ||
565 | |||
566 | if (enable) { | ||
567 | antdiv_ctrl1 = ATH_BT_COEX_ANTDIV_CONTROL1_ENABLE; | ||
568 | antdiv_ctrl2 = ATH_BT_COEX_ANTDIV_CONTROL2_ENABLE; | ||
569 | |||
570 | /* | ||
571 | * Don't disable BT ant to allow BB to control SWCOM. | ||
572 | */ | ||
573 | btcoex->bt_coex_mode2 &= (~(AR_BT_DISABLE_BT_ANT)); | ||
574 | REG_WRITE(ah, AR_BT_COEX_MODE2, btcoex->bt_coex_mode2); | ||
575 | |||
576 | REG_WRITE(ah, AR_PHY_SWITCH_COM, ATH_BT_COEX_ANT_DIV_SWITCH_COM); | ||
577 | REG_RMW(ah, AR_PHY_SWITCH_CHAIN_0, 0, 0xf0000000); | ||
578 | } else { | ||
579 | /* | ||
580 | * Disable antenna diversity, use LNA1 only. | ||
581 | */ | ||
582 | antdiv_ctrl1 = ATH_BT_COEX_ANTDIV_CONTROL1_FIXED_A; | ||
583 | antdiv_ctrl2 = ATH_BT_COEX_ANTDIV_CONTROL2_FIXED_A; | ||
584 | |||
585 | /* | ||
586 | * Disable BT Ant. to allow concurrent BT and WLAN receive. | ||
587 | */ | ||
588 | btcoex->bt_coex_mode2 |= AR_BT_DISABLE_BT_ANT; | ||
589 | REG_WRITE(ah, AR_BT_COEX_MODE2, btcoex->bt_coex_mode2); | ||
590 | |||
591 | /* | ||
592 | * Program SWCOM table to make sure RF switch always parks | ||
593 | * at BT side. | ||
594 | */ | ||
595 | REG_WRITE(ah, AR_PHY_SWITCH_COM, 0); | ||
596 | REG_RMW(ah, AR_PHY_SWITCH_CHAIN_0, 0, 0xf0000000); | ||
597 | } | ||
598 | |||
599 | regval = REG_READ(ah, AR_PHY_MULTICHAIN_GAIN_CTL); | ||
600 | regval &= (~(AR_PHY_9285_ANT_DIV_CTL_ALL)); | ||
601 | /* | ||
602 | * Clear ant_fast_div_bias [14:9] since for WB195, | ||
603 | * the main LNA is always LNA1. | ||
604 | */ | ||
605 | regval &= (~(AR_PHY_9285_FAST_DIV_BIAS)); | ||
606 | regval |= SM(antdiv_ctrl1, AR_PHY_9285_ANT_DIV_CTL); | ||
607 | regval |= SM(antdiv_ctrl2, AR_PHY_9285_ANT_DIV_ALT_LNACONF); | ||
608 | regval |= SM((antdiv_ctrl2 >> 2), AR_PHY_9285_ANT_DIV_MAIN_LNACONF); | ||
609 | regval |= SM((antdiv_ctrl1 >> 1), AR_PHY_9285_ANT_DIV_ALT_GAINTB); | ||
610 | regval |= SM((antdiv_ctrl1 >> 2), AR_PHY_9285_ANT_DIV_MAIN_GAINTB); | ||
611 | REG_WRITE(ah, AR_PHY_MULTICHAIN_GAIN_CTL, regval); | ||
612 | |||
613 | regval = REG_READ(ah, AR_PHY_CCK_DETECT); | ||
614 | regval &= (~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV); | ||
615 | regval |= SM((antdiv_ctrl1 >> 3), AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV); | ||
616 | REG_WRITE(ah, AR_PHY_CCK_DETECT, regval); | ||
617 | } | ||
618 | |||
619 | #endif | ||
620 | |||
558 | static void ar9002_hw_spectral_scan_config(struct ath_hw *ah, | 621 | static void ar9002_hw_spectral_scan_config(struct ath_hw *ah, |
559 | struct ath_spec_scan *param) | 622 | struct ath_spec_scan *param) |
560 | { | 623 | { |
@@ -634,5 +697,9 @@ void ar9002_hw_attach_phy_ops(struct ath_hw *ah) | |||
634 | ops->spectral_scan_trigger = ar9002_hw_spectral_scan_trigger; | 697 | ops->spectral_scan_trigger = ar9002_hw_spectral_scan_trigger; |
635 | ops->spectral_scan_wait = ar9002_hw_spectral_scan_wait; | 698 | ops->spectral_scan_wait = ar9002_hw_spectral_scan_wait; |
636 | 699 | ||
700 | #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT | ||
701 | ops->set_bt_ant_diversity = ar9002_hw_set_bt_ant_diversity; | ||
702 | #endif | ||
703 | |||
637 | ar9002_hw_set_nf_limits(ah); | 704 | ar9002_hw_set_nf_limits(ah); |
638 | } | 705 | } |