aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-04-07 18:04:08 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-10 14:10:32 -0400
commita043dfb90e0472049baabc4cc9168e1fe2bd7a90 (patch)
treea97cc121b073293bc14c4c8b40bbe098ef794f74
parent37c62fecbf4f850e194063fdfb02326c15ea7cf1 (diff)
ath9k_hw: make various ar5416/ar91xx rf banks const
Banks 0-3,7 are neither modified at run time, nor SREV dependent. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ath/ath9k/ar5008_phy.c75
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9002_hw.c6
-rw-r--r--drivers/net/wireless/ath/ath9k/calib.h6
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.h10
4 files changed, 26 insertions, 71 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index 93f8f9616516..391da5ad6a99 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -18,6 +18,7 @@
18#include "hw-ops.h" 18#include "hw-ops.h"
19#include "../regd.h" 19#include "../regd.h"
20#include "ar9002_phy.h" 20#include "ar9002_phy.h"
21#include "ar5008_initvals.h"
21 22
22/* All code below is for AR5008, AR9001, AR9002 */ 23/* All code below is for AR5008, AR9001, AR9002 */
23 24
@@ -43,23 +44,16 @@ static const int m2ThreshLowExt_off = 127;
43static const int m1ThreshExt_off = 127; 44static const int m1ThreshExt_off = 127;
44static const int m2ThreshExt_off = 127; 45static const int m2ThreshExt_off = 127;
45 46
47static const struct ar5416IniArray bank0 = STATIC_INI_ARRAY(ar5416Bank0);
48static const struct ar5416IniArray bank1 = STATIC_INI_ARRAY(ar5416Bank1);
49static const struct ar5416IniArray bank2 = STATIC_INI_ARRAY(ar5416Bank2);
50static const struct ar5416IniArray bank3 = STATIC_INI_ARRAY(ar5416Bank3);
51static const struct ar5416IniArray bank7 = STATIC_INI_ARRAY(ar5416Bank7);
46 52
47static void ar5008_rf_bank_setup(u32 *bank, struct ar5416IniArray *array, 53static void ar5008_write_bank6(struct ath_hw *ah, unsigned int *writecnt)
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
60static void ar5008_write_rf_array(struct ath_hw *ah, struct ar5416IniArray *array,
61 u32 *data, unsigned int *writecnt)
62{ 54{
55 struct ar5416IniArray *array = &ah->iniBank6;
56 u32 *data = ah->analogBank6Data;
63 int r; 57 int r;
64 58
65 ENABLE_REGWRITE_BUFFER(ah); 59 ENABLE_REGWRITE_BUFFER(ah);
@@ -165,7 +159,7 @@ static void ar5008_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
165 ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3); 159 ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
166 160
167 /* write Bank 6 with new params */ 161 /* write Bank 6 with new params */
168 REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes); 162 ar5008_write_bank6(ah, &reg_writes);
169} 163}
170 164
171/** 165/**
@@ -469,29 +463,16 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
469 */ 463 */
470static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) 464static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
471{ 465{
472#define ATH_ALLOC_BANK(bank, size) do { \ 466 int size = ah->iniBank6.ia_rows * sizeof(u32);
473 bank = devm_kzalloc(ah->dev, sizeof(u32) * size, GFP_KERNEL); \
474 if (!bank) \
475 goto error; \
476 } while (0);
477
478 struct ath_common *common = ath9k_hw_common(ah);
479 467
480 if (AR_SREV_9280_20_OR_LATER(ah)) 468 if (AR_SREV_9280_20_OR_LATER(ah))
481 return 0; 469 return 0;
482 470
483 ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows); 471 ah->analogBank6Data = devm_kzalloc(ah->dev, size, GFP_KERNEL);
484 ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows); 472 if (!ah->analogBank6Data)
485 ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows); 473 return -ENOMEM;
486 ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
487 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
488 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
489 474
490 return 0; 475 return 0;
491#undef ATH_ALLOC_BANK
492error:
493 ath_err(common, "Cannot allocate RF banks\n");
494 return -ENOMEM;
495} 476}
496 477
497 478
@@ -528,19 +509,6 @@ static bool ar5008_hw_set_rf_regs(struct ath_hw *ah,
528 /* Setup rf parameters */ 509 /* Setup rf parameters */
529 eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV); 510 eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
530 511
531 /* Setup Bank 0 Write */
532 ar5008_rf_bank_setup(ah->analogBank0Data, &ah->iniBank0, 1);
533
534 /* Setup Bank 1 Write */
535 ar5008_rf_bank_setup(ah->analogBank1Data, &ah->iniBank1, 1);
536
537 /* Setup Bank 2 Write */
538 ar5008_rf_bank_setup(ah->analogBank2Data, &ah->iniBank2, 1);
539
540 /* Setup Bank 6 Write */
541 ar5008_rf_bank_setup(ah->analogBank3Data, &ah->iniBank3,
542 modesIndex);
543
544 for (i = 0; i < ah->iniBank6.ia_rows; i++) 512 for (i = 0; i < ah->iniBank6.ia_rows; i++)
545 ah->analogBank6Data[i] = INI_RA(&ah->iniBank6, i, modesIndex); 513 ah->analogBank6Data[i] = INI_RA(&ah->iniBank6, i, modesIndex);
546 514
@@ -563,16 +531,13 @@ static bool ar5008_hw_set_rf_regs(struct ath_hw *ah,
563 } 531 }
564 } 532 }
565 533
566 /* Setup Bank 7 Setup */
567 ar5008_rf_bank_setup(ah->analogBank7Data, &ah->iniBank7, 1);
568
569 /* Write Analog registers */ 534 /* Write Analog registers */
570 REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data, regWrites); 535 REG_WRITE_ARRAY(&bank0, 1, regWrites);
571 REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data, regWrites); 536 REG_WRITE_ARRAY(&bank1, 1, regWrites);
572 REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data, regWrites); 537 REG_WRITE_ARRAY(&bank2, 1, regWrites);
573 REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data, regWrites); 538 REG_WRITE_ARRAY(&bank3, modesIndex, regWrites);
574 REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, regWrites); 539 ar5008_write_bank6(ah, &regWrites);
575 REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data, regWrites); 540 REG_WRITE_ARRAY(&bank7, 1, regWrites);
576 541
577 return true; 542 return true;
578} 543}
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
index a4654d3b0c9a..830daa12feb6 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
@@ -78,12 +78,6 @@ static int ar9002_hw_init_mode_regs(struct ath_hw *ah)
78 /* Common for AR5416, AR913x, AR9160 */ 78 /* Common for AR5416, AR913x, AR9160 */
79 INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain); 79 INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain);
80 80
81 INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0);
82 INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1);
83 INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2);
84 INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3);
85 INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7);
86
87 /* Common for AR913x, AR9160 */ 81 /* Common for AR913x, AR9160 */
88 if (!AR_SREV_5416(ah)) 82 if (!AR_SREV_5416(ah))
89 INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6TPC_9100); 83 INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6TPC_9100);
diff --git a/drivers/net/wireless/ath/ath9k/calib.h b/drivers/net/wireless/ath/ath9k/calib.h
index 60dcb6c22db9..3d70b8c2bcdd 100644
--- a/drivers/net/wireless/ath/ath9k/calib.h
+++ b/drivers/net/wireless/ath/ath9k/calib.h
@@ -33,6 +33,12 @@ struct ar5416IniArray {
33 u32 ia_columns; 33 u32 ia_columns;
34}; 34};
35 35
36#define STATIC_INI_ARRAY(array) { \
37 .ia_array = (u32 *)(array), \
38 .ia_rows = ARRAY_SIZE(array), \
39 .ia_columns = ARRAY_SIZE(array[0]), \
40 }
41
36#define INIT_INI_ARRAY(iniarray, array) do { \ 42#define INIT_INI_ARRAY(iniarray, array) do { \
37 (iniarray)->ia_array = (u32 *)(array); \ 43 (iniarray)->ia_array = (u32 *)(array); \
38 (iniarray)->ia_rows = ARRAY_SIZE(array); \ 44 (iniarray)->ia_rows = ARRAY_SIZE(array); \
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index e463c9ac4071..ae3034374bc4 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -847,12 +847,7 @@ struct ath_hw {
847 struct ath_hw_ops ops; 847 struct ath_hw_ops ops;
848 848
849 /* Used to program the radio on non single-chip devices */ 849 /* Used to program the radio on non single-chip devices */
850 u32 *analogBank0Data;
851 u32 *analogBank1Data;
852 u32 *analogBank2Data;
853 u32 *analogBank3Data;
854 u32 *analogBank6Data; 850 u32 *analogBank6Data;
855 u32 *analogBank7Data;
856 851
857 int coverage_class; 852 int coverage_class;
858 u32 slottime; 853 u32 slottime;
@@ -883,13 +878,8 @@ struct ath_hw {
883 878
884 struct ar5416IniArray iniModes; 879 struct ar5416IniArray iniModes;
885 struct ar5416IniArray iniCommon; 880 struct ar5416IniArray iniCommon;
886 struct ar5416IniArray iniBank0;
887 struct ar5416IniArray iniBB_RfGain; 881 struct ar5416IniArray iniBB_RfGain;
888 struct ar5416IniArray iniBank1;
889 struct ar5416IniArray iniBank2;
890 struct ar5416IniArray iniBank3;
891 struct ar5416IniArray iniBank6; 882 struct ar5416IniArray iniBank6;
892 struct ar5416IniArray iniBank7;
893 struct ar5416IniArray iniAddac; 883 struct ar5416IniArray iniAddac;
894 struct ar5416IniArray iniPcieSerdes; 884 struct ar5416IniArray iniPcieSerdes;
895#ifdef CONFIG_PM_SLEEP 885#ifdef CONFIG_PM_SLEEP