aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-04-15 17:38:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-16 15:43:23 -0400
commit317d33280c63f32bd84c49aacaaae047e981b441 (patch)
tree7a473c49289a5b26a189ecbfb2546d6ad1500283 /drivers/net
parentf7abf0c1958ab363874cad0d799a1bb43880145a (diff)
ath9k_hw: Implement PLL control on AR9003
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_phy.c23
-rw-r--r--drivers/net/wireless/ath/ath9k/reg.h6
2 files changed, 27 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
index f1632abdce50..9767265cde02 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
@@ -112,8 +112,27 @@ static void ar9003_hw_spur_mitigate(struct ath_hw *ah,
112static u32 ar9003_hw_compute_pll_control(struct ath_hw *ah, 112static u32 ar9003_hw_compute_pll_control(struct ath_hw *ah,
113 struct ath9k_channel *chan) 113 struct ath9k_channel *chan)
114{ 114{
115 /* TODO */ 115 u32 pll;
116 return 0; 116
117 pll = SM(0x5, AR_RTC_9300_PLL_REFDIV);
118
119 if (chan && IS_CHAN_HALF_RATE(chan))
120 pll |= SM(0x1, AR_RTC_9300_PLL_CLKSEL);
121 else if (chan && IS_CHAN_QUARTER_RATE(chan))
122 pll |= SM(0x2, AR_RTC_9300_PLL_CLKSEL);
123
124 if (chan && IS_CHAN_5GHZ(chan)) {
125 pll |= SM(0x28, AR_RTC_9300_PLL_DIV);
126
127 /*
128 * When doing fast clock, set PLL to 0x142c
129 */
130 if (IS_CHAN_A_5MHZ_SPACED(chan))
131 pll = 0x142c;
132 } else
133 pll |= SM(0x2c, AR_RTC_9300_PLL_DIV);
134
135 return pll;
117} 136}
118 137
119static void ar9003_hw_set_channel_regs(struct ath_hw *ah, 138static void ar9003_hw_set_channel_regs(struct ath_hw *ah,
diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h
index bc48bc92076f..9d632861aaff 100644
--- a/drivers/net/wireless/ath/ath9k/reg.h
+++ b/drivers/net/wireless/ath/ath9k/reg.h
@@ -1040,6 +1040,12 @@ enum {
1040#define AR_PCIE_MSI (AR_SREV_9300_20_OR_LATER(ah) ? 0x40a4 : 0x4094) 1040#define AR_PCIE_MSI (AR_SREV_9300_20_OR_LATER(ah) ? 0x40a4 : 0x4094)
1041#define AR_PCIE_MSI_ENABLE 0x00000001 1041#define AR_PCIE_MSI_ENABLE 0x00000001
1042 1042
1043#define AR_RTC_9300_PLL_DIV 0x000003ff
1044#define AR_RTC_9300_PLL_DIV_S 0
1045#define AR_RTC_9300_PLL_REFDIV 0x00003C00
1046#define AR_RTC_9300_PLL_REFDIV_S 10
1047#define AR_RTC_9300_PLL_CLKSEL 0x0000C000
1048#define AR_RTC_9300_PLL_CLKSEL_S 14
1043 1049
1044#define AR_RTC_9160_PLL_DIV 0x000003ff 1050#define AR_RTC_9160_PLL_DIV 0x000003ff
1045#define AR_RTC_9160_PLL_DIV_S 0 1051#define AR_RTC_9160_PLL_DIV_S 0