ar71xx: add an external reset callback for ar913x and use it in ath9k - should reduce...
[openwrt/staging/yousong.git] / package / mac80211 / patches / 300-pending_work.patch
index 92bf897b2a7f85100985d38d5861a9762aaf4117..379e8f47ee34eadefded97ff1e48021de634814f 100644 (file)
        int nstations; /* number of station vifs */
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1698,12 +1698,11 @@ static void ath9k_hw_reset_opmode(struct
+@@ -1366,7 +1366,10 @@ static bool ath9k_hw_set_reset(struct at
+       REGWRITE_BUFFER_FLUSH(ah);
+-      udelay(50);
++      if (AR_SREV_9100(ah))
++              mdelay(10);
++      else
++              udelay(50);
+       REG_WRITE(ah, AR_RTC_RC, 0);
+       if (!ath9k_hw_wait(ah, AR_RTC_RC, AR_RTC_RC_M, 0, AH_WAIT_TIMEOUT)) {
+@@ -1377,8 +1380,12 @@ static bool ath9k_hw_set_reset(struct at
+       if (!AR_SREV_9100(ah))
+               REG_WRITE(ah, AR_RC, 0);
+-      if (AR_SREV_9100(ah))
++      if (AR_SREV_9100(ah) && type != ATH9K_RESET_WARM) {
++              if (ah->external_reset)
++                      ah->external_reset();
++
+               udelay(50);
++      }
+       return true;
+ }
+@@ -1464,7 +1471,8 @@ static bool ath9k_hw_chip_reset(struct a
+                       reset_type = ATH9K_RESET_POWER_ON;
+               else
+                       reset_type = ATH9K_RESET_COLD;
+-      } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) ||
++      } else if (ah->chip_fullsleep ||
++                 REG_READ(ah, AR_Q_TXE) ||
+                  (REG_READ(ah, AR_CR) & AR_CR_RXE))
+               reset_type = ATH9K_RESET_COLD;
+@@ -1698,12 +1706,11 @@ static void ath9k_hw_reset_opmode(struct
  
        ENABLE_REGWRITE_BUFFER(ah);