aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch')
-rw-r--r--package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch b/package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch
new file mode 100644
index 0000000000..053df8428d
--- /dev/null
+++ b/package/kernel/mac80211/patches/333-ath9k-use-REG_RMW-and-rmw-buffer-in-ath9k_hw_4k_set_.patch
@@ -0,0 +1,47 @@
+From: Oleksij Rempel <linux@rempel-privat.de>
+Date: Sun, 22 Mar 2015 19:30:01 +0100
+Subject: [PATCH] ath9k: use REG_RMW and rmw buffer in
+ ath9k_hw_4k_set_gain
+
+it is possible to reduce time needed for this function
+by rplacing REG_WRITE with REG_RMW (plus dummy 0) and putt all commands
+in same buffer.
+
+Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+
+--- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
++++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
+@@ -772,15 +772,14 @@ static void ath9k_hw_4k_set_gain(struct
+ struct ar5416_eeprom_4k *eep,
+ u8 txRxAttenLocal)
+ {
+- REG_WRITE(ah, AR_PHY_SWITCH_CHAIN_0,
+- pModal->antCtrlChain[0]);
+-
+- REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0),
+- (REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
+- ~(AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF |
+- AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF)) |
+- SM(pModal->iqCalICh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF) |
+- SM(pModal->iqCalQCh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF));
++ ENABLE_REG_RMW_BUFFER(ah);
++ REG_RMW(ah, AR_PHY_SWITCH_CHAIN_0,
++ pModal->antCtrlChain[0], 0);
++
++ REG_RMW(ah, AR_PHY_TIMING_CTRL4(0),
++ SM(pModal->iqCalICh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF) |
++ SM(pModal->iqCalQCh[0], AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF),
++ AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF | AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF);
+
+ if ((eep->baseEepHeader.version & AR5416_EEP_VER_MINOR_MASK) >=
+ AR5416_EEP_MINOR_VER_3) {
+@@ -819,6 +818,7 @@ static void ath9k_hw_4k_set_gain(struct
+ AR9280_PHY_RXGAIN_TXRX_ATTEN, txRxAttenLocal);
+ REG_RMW_FIELD(ah, AR_PHY_RXGAIN + 0x1000,
+ AR9280_PHY_RXGAIN_TXRX_MARGIN, pModal->rxTxMarginCh[0]);
++ REG_RMW_BUFFER_FLUSH(ah);
+ }
+
+ /*