aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/404-ath9k-wake-up-the-chip-for-TSF-reset.patch
blob: f4937f763c47a7ea5bbdc798bcca73f5ea98b7d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
From d2fa21debb4ea8c022b0fbed165eea821d19da9e Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@openwrt.org>
Date: Sat, 20 Jun 2009 23:57:22 +0200
Subject: [PATCH] ath9k: wake up the chip for TSF reset

If we are in NETWORK SLEEP state, AR_SLP32_TSF_WRITE_STATUS limit
always exceeds in 'ath9k_hw_reset_tsf', because reading of the
AR_SLP3 register always return with the magic 0xdeadbeef value.

Changes-licensed-under: ISC
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/hw.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -3803,6 +3803,7 @@ void ath9k_hw_reset_tsf(struct ath_hw *a
 {
 	int count;
 
+	ath9k_ps_wakeup(ah->ah_sc);
 	count = 0;
 	while (REG_READ(ah, AR_SLP32_MODE) & AR_SLP32_TSF_WRITE_STATUS) {
 		count++;
@@ -3814,6 +3815,7 @@ void ath9k_hw_reset_tsf(struct ath_hw *a
 		udelay(10);
 	}
 	REG_WRITE(ah, AR_RESET_TSF, AR_RESET_TSF_ONCE);
+	ath9k_ps_restore(ah->ah_sc);
 }
 
 bool ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)