diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar5008_phy.c | 75 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ar9002_hw.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/calib.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 10 |
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; | |||
43 | static const int m1ThreshExt_off = 127; | 44 | static const int m1ThreshExt_off = 127; |
44 | static const int m2ThreshExt_off = 127; | 45 | static const int m2ThreshExt_off = 127; |
45 | 46 | ||
47 | static const struct ar5416IniArray bank0 = STATIC_INI_ARRAY(ar5416Bank0); | ||
48 | static const struct ar5416IniArray bank1 = STATIC_INI_ARRAY(ar5416Bank1); | ||
49 | static const struct ar5416IniArray bank2 = STATIC_INI_ARRAY(ar5416Bank2); | ||
50 | static const struct ar5416IniArray bank3 = STATIC_INI_ARRAY(ar5416Bank3); | ||
51 | static const struct ar5416IniArray bank7 = STATIC_INI_ARRAY(ar5416Bank7); | ||
46 | 52 | ||
47 | static void ar5008_rf_bank_setup(u32 *bank, struct ar5416IniArray *array, | 53 | static 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 | |||
60 | static 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, ®_writes); |
169 | } | 163 | } |
170 | 164 | ||
171 | /** | 165 | /** |
@@ -469,29 +463,16 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah, | |||
469 | */ | 463 | */ |
470 | static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) | 464 | static 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 | ||
492 | error: | ||
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, ®Writes); |
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 |