diff options
author | Vasanthakumar Thiagarajan <vasanth@atheros.com> | 2011-04-20 00:56:15 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-25 14:50:08 -0400 |
commit | 0b488ac6ece598fda69b5f3348015994129c48b9 (patch) | |
tree | 49f4fe3e24f964e1af6cdc07b2f4803f954b3177 | |
parent | f2f5f2a1cedc803a5a517557d436e6cb10c007de (diff) |
ath9k_hw: Configure pll control register accordingly for AR9340
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 50 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/phy.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/reg.h | 4 |
4 files changed, 56 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index d98b4c6d8dcf..a1eaacee605f 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -716,13 +716,48 @@ static void ath9k_hw_init_pll(struct ath_hw *ah, | |||
716 | 716 | ||
717 | REG_RMW_FIELD(ah, AR_CH0_BB_DPLL3, | 717 | REG_RMW_FIELD(ah, AR_CH0_BB_DPLL3, |
718 | AR_CH0_DPLL3_PHASE_SHIFT, DPLL3_PHASE_SHIFT_VAL); | 718 | AR_CH0_DPLL3_PHASE_SHIFT, DPLL3_PHASE_SHIFT_VAL); |
719 | } else if (AR_SREV_9340(ah)) { | ||
720 | u32 regval, pll2_divint, pll2_divfrac, refdiv; | ||
721 | |||
722 | REG_WRITE(ah, AR_RTC_PLL_CONTROL, 0x1142c); | ||
723 | udelay(1000); | ||
724 | |||
725 | REG_SET_BIT(ah, AR_PHY_PLL_MODE, 0x1 << 16); | ||
726 | udelay(100); | ||
727 | |||
728 | if (ah->is_clk_25mhz) { | ||
729 | pll2_divint = 0x54; | ||
730 | pll2_divfrac = 0x1eb85; | ||
731 | refdiv = 3; | ||
732 | } else { | ||
733 | pll2_divint = 88; | ||
734 | pll2_divfrac = 0; | ||
735 | refdiv = 5; | ||
736 | } | ||
737 | |||
738 | regval = REG_READ(ah, AR_PHY_PLL_MODE); | ||
739 | regval |= (0x1 << 16); | ||
740 | REG_WRITE(ah, AR_PHY_PLL_MODE, regval); | ||
741 | udelay(100); | ||
742 | |||
743 | REG_WRITE(ah, AR_PHY_PLL_CONTROL, (refdiv << 27) | | ||
744 | (pll2_divint << 18) | pll2_divfrac); | ||
745 | udelay(100); | ||
746 | |||
747 | regval = REG_READ(ah, AR_PHY_PLL_MODE); | ||
748 | regval = (regval & 0x80071fff) | (0x1 << 30) | (0x1 << 13) | | ||
749 | (0x4 << 26) | (0x18 << 19); | ||
750 | REG_WRITE(ah, AR_PHY_PLL_MODE, regval); | ||
751 | REG_WRITE(ah, AR_PHY_PLL_MODE, | ||
752 | REG_READ(ah, AR_PHY_PLL_MODE) & 0xfffeffff); | ||
753 | udelay(1000); | ||
719 | } | 754 | } |
720 | 755 | ||
721 | pll = ath9k_hw_compute_pll_control(ah, chan); | 756 | pll = ath9k_hw_compute_pll_control(ah, chan); |
722 | 757 | ||
723 | REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll); | 758 | REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll); |
724 | 759 | ||
725 | if (AR_SREV_9485(ah)) | 760 | if (AR_SREV_9485(ah) || AR_SREV_9340(ah)) |
726 | udelay(1000); | 761 | udelay(1000); |
727 | 762 | ||
728 | /* Switch the core clock for ar9271 to 117Mhz */ | 763 | /* Switch the core clock for ar9271 to 117Mhz */ |
@@ -734,6 +769,19 @@ static void ath9k_hw_init_pll(struct ath_hw *ah, | |||
734 | udelay(RTC_PLL_SETTLE_DELAY); | 769 | udelay(RTC_PLL_SETTLE_DELAY); |
735 | 770 | ||
736 | REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK); | 771 | REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK); |
772 | |||
773 | if (AR_SREV_9340(ah)) { | ||
774 | if (ah->is_clk_25mhz) { | ||
775 | REG_WRITE(ah, AR_RTC_DERIVED_CLK, 0x17c << 1); | ||
776 | REG_WRITE(ah, AR_SLP32_MODE, 0x0010f3d7); | ||
777 | REG_WRITE(ah, AR_SLP32_INC, 0x0001e7ae); | ||
778 | } else { | ||
779 | REG_WRITE(ah, AR_RTC_DERIVED_CLK, 0x261 << 1); | ||
780 | REG_WRITE(ah, AR_SLP32_MODE, 0x0010f400); | ||
781 | REG_WRITE(ah, AR_SLP32_INC, 0x0001e800); | ||
782 | } | ||
783 | udelay(100); | ||
784 | } | ||
737 | } | 785 | } |
738 | 786 | ||
739 | static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah, | 787 | static void ath9k_hw_init_interrupt_masks(struct ath_hw *ah, |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 5a4ba09a2f1c..9b1f415c36bc 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -122,7 +122,7 @@ | |||
122 | #define AR_GPIO_BIT(_gpio) (1 << (_gpio)) | 122 | #define AR_GPIO_BIT(_gpio) (1 << (_gpio)) |
123 | 123 | ||
124 | #define BASE_ACTIVATE_DELAY 100 | 124 | #define BASE_ACTIVATE_DELAY 100 |
125 | #define RTC_PLL_SETTLE_DELAY 100 | 125 | #define RTC_PLL_SETTLE_DELAY (AR_SREV_9340(ah) ? 1000 : 100) |
126 | #define COEF_SCALE_S 24 | 126 | #define COEF_SCALE_S 24 |
127 | #define HT40_CHANNEL_CENTER_SHIFT 10 | 127 | #define HT40_CHANNEL_CENTER_SHIFT 10 |
128 | 128 | ||
diff --git a/drivers/net/wireless/ath/ath9k/phy.h b/drivers/net/wireless/ath/ath9k/phy.h index 8e5fe9d7f174..9441bf8ca2fd 100644 --- a/drivers/net/wireless/ath/ath9k/phy.h +++ b/drivers/net/wireless/ath/ath9k/phy.h | |||
@@ -45,4 +45,7 @@ | |||
45 | #define AR_PHY_TIMING11_SPUR_FREQ_SD 0x3FF00000 | 45 | #define AR_PHY_TIMING11_SPUR_FREQ_SD 0x3FF00000 |
46 | #define AR_PHY_TIMING11_SPUR_FREQ_SD_S 20 | 46 | #define AR_PHY_TIMING11_SPUR_FREQ_SD_S 20 |
47 | 47 | ||
48 | #define AR_PHY_PLL_CONTROL 0x16180 | ||
49 | #define AR_PHY_PLL_MODE 0x16184 | ||
50 | |||
48 | #endif | 51 | #endif |
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h index 42d9f1b7655c..b42e36c6f6ea 100644 --- a/drivers/net/wireless/ath/ath9k/reg.h +++ b/drivers/net/wireless/ath/ath9k/reg.h | |||
@@ -1180,6 +1180,7 @@ enum { | |||
1180 | #define AR_RTC_PLL_REFDIV_5 0x000000c0 | 1180 | #define AR_RTC_PLL_REFDIV_5 0x000000c0 |
1181 | #define AR_RTC_PLL_CLKSEL 0x00000300 | 1181 | #define AR_RTC_PLL_CLKSEL 0x00000300 |
1182 | #define AR_RTC_PLL_CLKSEL_S 8 | 1182 | #define AR_RTC_PLL_CLKSEL_S 8 |
1183 | #define AR_RTC_PLL_BYPASS 0x00010000 | ||
1183 | 1184 | ||
1184 | #define PLL3 0x16188 | 1185 | #define PLL3 0x16188 |
1185 | #define PLL3_DO_MEAS_MASK 0x40000000 | 1186 | #define PLL3_DO_MEAS_MASK 0x40000000 |
@@ -1226,7 +1227,8 @@ enum { | |||
1226 | 1227 | ||
1227 | /* RTC_DERIVED_* - only for AR9100 */ | 1228 | /* RTC_DERIVED_* - only for AR9100 */ |
1228 | 1229 | ||
1229 | #define AR_RTC_DERIVED_CLK (AR_RTC_BASE + 0x0038) | 1230 | #define AR_RTC_DERIVED_CLK \ |
1231 | (AR_SREV_9100(ah) ? (AR_RTC_BASE + 0x0038) : 0x7038) | ||
1230 | #define AR_RTC_DERIVED_CLK_PERIOD 0x0000fffe | 1232 | #define AR_RTC_DERIVED_CLK_PERIOD 0x0000fffe |
1231 | #define AR_RTC_DERIVED_CLK_PERIOD_S 1 | 1233 | #define AR_RTC_DERIVED_CLK_PERIOD_S 1 |
1232 | 1234 | ||