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: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
		
							parent
							
								
									b39adc63bf
								
							
						
					
					
						commit
						6aaefab6cf
					
				| @ -186,18 +186,17 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah) | ||||
| 	u32 val = 0, rval; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * read the WoW status register to know | ||||
| 	 * the wakeup reason | ||||
| 	 * Read the WoW status register to know | ||||
| 	 * the wakeup reason. | ||||
| 	 */ | ||||
| 	rval = REG_READ(ah, AR_WOW_PATTERN); | ||||
| 	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 | ||||
| 	 * register. This mask will clean it up. | ||||
| 	 */ | ||||
| 
 | ||||
| 	val &= ah->wow.wow_event_mask; | ||||
| 
 | ||||
| 	if (val) { | ||||
| @ -211,6 +210,15 @@ u32 ath9k_hw_wow_wakeup(struct ath_hw *ah) | ||||
| 			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 | ||||
| 	 * generate next wow signal. | ||||
|  | ||||
| @ -72,7 +72,7 @@ | ||||
| #define AR_WOW_MAC_INTR_EN              0x00040000 | ||||
| #define AR_WOW_MAGIC_EN                 0x00010000 | ||||
| #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_MASK       ((0xff) << AR_WOW_PAT_FOUND_SHIFT) | ||||
| #define AR_WOW_MAGIC_PAT_FOUND          0x00020000 | ||||
| @ -90,6 +90,12 @@ | ||||
|                                                AR_WOW_BEACON_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_SLOT_CNT(x)              ((x & 0xff) << 8) | ||||
| #define AR_WOW_KEEP_ALIVE_CNT(x)        ((x & 0xff) << 16) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user