ath9k_hw: clear MIB interrupt causes when skipping ANI adjustments
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Sat, 12 Jun 2010 04:33:41 +0000 (00:33 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 14 Jun 2010 19:39:29 +0000 (15:39 -0400)
We get an MIB interrupt when we hit certain PHY error counter
thresholds. If ANI is disabled but the MIB interrupt is enabled
we'll keep around the old MIB interrupt causes.

Since ath9k disables the MIB interrupt when ANI is disabled
this is not a fix, but more of a sanity fix in case we ever
need the MIB interrupt enabled but disabling ANI.

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ani.c

index e879055c058f3fda7a0b5243f9d9e9aee4f09528..66d0b8846a0e1efc7322ce881321aec6bd0fa8b1 100644 (file)
@@ -585,8 +585,15 @@ void ath9k_hw_procmibevent(struct ath_hw *ah)
        /* Clear the mib counters and save them in the stats */
        ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
 
-       if (!DO_ANI(ah))
+       if (!DO_ANI(ah)) {
+               /*
+                * We must always clear the interrupt cause by
+                * resetting the phy error regs.
+                */
+               REG_WRITE(ah, AR_PHY_ERR_1, 0);
+               REG_WRITE(ah, AR_PHY_ERR_2, 0);
                return;
+       }
 
        /* NB: these are not reset-on-read */
        phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);