Commit 6aaefab6 authored by Sujith Manoharan's avatar Sujith Manoharan Committed by Kalle Valo

ath9k: Handle additional patterns on wakeup

Handle the user-configured patterns in the range 8..15
when waking up and update wow_status correctly.
Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent b39adc63
...@@ -186,18 +186,17 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah) ...@@ -186,18 +186,17 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah)
u32 val = 0, rval; u32 val = 0, rval;
/* /*
* read the WoW status register to know * Read the WoW status register to know
* the wakeup reason * the wakeup reason.
*/ */
rval = REG_READ(ah, AR_WOW_PATTERN); rval = REG_READ(ah, AR_WOW_PATTERN);
val = AR_WOW_STATUS(rval); val = AR_WOW_STATUS(rval);
/* /*
* mask only the WoW events that we have enabled. Sometimes * Mask only the WoW events that we have enabled. Sometimes
* we have spurious WoW events from the AR_WOW_PATTERN * we have spurious WoW events from the AR_WOW_PATTERN
* register. This mask will clean it up. * register. This mask will clean it up.
*/ */
val &= ah->wow.wow_event_mask; val &= ah->wow.wow_event_mask;
if (val) { if (val) {
...@@ -211,6 +210,15 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah) ...@@ -211,6 +210,15 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah)
wow_status |= AH_WOW_BEACON_MISS; wow_status |= AH_WOW_BEACON_MISS;
} }
rval = REG_READ(ah, AR_MAC_PCU_WOW4);
val = AR_WOW_STATUS2(rval);
val &= ah->wow.wow_event_mask2;
if (val) {
if (AR_WOW2_PATTERN_FOUND(val))
wow_status |= AH_WOW_USER_PATTERN_EN;
}
/* /*
* set and clear WOW_PME_CLEAR registers for the chip to * set and clear WOW_PME_CLEAR registers for the chip to
* generate next wow signal. * generate next wow signal.
......
...@@ -72,7 +72,7 @@ ...@@ -72,7 +72,7 @@
#define AR_WOW_MAC_INTR_EN 0x00040000 #define AR_WOW_MAC_INTR_EN 0x00040000
#define AR_WOW_MAGIC_EN 0x00010000 #define AR_WOW_MAGIC_EN 0x00010000
#define AR_WOW_PATTERN_EN(x) (x & 0xff) #define AR_WOW_PATTERN_EN(x) (x & 0xff)
#define AR_WOW_PAT_FOUND_SHIFT 8 #define AR_WOW_PAT_FOUND_SHIFT 8
#define AR_WOW_PATTERN_FOUND(x) (x & (0xff << AR_WOW_PAT_FOUND_SHIFT)) #define AR_WOW_PATTERN_FOUND(x) (x & (0xff << AR_WOW_PAT_FOUND_SHIFT))
#define AR_WOW_PATTERN_FOUND_MASK ((0xff) << AR_WOW_PAT_FOUND_SHIFT) #define AR_WOW_PATTERN_FOUND_MASK ((0xff) << AR_WOW_PAT_FOUND_SHIFT)
#define AR_WOW_MAGIC_PAT_FOUND 0x00020000 #define AR_WOW_MAGIC_PAT_FOUND 0x00020000
...@@ -90,6 +90,12 @@ ...@@ -90,6 +90,12 @@
AR_WOW_BEACON_FAIL | \ AR_WOW_BEACON_FAIL | \
AR_WOW_KEEP_ALIVE_FAIL)) AR_WOW_KEEP_ALIVE_FAIL))
#define AR_WOW2_PATTERN_FOUND_SHIFT 8
#define AR_WOW2_PATTERN_FOUND(x) (x & (0xff << AR_WOW2_PATTERN_FOUND_SHIFT))
#define AR_WOW2_PATTERN_FOUND_MASK ((0xff) << AR_WOW2_PATTERN_FOUND_SHIFT)
#define AR_WOW_STATUS2(x) (x & AR_WOW2_PATTERN_FOUND_MASK)
#define AR_WOW_AIFS_CNT(x) (x & 0xff) #define AR_WOW_AIFS_CNT(x) (x & 0xff)
#define AR_WOW_SLOT_CNT(x) ((x & 0xff) << 8) #define AR_WOW_SLOT_CNT(x) ((x & 0xff) << 8)
#define AR_WOW_KEEP_ALIVE_CNT(x) ((x & 0xff) << 16) #define AR_WOW_KEEP_ALIVE_CNT(x) ((x & 0xff) << 16)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment