ath9k patches
cover ath9k patches
From: Sujith Manoharan <[email protected]>
Various fixes for -next.
Miaoqing Pan (3):
ath9k: disable overriding AR9340 SLP32 registers
ath9k: Use new QCA953x initvals
ath9k: Fix high tx power in multi-chain mode
Sujith Manoharan (3):
ath9k: Update QCA953x initvals
ath9k: Fix LED configuration
ath9k: Enable TSF2 for generic HW timers
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 22 +- drivers/net/wireless/ath/ath9k/ar9003_hw.c | 51 ++- drivers/net/wireless/ath/ath9k/ar9003_phy.c | 12 +- drivers/net/wireless/ath/ath9k/ar953x_initvals.h | 498 +++++++++++++++++++++-- drivers/net/wireless/ath/ath9k/ath9k.h | 1 + drivers/net/wireless/ath/ath9k/gpio.c | 9 +- drivers/net/wireless/ath/ath9k/hw.c | 23 +- drivers/net/wireless/ath/ath9k/hw.h | 3 + drivers/net/wireless/ath/ath9k/init.c | 3 + drivers/net/wireless/ath/ath9k/main.c | 6 +- drivers/net/wireless/ath/ath9k/pci.c | 4 +- drivers/net/wireless/ath/ath9k/reg.h | 3 + 12 files changed, 575 insertions(+), 60 deletions(-)
Signature · 1 line
2.1.3
PATCH 1/6 ath9k: disable overriding AR9340 SLP32 registers
From: Miaoqing Pan <[email protected]>
For AR9340, the correct values for SLP32 registers are present in the initvals, so overriding them is not needed.
--- drivers/net/wireless/ath/ath9k/ar9003_phy.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/net/wireless/ath/ath9k/ar9003_phy.c +8 -4
@@ -668,12 +668,16 @@ static void ar9003_hw_override_ini(struct ath_hw *ah)if (AR_SREV_9340 (ah) ||AR_SREV_9531 (ah) ||AR_SREV_9550 (ah)) {if (ah->is_clk_25mhz) {REG_WRITE (ah,AR_RTC_DERIVED_CLK ,0x17c <<1 ); -REG_WRITE (ah,AR_SLP32_MODE ,0x0010f3d7 ); -REG_WRITE (ah,AR_SLP32_INC ,0x0001e7ae ); +if (!AR_SREV_9340 (ah)) { +REG_WRITE (ah,AR_SLP32_MODE ,0x0010f3d7 ); +REG_WRITE (ah,AR_SLP32_INC ,0x0001e7ae ); + } }else {REG_WRITE (ah,AR_RTC_DERIVED_CLK ,0x261 <<1 ); -REG_WRITE (ah,AR_SLP32_MODE ,0x0010f400 ); -REG_WRITE (ah,AR_SLP32_INC ,0x0001e800 ); +if (!AR_SREV_9340 (ah)) { +REG_WRITE (ah,AR_SLP32_MODE ,0x0010f400 ); +REG_WRITE (ah,AR_SLP32_INC ,0x0001e800 ); + } }udelay (100 ); }
Signature · 1 line
2.1.3
Re: [PATCH 1/6] ath9k: disable overriding AR9340 SLP32 registers
Quoted 7 lines · Sujith Manoharan
From: Miaoqing Pan <[email protected]>
For AR9340, the correct values for SLP32 registers are present in the initvals, so overriding them is not needed.
Signed-off-by Miaoqing Pan <[email protected]>Signed-off-by Sujith Manoharan <[email protected]>
What's the point in doing this? The writes don't hurt, and this change is making the code uglier.
- Felix
Re: [PATCH 1/6] ath9k: disable overriding AR9340 SLP32 registers
Quoted 2 lines · Felix Fietkau
What's the point in doing this? The writes don't hurt, and this change is making the code uglier.
Well, the code is redundant and I don't see the point in doing the writes when we don't have to ? We could maybe restructure it a bit...
Sujith
Re: [PATCH 1/6] ath9k: disable overriding AR9340 SLP32 registers
Quoted 3 lines · Sujith Manoharan
Well, the code is redundant and I don't see the point in doing the writes when we don't have to ? We could maybe restructure it a bit...
So I managed to track down the reason for this override.
This is a specific hack for an Apple product that is
based on Wasp in which they use their own reference clock which is 40Mhz.
This override is not required for any other chip apart from Hornet, for which we maintain different arrays for 25/40 Mhz in the INI files.
So, this chunk of code can be completely removed. ;-)
Sujith
PATCH 2/6 ath9k: Update QCA953x initvals
In reply to Sujith ManoharanFrom: Sujith Manoharan <[email protected]>
* Duplicates have been marked.
* New initvals for 1.1 and 2.0 versions.
* xPA support.
* Fix for low power issue.
--- drivers/net/wireless/ath/ath9k/ar953x_initvals.h | 498 +++++++++++++++++++++-- 1 file changed, 468 insertions(+), 30 deletions(-)
drivers/net/wireless/ath/ath9k/ar953x_initvals.h +468 -30
@@ -20,6 +20,8 @@#define qca953x_1p0_mac_postamble ar9300_2p2_mac_postamble +#define qca953x_1p0_soc_preamble ar955x_1p0_soc_preamble +#define qca953x_1p0_soc_postamble ar9300_2p2_soc_postamble#define qca953x_1p0_common_rx_gain_table ar9300Common_rx_gain_table_2p2
@@ -28,6 +30,10 @@#define qca953x_1p0_modes_fast_clock ar9300Modes_fast_clock_2p2 +#define qca953x_1p0_common_wo_xlna_rx_gain_bounds ar955x_1p0_common_wo_xlna_rx_gain_bounds + +#define qca953x_1p0_common_rx_gain_bounds ar955x_1p0_common_rx_gain_bounds +static const u32 qca953x_1p0_mac_core[][2 ] = {/* Addr allmodes */ {0x00000008 ,0x00000000 },
@@ -490,35 +496,6 @@ static const u32 qca953x_1p0_radio_postamble[][5] = { {0x00016540, 0x10804008, 0x10804008, 0x50804000, 0x50804000}, }; -static const u32 qca953x_1p0_soc_preamble[][2 ] = { -/* Addr allmodes */ - {0x00007000 ,0x00000000 }, - {0x00007004 ,0x00000000 }, - {0x00007008 ,0x00000000 }, - {0x0000700c ,0x00000000 }, - {0x0000701c ,0x00000000 }, - {0x00007020 ,0x00000000 }, - {0x00007024 ,0x00000000 }, - {0x00007028 ,0x00000000 }, - {0x0000702c ,0x00000000 }, - {0x00007030 ,0x00000000 }, - {0x00007034 ,0x00000002 }, - {0x00007038 ,0x000004c2 }, - {0x00007048 ,0x00000000 }, -}; - -static const u32 qca953x_1p0_common_rx_gain_bounds[][5 ] = { -/* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ - {0x00009e44 ,0xfe321e27 ,0xfe321e27 ,0xfe291e27 ,0xfe291e27 }, - {0x00009e48 ,0x5030201a ,0x5030201a ,0x50302018 ,0x50302018 }, -}; - -static const u32 qca953x_1p0_common_wo_xlna_rx_gain_bounds[][5 ] = { -/* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ - {0x00009e44 ,0xfe321e27 ,0xfe321e27 ,0xfe291e27 ,0xfe291e27 }, - {0x00009e48 ,0x5030201a ,0x5030201a ,0x50302012 ,0x50302012 }, -}; -static const u32 qca953x_1p0_modes_xpa_tx_gain_table[][2 ] = {/* Addr allmodes */ {0x0000a2dc, 0xfffd5aaa},
@@ -715,8 +692,73 @@ static const u32 qca953x_1p1_modes_no_xpa_tx_gain_table[][2] = { {0x00016448, 0x6c927a70}, }; +static const u32 qca953x_1p1_modes_xpa_tx_gain_table[][2 ] = { +/* Addr allmodes */ + {0x0000a2dc ,0xfffb52aa }, + {0x0000a2e0 ,0xfffd64cc }, + {0x0000a2e4 ,0xfffe80f0 }, + {0x0000a2e8 ,0xffffff00 }, + {0x0000a410 ,0x000050d5 }, + {0x0000a500 ,0x00000000 }, + {0x0000a504 ,0x04000002 }, + {0x0000a508 ,0x08000004 }, + {0x0000a50c ,0x0c000006 }, + {0x0000a510 ,0x1000000a }, + {0x0000a514 ,0x1400000c }, + {0x0000a518 ,0x1800000e }, + {0x0000a51c ,0x1c000048 }, + {0x0000a520 ,0x2000004a }, + {0x0000a524 ,0x2400004c }, + {0x0000a528 ,0x2800004e }, + {0x0000a52c ,0x2b00024a }, + {0x0000a530 ,0x2f00024c }, + {0x0000a534 ,0x3300024e }, + {0x0000a538 ,0x36000668 }, + {0x0000a53c ,0x38000669 }, + {0x0000a540 ,0x3a000868 }, + {0x0000a544 ,0x3d00086a }, + {0x0000a548 ,0x4000086c }, + {0x0000a54c ,0x4200086e }, + {0x0000a550 ,0x43000a6e }, + {0x0000a554 ,0x43000a6e }, + {0x0000a558 ,0x43000a6e }, + {0x0000a55c ,0x43000a6e }, + {0x0000a560 ,0x43000a6e }, + {0x0000a564 ,0x43000a6e }, + {0x0000a568 ,0x43000a6e }, + {0x0000a56c ,0x43000a6e }, + {0x0000a570 ,0x43000a6e }, + {0x0000a574 ,0x43000a6e }, + {0x0000a578 ,0x43000a6e }, + {0x0000a57c ,0x43000a6e }, + {0x0000a600 ,0x00000000 }, + {0x0000a604 ,0x00000000 }, + {0x0000a608 ,0x00000000 }, + {0x0000a60c ,0x03804000 }, + {0x0000a610 ,0x03804e01 }, + {0x0000a614 ,0x03804e01 }, + {0x0000a618 ,0x03804e01 }, + {0x0000a61c ,0x04009002 }, + {0x0000a620 ,0x04009002 }, + {0x0000a624 ,0x04009002 }, + {0x0000a628 ,0x04009002 }, + {0x0000a62c ,0x04009002 }, + {0x0000a630 ,0x04009002 }, + {0x0000a634 ,0x04009002 }, + {0x0000a638 ,0x04009002 }, + {0x0000a63c ,0x04009002 }, + {0x0000b2dc ,0xfffb52aa }, + {0x0000b2e0 ,0xfffd64cc }, + {0x0000b2e4 ,0xfffe80f0 }, + {0x0000b2e8 ,0xffffff00 }, + {0x00016044 ,0x024922db }, + {0x00016048 ,0x6c927a70 }, + {0x00016444 ,0x024922db }, + {0x00016448 ,0x6c927a70 }, +}; +static const u32 qca953x_2p0_baseband_core[][2 ] = { -/* Addr allmodes */ +/* Addr allmodes */ {0x00009800 ,0xafe68e30 }, {0x00009804 ,0xfd14e000 }, {0x00009808, 0x9c0a9f6b},
@@ -914,4 +956,400 @@ static const u32 qca953x_2p0_baseband_postamble[][5] = { {0x0000b284, 0x00000000, 0x00000000, 0x00000010, 0x00000010}, }; +static const u32 qca953x_2p0_common_wo_xlna_rx_gain_table[][2] = { + /* Addr allmodes */ + {0x0000a000, 0x00010000}, + {0x0000a004, 0x00030002}, + {0x0000a008, 0x00050004}, + {0x0000a00c, 0x00810080}, + {0x0000a010, 0x00830082}, + {0x0000a014, 0x01810180}, + {0x0000a018, 0x01830182}, + {0x0000a01c, 0x01850184}, + {0x0000a020, 0x01890188}, + {0x0000a024, 0x018b018a}, + {0x0000a028, 0x018d018c}, + {0x0000a02c, 0x03820190}, + {0x0000a030, 0x03840383}, + {0x0000a034, 0x03880385}, + {0x0000a038, 0x038a0389}, + {0x0000a03c, 0x038c038b}, + {0x0000a040, 0x0390038d}, + {0x0000a044, 0x03920391}, + {0x0000a048, 0x03940393}, + {0x0000a04c, 0x03960395}, + {0x0000a050, 0x00000000}, + {0x0000a054, 0x00000000}, + {0x0000a058, 0x00000000}, + {0x0000a05c, 0x00000000}, + {0x0000a060, 0x00000000}, + {0x0000a064, 0x00000000}, + {0x0000a068, 0x00000000}, + {0x0000a06c, 0x00000000}, + {0x0000a070, 0x00000000}, + {0x0000a074, 0x00000000}, + {0x0000a078, 0x00000000}, + {0x0000a07c, 0x00000000}, + {0x0000a080, 0x29292929}, + {0x0000a084, 0x29292929}, + {0x0000a088, 0x29292929}, + {0x0000a08c, 0x29292929}, + {0x0000a090, 0x22292929}, + {0x0000a094, 0x1d1d2222}, + {0x0000a098, 0x0c111117}, + {0x0000a09c, 0x00030303}, + {0x0000a0a0, 0x00000000}, + {0x0000a0a4, 0x00000000}, + {0x0000a0a8, 0x00000000}, + {0x0000a0ac, 0x00000000}, + {0x0000a0b0, 0x00000000}, + {0x0000a0b4, 0x00000000}, + {0x0000a0b8, 0x00000000}, + {0x0000a0bc, 0x00000000}, + {0x0000a0c0, 0x001f0000}, + {0x0000a0c4, 0x01000101}, + {0x0000a0c8, 0x011e011f}, + {0x0000a0cc, 0x011c011d}, + {0x0000a0d0, 0x02030204}, + {0x0000a0d4, 0x02010202}, + {0x0000a0d8, 0x021f0200}, + {0x0000a0dc, 0x0302021e}, + {0x0000a0e0, 0x03000301}, + {0x0000a0e4, 0x031e031f}, + {0x0000a0e8, 0x0402031d}, + {0x0000a0ec, 0x04000401}, + {0x0000a0f0, 0x041e041f}, + {0x0000a0f4, 0x0502041d}, + {0x0000a0f8, 0x05000501}, + {0x0000a0fc, 0x051e051f}, + {0x0000a100, 0x06010602}, + {0x0000a104, 0x061f0600}, + {0x0000a108, 0x061d061e}, + {0x0000a10c, 0x07020703}, + {0x0000a110, 0x07000701}, + {0x0000a114, 0x00000000}, + {0x0000a118, 0x00000000}, + {0x0000a11c, 0x00000000}, + {0x0000a120, 0x00000000}, + {0x0000a124, 0x00000000}, + {0x0000a128, 0x00000000}, + {0x0000a12c, 0x00000000}, + {0x0000a130, 0x00000000}, + {0x0000a134, 0x00000000}, + {0x0000a138, 0x00000000}, + {0x0000a13c, 0x00000000}, + {0x0000a140, 0x001f0000}, + {0x0000a144, 0x01000101}, + {0x0000a148, 0x011e011f}, + {0x0000a14c, 0x011c011d}, + {0x0000a150, 0x02030204}, + {0x0000a154, 0x02010202}, + {0x0000a158, 0x021f0200}, + {0x0000a15c, 0x0302021e}, + {0x0000a160, 0x03000301}, + {0x0000a164, 0x031e031f}, + {0x0000a168, 0x0402031d}, + {0x0000a16c, 0x04000401}, + {0x0000a170, 0x041e041f}, + {0x0000a174, 0x0502041d}, + {0x0000a178, 0x05000501}, + {0x0000a17c, 0x051e051f}, + {0x0000a180, 0x06010602}, + {0x0000a184, 0x061f0600}, + {0x0000a188, 0x061d061e}, + {0x0000a18c, 0x07020703}, + {0x0000a190, 0x07000701}, + {0x0000a194, 0x00000000}, + {0x0000a198, 0x00000000}, + {0x0000a19c, 0x00000000}, + {0x0000a1a0, 0x00000000}, + {0x0000a1a4, 0x00000000}, + {0x0000a1a8, 0x00000000}, + {0x0000a1ac, 0x00000000}, + {0x0000a1b0, 0x00000000}, + {0x0000a1b4, 0x00000000}, + {0x0000a1b8, 0x00000000}, + {0x0000a1bc, 0x00000000}, + {0x0000a1c0, 0x00000000}, + {0x0000a1c4, 0x00000000}, + {0x0000a1c8, 0x00000000}, + {0x0000a1cc, 0x00000000}, + {0x0000a1d0, 0x00000000}, + {0x0000a1d4, 0x00000000}, + {0x0000a1d8, 0x00000000}, + {0x0000a1dc, 0x00000000}, + {0x0000a1e0, 0x00000000}, + {0x0000a1e4, 0x00000000}, + {0x0000a1e8, 0x00000000}, + {0x0000a1ec, 0x00000000}, + {0x0000a1f0, 0x00000396}, + {0x0000a1f4, 0x00000396}, + {0x0000a1f8, 0x00000396}, + {0x0000a1fc, 0x00000196}, + {0x0000b000, 0x00010000}, + {0x0000b004, 0x00030002}, + {0x0000b008, 0x00050004}, + {0x0000b00c, 0x00810080}, + {0x0000b010, 0x00830082}, + {0x0000b014, 0x01810180}, + {0x0000b018, 0x01830182}, + {0x0000b01c, 0x01850184}, + {0x0000b020, 0x02810280}, + {0x0000b024, 0x02830282}, + {0x0000b028, 0x02850284}, + {0x0000b02c, 0x02890288}, + {0x0000b030, 0x028b028a}, + {0x0000b034, 0x0388028c}, + {0x0000b038, 0x038a0389}, + {0x0000b03c, 0x038c038b}, + {0x0000b040, 0x0390038d}, + {0x0000b044, 0x03920391}, + {0x0000b048, 0x03940393}, + {0x0000b04c, 0x03960395}, + {0x0000b050, 0x00000000}, + {0x0000b054, 0x00000000}, + {0x0000b058, 0x00000000}, + {0x0000b05c, 0x00000000}, + {0x0000b060, 0x00000000}, + {0x0000b064, 0x00000000}, + {0x0000b068, 0x00000000}, + {0x0000b06c, 0x00000000}, + {0x0000b070, 0x00000000}, + {0x0000b074, 0x00000000}, + {0x0000b078, 0x00000000}, + {0x0000b07c, 0x00000000}, + {0x0000b080, 0x32323232}, + {0x0000b084, 0x2f2f3232}, + {0x0000b088, 0x23282a2d}, + {0x0000b08c, 0x1c1e2123}, + {0x0000b090, 0x14171919}, + {0x0000b094, 0x0e0e1214}, + {0x0000b098, 0x03050707}, + {0x0000b09c, 0x00030303}, + {0x0000b0a0, 0x00000000}, + {0x0000b0a4, 0x00000000}, + {0x0000b0a8, 0x00000000}, + {0x0000b0ac, 0x00000000}, + {0x0000b0b0, 0x00000000}, + {0x0000b0b4, 0x00000000}, + {0x0000b0b8, 0x00000000}, + {0x0000b0bc, 0x00000000}, + {0x0000b0c0, 0x003f0020}, + {0x0000b0c4, 0x00400041}, + {0x0000b0c8, 0x0140005f}, + {0x0000b0cc, 0x0160015f}, + {0x0000b0d0, 0x017e017f}, + {0x0000b0d4, 0x02410242}, + {0x0000b0d8, 0x025f0240}, + {0x0000b0dc, 0x027f0260}, + {0x0000b0e0, 0x0341027e}, + {0x0000b0e4, 0x035f0340}, + {0x0000b0e8, 0x037f0360}, + {0x0000b0ec, 0x04400441}, + {0x0000b0f0, 0x0460045f}, + {0x0000b0f4, 0x0541047f}, + {0x0000b0f8, 0x055f0540}, + {0x0000b0fc, 0x057f0560}, + {0x0000b100, 0x06400641}, + {0x0000b104, 0x0660065f}, + {0x0000b108, 0x067e067f}, + {0x0000b10c, 0x07410742}, + {0x0000b110, 0x075f0740}, + {0x0000b114, 0x077f0760}, + {0x0000b118, 0x07800781}, + {0x0000b11c, 0x07a0079f}, + {0x0000b120, 0x07c107bf}, + {0x0000b124, 0x000007c0}, + {0x0000b128, 0x00000000}, + {0x0000b12c, 0x00000000}, + {0x0000b130, 0x00000000}, + {0x0000b134, 0x00000000}, + {0x0000b138, 0x00000000}, + {0x0000b13c, 0x00000000}, + {0x0000b140, 0x003f0020}, + {0x0000b144, 0x00400041}, + {0x0000b148, 0x0140005f}, + {0x0000b14c, 0x0160015f}, + {0x0000b150, 0x017e017f}, + {0x0000b154, 0x02410242}, + {0x0000b158, 0x025f0240}, + {0x0000b15c, 0x027f0260}, + {0x0000b160, 0x0341027e}, + {0x0000b164, 0x035f0340}, + {0x0000b168, 0x037f0360}, + {0x0000b16c, 0x04400441}, + {0x0000b170, 0x0460045f}, + {0x0000b174, 0x0541047f}, + {0x0000b178, 0x055f0540}, + {0x0000b17c, 0x057f0560}, + {0x0000b180, 0x06400641}, + {0x0000b184, 0x0660065f}, + {0x0000b188, 0x067e067f}, + {0x0000b18c, 0x07410742}, + {0x0000b190, 0x075f0740}, + {0x0000b194, 0x077f0760}, + {0x0000b198, 0x07800781}, + {0x0000b19c, 0x07a0079f}, + {0x0000b1a0, 0x07c107bf}, + {0x0000b1a4, 0x000007c0}, + {0x0000b1a8, 0x00000000}, + {0x0000b1ac, 0x00000000}, + {0x0000b1b0, 0x00000000}, + {0x0000b1b4, 0x00000000}, + {0x0000b1b8, 0x00000000}, + {0x0000b1bc, 0x00000000}, + {0x0000b1c0, 0x00000000}, + {0x0000b1c4, 0x00000000}, + {0x0000b1c8, 0x00000000}, + {0x0000b1cc, 0x00000000}, + {0x0000b1d0, 0x00000000}, + {0x0000b1d4, 0x00000000}, + {0x0000b1d8, 0x00000000}, + {0x0000b1dc, 0x00000000}, + {0x0000b1e0, 0x00000000}, + {0x0000b1e4, 0x00000000}, + {0x0000b1e8, 0x00000000}, + {0x0000b1ec, 0x00000000}, + {0x0000b1f0, 0x00000396}, + {0x0000b1f4, 0x00000396}, + {0x0000b1f8, 0x00000396}, + {0x0000b1fc, 0x00000196}, +}; + +static const u32 qca953x_2p0_common_wo_xlna_rx_gain_bounds[][5] = { + /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ + {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27}, + {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012}, +}; + +static const u32 qca953x_2p0_modes_xpa_tx_gain_table[][2] = { + /* Addr allmodes */ + {0x0000a2dc, 0xfffb52aa}, + {0x0000a2e0, 0xfffd64cc}, + {0x0000a2e4, 0xfffe80f0}, + {0x0000a2e8, 0xffffff00}, + {0x0000a410, 0x000050d5}, + {0x0000a500, 0x00000000}, + {0x0000a504, 0x04000002}, + {0x0000a508, 0x08000004}, + {0x0000a50c, 0x0c000006}, + {0x0000a510, 0x1000000a}, + {0x0000a514, 0x1400000c}, + {0x0000a518, 0x1800000e}, + {0x0000a51c, 0x1c000048}, + {0x0000a520, 0x2000004a}, + {0x0000a524, 0x2400004c}, + {0x0000a528, 0x2800004e}, + {0x0000a52c, 0x2b00024a}, + {0x0000a530, 0x2f00024c}, + {0x0000a534, 0x3300024e}, + {0x0000a538, 0x36000668}, + {0x0000a53c, 0x38000669}, + {0x0000a540, 0x3a000868}, + {0x0000a544, 0x3d00086a}, + {0x0000a548, 0x4000086c}, + {0x0000a54c, 0x4200086e}, + {0x0000a550, 0x43000a6e}, + {0x0000a554, 0x43000a6e}, + {0x0000a558, 0x43000a6e}, + {0x0000a55c, 0x43000a6e}, + {0x0000a560, 0x43000a6e}, + {0x0000a564, 0x43000a6e}, + {0x0000a568, 0x43000a6e}, + {0x0000a56c, 0x43000a6e}, + {0x0000a570, 0x43000a6e}, + {0x0000a574, 0x43000a6e}, + {0x0000a578, 0x43000a6e}, + {0x0000a57c, 0x43000a6e}, + {0x0000a600, 0x00000000}, + {0x0000a604, 0x00000000}, + {0x0000a608, 0x00000000}, + {0x0000a60c, 0x03804000}, + {0x0000a610, 0x03804e01}, + {0x0000a614, 0x03804e01}, + {0x0000a618, 0x03804e01}, + {0x0000a61c, 0x04009002}, + {0x0000a620, 0x04009002}, + {0x0000a624, 0x04009002}, + {0x0000a628, 0x04009002}, + {0x0000a62c, 0x04009002}, + {0x0000a630, 0x04009002}, + {0x0000a634, 0x04009002}, + {0x0000a638, 0x04009002}, + {0x0000a63c, 0x04009002}, + {0x0000b2dc, 0xfffb52aa}, + {0x0000b2e0, 0xfffd64cc}, + {0x0000b2e4, 0xfffe80f0}, + {0x0000b2e8, 0xffffff00}, + {0x00016044, 0x024922db}, + {0x00016048, 0x6c927a70}, + {0x00016444, 0x024922db}, + {0x00016448, 0x6c927a70}, +}; + +static const u32 qca953x_2p0_modes_no_xpa_tx_gain_table[][2] = { + /* Addr allmodes */ + {0x0000a2dc, 0xffd5f552}, + {0x0000a2e0, 0xffe60664}, + {0x0000a2e4, 0xfff80780}, + {0x0000a2e8, 0xfffff800}, + {0x0000a410, 0x000050de}, + {0x0000a500, 0x00000061}, + {0x0000a504, 0x04000063}, + {0x0000a508, 0x08000065}, + {0x0000a50c, 0x0c000261}, + {0x0000a510, 0x10000263}, + {0x0000a514, 0x14000265}, + {0x0000a518, 0x18000482}, + {0x0000a51c, 0x1b000484}, + {0x0000a520, 0x1f000486}, + {0x0000a524, 0x240008c2}, + {0x0000a528, 0x28000cc1}, + {0x0000a52c, 0x2d000ce3}, + {0x0000a530, 0x31000ce5}, + {0x0000a534, 0x350010e5}, + {0x0000a538, 0x360012e5}, + {0x0000a53c, 0x380014e5}, + {0x0000a540, 0x3b0018e5}, + {0x0000a544, 0x3d001d04}, + {0x0000a548, 0x3e001d05}, + {0x0000a54c, 0x40001d07}, + {0x0000a550, 0x42001f27}, + {0x0000a554, 0x43001f67}, + {0x0000a558, 0x46001fe7}, + {0x0000a55c, 0x47001f2b}, + {0x0000a560, 0x49001f0d}, + {0x0000a564, 0x4b001ed2}, + {0x0000a568, 0x4c001ed4}, + {0x0000a56c, 0x4e001f15}, + {0x0000a570, 0x4f001ff6}, + {0x0000a574, 0x4f001ff6}, + {0x0000a578, 0x4f001ff6}, + {0x0000a57c, 0x4f001ff6}, + {0x0000a600, 0x00000000}, + {0x0000a604, 0x00000000}, + {0x0000a608, 0x00000000}, + {0x0000a60c, 0x00804201}, + {0x0000a610, 0x01008201}, + {0x0000a614, 0x0180c402}, + {0x0000a618, 0x0180c603}, + {0x0000a61c, 0x0180c603}, + {0x0000a620, 0x01c10603}, + {0x0000a624, 0x01c10704}, + {0x0000a628, 0x02c18b05}, + {0x0000a62c, 0x02c14c07}, + {0x0000a630, 0x01008704}, + {0x0000a634, 0x01c10402}, + {0x0000a638, 0x0301cc07}, + {0x0000a63c, 0x0301cc07}, + {0x0000b2dc, 0xffd5f552}, + {0x0000b2e0, 0xffe60664}, + {0x0000b2e4, 0xfff80780}, + {0x0000b2e8, 0xfffff800}, + {0x00016044, 0x049242db}, + {0x00016048, 0x6c927a70}, + {0x00016444, 0x049242db}, + {0x00016448, 0x6c927a70}, +}; + #endif /* INITVALS_953X_H */
Signature · 1 line
2.1.3
PATCH 3/6 ath9k: Use new QCA953x initvals
In reply to Sujith ManoharanFrom: Miaoqing Pan <[email protected]>
This patch updates the initvals for QCA953x v1.1 and v2.0
--- drivers/net/wireless/ath/ath9k/ar9003_hw.c | 51 ++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 10 deletions(-)
drivers/net/wireless/ath/ath9k/ar9003_hw.c +41 -10
@@ -333,12 +333,29 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah) qca953x_1p0_soc_preamble);INIT_INI_ARRAY (&ah->iniSOC[ATH_INI_POST ], qca953x_1p0_soc_postamble); -INIT_INI_ARRAY (&ah->iniModesRxGain, - qca953x_1p0_common_wo_xlna_rx_gain_table); -INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, - qca953x_1p0_common_wo_xlna_rx_gain_bounds); -INIT_INI_ARRAY (&ah->iniModesTxGain, - qca953x_1p0_modes_no_xpa_tx_gain_table); + +if (AR_SREV_9531_20 (ah)) { +INIT_INI_ARRAY (&ah->iniModesRxGain, + qca953x_2p0_common_wo_xlna_rx_gain_table); +INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, + qca953x_2p0_common_wo_xlna_rx_gain_bounds); + }else { +INIT_INI_ARRAY (&ah->iniModesRxGain, + qca953x_1p0_common_wo_xlna_rx_gain_table); +INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, + qca953x_1p0_common_wo_xlna_rx_gain_bounds); + } + +if (AR_SREV_9531_20 (ah)) +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_2p0_modes_no_xpa_tx_gain_table); +else if (AR_SREV_9531_11 (ah)) +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_1p1_modes_no_xpa_tx_gain_table); +else +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_1p0_modes_no_xpa_tx_gain_table); +INIT_INI_ARRAY (&ah->iniModesFastClock, qca953x_1p0_modes_fast_clock); }else if (AR_SREV_9580 (ah)) {
@@ -518,9 +535,15 @@ static void ar9003_tx_gain_table_mode0(struct ath_hw *ah)else if (AR_SREV_9550 (ah))INIT_INI_ARRAY (&ah->iniModesTxGain, ar955x_1p0_modes_xpa_tx_gain_table); -else if (AR_SREV_9531 (ah)) +else if (AR_SREV_9531_10 (ah)) +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_1p0_modes_xpa_tx_gain_table); +else if (AR_SREV_9531_11 (ah))INIT_INI_ARRAY (&ah->iniModesTxGain, - qca953x_1p0_modes_xpa_tx_gain_table); + qca953x_1p1_modes_xpa_tx_gain_table); +else if (AR_SREV_9531_20 (ah)) +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_2p0_modes_xpa_tx_gain_table);else if (AR_SREV_9580 (ah))INIT_INI_ARRAY (&ah->iniModesTxGain, ar9580_1p0_lowest_ob_db_tx_gain_table);
@@ -562,7 +585,10 @@ static void ar9003_tx_gain_table_mode1(struct ath_hw *ah)INIT_INI_ARRAY (&ah->iniModesTxGain, ar955x_1p0_modes_no_xpa_tx_gain_table); else if (AR_SREV_9531(ah)) { -if (AR_SREV_9531_11 (ah)) +if (AR_SREV_9531_20 (ah)) +INIT_INI_ARRAY (&ah->iniModesTxGain, + qca953x_2p0_modes_no_xpa_tx_gain_table); +else if (AR_SREV_9531_11 (ah))INIT_INI_ARRAY (&ah->iniModesTxGain, qca953x_1p1_modes_no_xpa_tx_gain_table);else
@@ -789,11 +815,16 @@ static void ar9003_rx_gain_table_mode1(struct ath_hw *ah) ar955x_1p0_common_wo_xlna_rx_gain_table);INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, ar955x_1p0_common_wo_xlna_rx_gain_bounds); - }else if (AR_SREV_9531 (ah)) { + }else if (AR_SREV_9531_10 (ah) ||AR_SREV_9531_11 (ah)) {INIT_INI_ARRAY (&ah->iniModesRxGain, qca953x_1p0_common_wo_xlna_rx_gain_table);INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, qca953x_1p0_common_wo_xlna_rx_gain_bounds); + }else if (AR_SREV_9531_20 (ah)) { +INIT_INI_ARRAY (&ah->iniModesRxGain, + qca953x_2p0_common_wo_xlna_rx_gain_table); +INIT_INI_ARRAY (&ah->ini_modes_rx_gain_bounds, + qca953x_2p0_common_wo_xlna_rx_gain_bounds); }else if (AR_SREV_9580 (ah))INIT_INI_ARRAY (&ah->iniModesRxGain, ar9580_1p0_wo_xlna_rx_gain_table);
Signature · 1 line
2.1.3
PATCH 4/6 ath9k: Fix high tx power in multi-chain mode
In reply to Sujith ManoharanFrom: Miaoqing Pan <[email protected]>
For multi-chain chips, if the thermometer is switched off for a chain which can be disabled by software(e.g tx_chainmask=0x1), the measured tx power is about 5dB higher than target power.
Set thermometer on for all chains to fix this issue.
--- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +12 -10
@@ -4084,25 +4084,27 @@ static void ar9003_hw_thermometer_apply(struct ath_hw *ah)REG_RMW_FIELD (ah,AR_PHY_65NM_CH0_RXTX4 ,AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR , therm_on); -if (ah->caps.tx_chainmask &BIT (1 )) +if (!AR_SREV_9330 (ah) && !AR_SREV_9485 (ah)) {REG_RMW_FIELD (ah,AR_PHY_65NM_CH1_RXTX4 ,AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR , therm_on); -if (ah->caps.tx_chainmask &BIT (2 )) -REG_RMW_FIELD (ah,AR_PHY_65NM_CH2_RXTX4 , -AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR , therm_on); +if (!AR_SREV_9340 (ah) && !AR_SREV_9462 (ah) && !AR_SREV_9531 (ah)) +REG_RMW_FIELD (ah,AR_PHY_65NM_CH2_RXTX4 , +AR_PHY_65NM_CH0_RXTX4_THERM_ON_OVR , + therm_on); + } therm_on = (thermometer <0 ) ?0 : (thermometer ==0 );REG_RMW_FIELD (ah,AR_PHY_65NM_CH0_RXTX4 ,AR_PHY_65NM_CH0_RXTX4_THERM_ON , therm_on); -if (ah->caps.tx_chainmask &BIT (1 )) { +if (!AR_SREV_9330 (ah) && !AR_SREV_9485 (ah)) { therm_on = (thermometer <0 ) ?0 : (thermometer ==1 );REG_RMW_FIELD (ah,AR_PHY_65NM_CH1_RXTX4 ,AR_PHY_65NM_CH0_RXTX4_THERM_ON , therm_on); - } -if (ah->caps.tx_chainmask &BIT (2 )) { - therm_on = (thermometer <0 ) ?0 : (thermometer ==2 ); -REG_RMW_FIELD (ah,AR_PHY_65NM_CH2_RXTX4 , -AR_PHY_65NM_CH0_RXTX4_THERM_ON , therm_on); +if (!AR_SREV_9340 (ah) && !AR_SREV_9462 (ah) && !AR_SREV_9531 (ah)) { + therm_on = (thermometer <0 ) ?0 : (thermometer ==2 ); +REG_RMW_FIELD (ah,AR_PHY_65NM_CH2_RXTX4 , +AR_PHY_65NM_CH0_RXTX4_THERM_ON , therm_on); + } } }
Signature · 1 line
2.1.3
Re: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 7 lines · Sujith Manoharan
From: Miaoqing Pan <[email protected]>
For multi-chain chips, if the thermometer is switched off for a chain which can be disabled by
software(e.g tx_chainmask=0x1), the measured tx power is about 5dB higher than target power.Set thermometer on for all chains to fix this issue.
That doesn't seem right to me. ah->caps.tx_chainmask is not altered based on software antenna configuration.
- Felix
Re: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 2 lines · Felix Fietkau
That doesn't seem right to me.
ah->caps.tx_chainmaskis not altered based on software antenna configuration.
Yes, that's true.
Miaoqing, can you clarify ? Should the thermometer for chain 1 be enabled even though the HW caps contain 0x1 as TX chainmask, for example ? Are there such boards ?
Sujith
RE: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
ah->caps.tx_chainmask is read from eeprom, e.gath9k_hw_fill_cap_info(): pCap->tx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_TX_MASK);
Sujith, the issue was found on ap143(QCA9531, 11n, 2x2), reported by Korea team. They want to make ap143 to work on 1x2 or 2x2 mode. You can also find the changes on 10.2(ar9300_thermometer_apply).
Miaoqing
-----Original Message-----
From: Sujith Manoharan [mailto:[email protected]]
Sent: Wednesday, November 12, 2014 7:38 AM
To: [email protected]
Cc: Pan, Miaoqing; John Linville; [email protected]; ath9k-devel
Subject: Re: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 2 lines · Felix Fietkau
That doesn't seem right to me.
ah->caps.tx_chainmaskis not altered based on software antenna configuration.
Yes, that's true.
Miaoqing, can you clarify ? Should the thermometer for chain 1 be enabled even though the HW caps contain 0x1 as TX chainmask, for example ? Are there such boards ?
Sujith
RE: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 2 lines · Miaoqing
the issue was found on
ap143(QCA9531, 11n, 2x2), reported by Korea team. They want to make ap143 to work on 1x2 or 2x2 mode.
Ok, so apparently there are boards that are 2x2 in the HW, but the tx chainmask is set as 1 in the eeprom. In such cases, the thermometer has to be enabled for both the chains. So, I think we need this fix.
Sujith
Re: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 7 lines · Sujith Manoharan
Quoted 2 lines · Miaoqing
the issue was found on
ap143(QCA9531, 11n, 2x2), reported by Korea team. They want to make ap143 to work on 1x2 or 2x2 mode.Ok, so apparently there are boards that are 2x2 in the HW, but the tx chainmask is set as 1 in the eeprom. In such cases, the thermometer has to be enabled for both the chains. So, I think we need this fix.
Makes sense. I don't like all these duplicated SREV checks though. Let's store the chip_chainmask variable from ath9k_hw_fill_cap_info somewhere in ath_hw and use that.
- Felix
Re: [PATCH 4/6] ath9k: Fix high tx power in multi-chain mode
Quoted 3 lines · Felix Fietkau
Makes sense. I don't like all these duplicated SREV checks though. Let's store the
chip_chainmaskvariable fromath9k_hw_fill_cap_infosomewhere inath_hwand use that.
I'll send a v2.
Sujith
PATCH 5/6 ath9k: Fix LED configuration
In reply to Sujith ManoharanFrom: Sujith Manoharan <[email protected]>
On some x86 platforms, the LED gpio is active high instead of active low. Identify such cards and modify the GPIO usage to make sure LED works properly.
--- drivers/net/wireless/ath/ath9k/ath9k.h | 1 + drivers/net/wireless/ath/ath9k/gpio.c | 9 +++++++-- drivers/net/wireless/ath/ath9k/hw.h | 1 + drivers/net/wireless/ath/ath9k/init.c | 3 +++ drivers/net/wireless/ath/ath9k/main.c | 6 ++++-- drivers/net/wireless/ath/ath9k/pci.c | 4 +++- 6 files changed, 19 insertions(+), 5 deletions(-)
drivers/net/wireless/ath/ath9k/ath9k.h +1 -0
@@ -931,6 +931,7 @@ void ath_ant_comb_scan(struct ath_softc *sc, struct ath_rx_status *rs);#define ATH9K_PCI_AR9565_2ANT 0x0100#define ATH9K_PCI_NO_PLL_PWRSAVE 0x0200#define ATH9K_PCI_KILLER 0x0400 +#define ATH9K_PCI_LED_ACT_HI 0x0800/* * Default cache line size, in bytes.
drivers/net/wireless/ath/ath9k/gpio.c +7 -2
@@ -25,7 +25,12 @@ static void ath_led_brightness(struct led_classdev *led_cdev, enum led_brightness brightness) { struct ath_softc *sc = container_of(led_cdev, struct ath_softc, led_cdev); -ath9k_hw_set_gpio (sc->sc_ah, sc->sc_ah->led_pin, (brightness ==LED_OFF )); +u32 val = (brightness ==LED_OFF ); + +if (sc->sc_ah->config.led_active_high) + val = !val; + +ath9k_hw_set_gpio (sc->sc_ah, sc->sc_ah->led_pin, val); }void ath_deinit_leds (struct ath_softc *sc)
@@ -82,7 +87,7 @@ void ath_fill_led_pin(struct ath_softc *sc)ath9k_hw_cfg_output (ah, ah->led_pin,AR_GPIO_OUTPUT_MUX_AS_OUTPUT );/* LED off, active low */ - ath9k_hw_set_gpio(ah, ah->led_pin, 1); + ath9k_hw_set_gpio(ah, ah->led_pin, (ah->config.led_active_high) ? 0 : 1); }#endif
drivers/net/wireless/ath/ath9k/hw.h +1 -0
@@ -329,6 +329,7 @@ struct ath9k_ops_config {bool alt_mingainidx;bool no_pll_pwrsave;bool tx_gain_buffalo; +bool led_active_high; };enum ath9k_int {
drivers/net/wireless/ath/ath9k/init.c +3 -0
@@ -422,6 +422,9 @@ static void ath9k_init_pcoem_platform(struct ath_softc *sc) ah->config.no_pll_pwrsave = true;ath_info (common,"Disable PLL PowerSave\n" ); } + +if (sc->driver_data &ATH9K_PCI_LED_ACT_HI ) + ah->config.led_active_high = true; } static void ath9k_eeprom_request_cb(const struct firmware *eeprom_blob,
drivers/net/wireless/ath/ath9k/main.c +4 -2
@@ -726,7 +726,8 @@ static int ath9k_start(struct ieee80211_hw *hw)if (ah->led_pin >=0 ) {ath9k_hw_cfg_output (ah, ah->led_pin,AR_GPIO_OUTPUT_MUX_AS_OUTPUT ); -ath9k_hw_set_gpio (ah, ah->led_pin,0 ); +ath9k_hw_set_gpio (ah, ah->led_pin, + (ah->config.led_active_high) ?1 :0 ); }/*
@@ -868,7 +869,8 @@ static void ath9k_stop(struct ieee80211_hw *hw)spin_lock_bh (&sc->sc_pcu_lock);if (ah->led_pin >=0 ) { -ath9k_hw_set_gpio (ah, ah->led_pin,1 ); +ath9k_hw_set_gpio (ah, ah->led_pin, + (ah->config.led_active_high) ?0 :1 );ath9k_hw_cfg_gpio_input (ah, ah->led_pin); }
drivers/net/wireless/ath/ath9k/pci.c +3 -1
@@ -657,7 +657,9 @@ static const struct pci_device_id ath_pci_id_table[] = { 0x0036, PCI_VENDOR_ID_DELL, 0x020E), - .driver_data = ATH9K_PCI_AR9565_2ANT | ATH9K_PCI_BT_ANT_DIV }, + .driver_data = ATH9K_PCI_AR9565_2ANT | + ATH9K_PCI_BT_ANT_DIV | + ATH9K_PCI_LED_ACT_HI},/* PCI-E AR9565 (WB335) */ { PCI_VDEVICE(ATHEROS, 0x0036),
Signature · 1 line
2.1.3
PATCH 6/6 ath9k: Enable TSF2 for generic HW timers
In reply to Sujith ManoharanFrom: Sujith Manoharan <[email protected]>
The base TSF is used for HW timers 0..7, but chips in the AR9003 family and above can support more generic timers. To use them, however, a second HW TSF needs to be enabled. This patch allows usage of the extra timers by starting the second TSF properly.
The extra set of HW timers is apparently also present in AR9287, but we enable it only for the AR9003 family.
--- drivers/net/wireless/ath/ath9k/hw.c | 23 ++++++++++++++++++++++- drivers/net/wireless/ath/ath9k/hw.h | 2 ++ drivers/net/wireless/ath/ath9k/reg.h | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-)
drivers/net/wireless/ath/ath9k/hw.c +22 -1
@@ -1941,6 +1941,8 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,REGWRITE_BUFFER_FLUSH (ah); +ath9k_hw_gen_timer_start_tsf2 (ah); +ath9k_hw_init_desc (ah);if (ath9k_hw_btcoex_is_enabled (ah))
@@ -2905,6 +2907,16 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah) }EXPORT_SYMBOL (ath9k_hw_gettsf32); +void ath9k_hw_gen_timer_start_tsf2 (struct ath_hw *ah) +{ +struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers; + +if (timer_table->tsf2_enabled) { +REG_SET_BIT (ah,AR_DIRECT_CONNECT ,AR_DC_AP_STA_EN ); +REG_SET_BIT (ah,AR_RESET_TSF ,AR_RESET_TSF2_ONCE ); + } +} + struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, void (*trigger)(void *), void (*overflow)(void *),
@@ -2915,7 +2927,11 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,struct ath_gen_timer *timer;if ((timer_index <AR_FIRST_NDP_TIMER ) || - (timer_index >=ATH_MAX_GEN_TIMER )) + (timer_index >=ATH_MAX_GEN_TIMER )) +return NULL ; + +if ((timer_index >AR_FIRST_NDP_TIMER ) && + !AR_SREV_9300_20_OR_LATER (ah))return NULL ; timer =kzalloc (sizeof (struct ath_gen_timer ),GFP_KERNEL );
@@ -2929,6 +2945,11 @@ struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, timer->overflow = overflow; timer->arg = arg; +if ((timer_index >AR_FIRST_NDP_TIMER ) && !timer_table->tsf2_enabled) { + timer_table->tsf2_enabled = true; +ath9k_hw_gen_timer_start_tsf2 (ah); + } +return timer; }EXPORT_SYMBOL (ath_gen_timer_alloc);
drivers/net/wireless/ath/ath9k/hw.h +2 -0
@@ -525,6 +525,7 @@ struct ath_gen_timer {struct ath_gen_timer_table {struct ath_gen_timer *timers[ATH_MAX_GEN_TIMER ];u16 timer_mask; +bool tsf2_enabled; };struct ath_hw_antcomb_conf {
@@ -1036,6 +1037,7 @@ void ath9k_hw_gen_timer_start(struct ath_hw *ah,struct ath_gen_timer *timer, u32 timer_next, u32 timer_period); +void ath9k_hw_gen_timer_start_tsf2 (struct ath_hw *ah);void ath9k_hw_gen_timer_stop (struct ath_hw *ah,struct ath_gen_timer *timer);void ath_gen_timer_free (struct ath_hw *ah,struct ath_gen_timer *timer);
drivers/net/wireless/ath/ath9k/reg.h +3 -0
@@ -1605,6 +1605,7 @@ enum {#define AR_RESET_TSF 0x8020#define AR_RESET_TSF_ONCE 0x01000000 +#define AR_RESET_TSF2_ONCE 0x02000000#define AR_MAX_CFP_DUR 0x8038#define AR_CFP_VAL 0x0000FFFF
@@ -1966,6 +1967,8 @@ enum {#define AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET 0x80000000#define AR_MAC_PCU_GEN_TIMER_TSF_SEL 0x83d8 +#define AR_DIRECT_CONNECT 0x83a0 +#define AR_DC_AP_STA_EN 0x00000001#define AR_AES_MUTE_MASK0 0x805c#define AR_AES_MUTE_MASK0_FC 0x0000FFFF
Signature · 1 line
2.1.3