diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar9003_phy.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9003_phy.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c index 11f53589a3f3..d39b79f5e841 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c | |||
@@ -701,6 +701,54 @@ static int ar9550_hw_get_modes_txgain_index(struct ath_hw *ah, | |||
701 | return ret; | 701 | return ret; |
702 | } | 702 | } |
703 | 703 | ||
704 | static void ar9003_doubler_fix(struct ath_hw *ah) | ||
705 | { | ||
706 | if (AR_SREV_9300(ah) || AR_SREV_9580(ah) || AR_SREV_9550(ah)) { | ||
707 | REG_RMW(ah, AR_PHY_65NM_CH0_RXTX2, | ||
708 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
709 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S, 0); | ||
710 | REG_RMW(ah, AR_PHY_65NM_CH1_RXTX2, | ||
711 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
712 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S, 0); | ||
713 | REG_RMW(ah, AR_PHY_65NM_CH2_RXTX2, | ||
714 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
715 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S, 0); | ||
716 | |||
717 | udelay(200); | ||
718 | |||
719 | REG_CLR_BIT(ah, AR_PHY_65NM_CH0_RXTX2, | ||
720 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK); | ||
721 | REG_CLR_BIT(ah, AR_PHY_65NM_CH1_RXTX2, | ||
722 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK); | ||
723 | REG_CLR_BIT(ah, AR_PHY_65NM_CH2_RXTX2, | ||
724 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK); | ||
725 | |||
726 | udelay(1); | ||
727 | |||
728 | REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_RXTX2, | ||
729 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK, 1); | ||
730 | REG_RMW_FIELD(ah, AR_PHY_65NM_CH1_RXTX2, | ||
731 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK, 1); | ||
732 | REG_RMW_FIELD(ah, AR_PHY_65NM_CH2_RXTX2, | ||
733 | AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK, 1); | ||
734 | |||
735 | udelay(200); | ||
736 | |||
737 | REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_SYNTH12, | ||
738 | AR_PHY_65NM_CH0_SYNTH12_VREFMUL3, 0xf); | ||
739 | |||
740 | REG_RMW(ah, AR_PHY_65NM_CH0_RXTX2, 0, | ||
741 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
742 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S); | ||
743 | REG_RMW(ah, AR_PHY_65NM_CH1_RXTX2, 0, | ||
744 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
745 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S); | ||
746 | REG_RMW(ah, AR_PHY_65NM_CH2_RXTX2, 0, | ||
747 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHON_MASK_S | | ||
748 | 1 << AR_PHY_65NM_CH0_RXTX2_SYNTHOVR_MASK_S); | ||
749 | } | ||
750 | } | ||
751 | |||
704 | static int ar9003_hw_process_ini(struct ath_hw *ah, | 752 | static int ar9003_hw_process_ini(struct ath_hw *ah, |
705 | struct ath9k_channel *chan) | 753 | struct ath9k_channel *chan) |
706 | { | 754 | { |
@@ -726,6 +774,8 @@ static int ar9003_hw_process_ini(struct ath_hw *ah, | |||
726 | modesIndex); | 774 | modesIndex); |
727 | } | 775 | } |
728 | 776 | ||
777 | ar9003_doubler_fix(ah); | ||
778 | |||
729 | /* | 779 | /* |
730 | * RXGAIN initvals. | 780 | * RXGAIN initvals. |
731 | */ | 781 | */ |