diff options
author | John W. Linville <linville@tuxdriver.com> | 2011-04-12 16:18:44 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-12 16:18:44 -0400 |
commit | 252f4bf400df1712408fe83ba199a66a1b57ab1d (patch) | |
tree | e07fa00abdd55b31e22567786c78635f32c6a66c /drivers/net/wireless/ath/ath9k/ar5008_phy.c | |
parent | 6ba1037c3d871ab70e342631516dbf841c35b086 (diff) | |
parent | b37e3b6d64358604960b35e8ecbb7aed22e0926e (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts:
drivers/net/wireless/ath/ar9170/main.c
drivers/net/wireless/ath/ar9170/phy.c
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/ar5008_phy.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar5008_phy.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index 106c0b06cf55..4bf9dab4f2b3 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -44,6 +44,34 @@ static const int m1ThreshExt_off = 127; | |||
44 | static const int m2ThreshExt_off = 127; | 44 | static const int m2ThreshExt_off = 127; |
45 | 45 | ||
46 | 46 | ||
47 | static void ar5008_rf_bank_setup(u32 *bank, struct ar5416IniArray *array, | ||
48 | int col) | ||
49 | { | ||
50 | int i; | ||
51 | |||
52 | for (i = 0; i < array->ia_rows; i++) | ||
53 | bank[i] = INI_RA(array, i, col); | ||
54 | } | ||
55 | |||
56 | |||
57 | #define REG_WRITE_RF_ARRAY(iniarray, regData, regWr) \ | ||
58 | ar5008_write_rf_array(ah, iniarray, regData, &(regWr)) | ||
59 | |||
60 | static void ar5008_write_rf_array(struct ath_hw *ah, struct ar5416IniArray *array, | ||
61 | u32 *data, unsigned int *writecnt) | ||
62 | { | ||
63 | int r; | ||
64 | |||
65 | ENABLE_REGWRITE_BUFFER(ah); | ||
66 | |||
67 | for (r = 0; r < array->ia_rows; r++) { | ||
68 | REG_WRITE(ah, INI_RA(array, r, 0), data[r]); | ||
69 | DO_DELAY(*writecnt); | ||
70 | } | ||
71 | |||
72 | REGWRITE_BUFFER_FLUSH(ah); | ||
73 | } | ||
74 | |||
47 | /** | 75 | /** |
48 | * ar5008_hw_phy_modify_rx_buffer() - perform analog swizzling of parameters | 76 | * ar5008_hw_phy_modify_rx_buffer() - perform analog swizzling of parameters |
49 | * @rfbuf: | 77 | * @rfbuf: |
@@ -530,16 +558,16 @@ static bool ar5008_hw_set_rf_regs(struct ath_hw *ah, | |||
530 | eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV); | 558 | eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV); |
531 | 559 | ||
532 | /* Setup Bank 0 Write */ | 560 | /* Setup Bank 0 Write */ |
533 | RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1); | 561 | ar5008_rf_bank_setup(ah->analogBank0Data, &ah->iniBank0, 1); |
534 | 562 | ||
535 | /* Setup Bank 1 Write */ | 563 | /* Setup Bank 1 Write */ |
536 | RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1); | 564 | ar5008_rf_bank_setup(ah->analogBank1Data, &ah->iniBank1, 1); |
537 | 565 | ||
538 | /* Setup Bank 2 Write */ | 566 | /* Setup Bank 2 Write */ |
539 | RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1); | 567 | ar5008_rf_bank_setup(ah->analogBank2Data, &ah->iniBank2, 1); |
540 | 568 | ||
541 | /* Setup Bank 6 Write */ | 569 | /* Setup Bank 6 Write */ |
542 | RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3, | 570 | ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3, |
543 | modesIndex); | 571 | modesIndex); |
544 | { | 572 | { |
545 | int i; | 573 | int i; |
@@ -569,7 +597,7 @@ static bool ar5008_hw_set_rf_regs(struct ath_hw *ah, | |||
569 | } | 597 | } |
570 | 598 | ||
571 | /* Setup Bank 7 Setup */ | 599 | /* Setup Bank 7 Setup */ |
572 | RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1); | 600 | ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1); |
573 | 601 | ||
574 | /* Write Analog registers */ | 602 | /* Write Analog registers */ |
575 | REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data, | 603 | REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data, |
@@ -729,6 +757,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
729 | struct ath9k_channel *chan) | 757 | struct ath9k_channel *chan) |
730 | { | 758 | { |
731 | struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah); | 759 | struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah); |
760 | struct ath_common *common = ath9k_hw_common(ah); | ||
732 | int i, regWrites = 0; | 761 | int i, regWrites = 0; |
733 | struct ieee80211_channel *channel = chan->chan; | 762 | struct ieee80211_channel *channel = chan->chan; |
734 | u32 modesIndex, freqIndex; | 763 | u32 modesIndex, freqIndex; |
@@ -805,7 +834,8 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
805 | REG_WRITE(ah, reg, val); | 834 | REG_WRITE(ah, reg, val); |
806 | 835 | ||
807 | if (reg >= 0x7800 && reg < 0x78a0 | 836 | if (reg >= 0x7800 && reg < 0x78a0 |
808 | && ah->config.analog_shiftreg) { | 837 | && ah->config.analog_shiftreg |
838 | && (common->bus_ops->ath_bus_type != ATH_USB)) { | ||
809 | udelay(100); | 839 | udelay(100); |
810 | } | 840 | } |
811 | 841 | ||
@@ -835,7 +865,8 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
835 | REG_WRITE(ah, reg, val); | 865 | REG_WRITE(ah, reg, val); |
836 | 866 | ||
837 | if (reg >= 0x7800 && reg < 0x78a0 | 867 | if (reg >= 0x7800 && reg < 0x78a0 |
838 | && ah->config.analog_shiftreg) { | 868 | && ah->config.analog_shiftreg |
869 | && (common->bus_ops->ath_bus_type != ATH_USB)) { | ||
839 | udelay(100); | 870 | udelay(100); |
840 | } | 871 | } |
841 | 872 | ||