ath9k: issue a cold reset after failures or after bringing the chip out of full sleep...
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 25 Feb 2013 19:56:26 +0000 (19:56 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 25 Feb 2013 19:56:26 +0000 (19:56 +0000)
Backport of r35785

git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@35786 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/mac80211/patches/300-pending_work.patch
package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
package/mac80211/patches/525-ath9k_use_configured_antenna_gain.patch
package/mac80211/patches/564-ath9k_debugfs_diag.patch
package/mac80211/patches/565-ath9k_disable_paprd.patch
package/mac80211/patches/b01-ath9k-allow-to-disable-bands-via-platform-data.patch

index 3607e76..7cc4569 100644 (file)
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2568,7 +2568,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -1467,7 +1467,9 @@ 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) ||
++                 (REG_READ(ah, AR_CR) & AR_CR_RXE))
++              reset_type = ATH9K_RESET_COLD;
+       if (!ath9k_hw_set_reset_reg(ah, reset_type))
+               return false;
+@@ -2568,7 +2570,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
  
        if (AR_SREV_9300_20_OR_LATER(ah)) {
                ah->enabled_cals |= TX_IQ_CAL;
index 3b78afa..b6591b0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1949,8 +1949,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1951,8 +1951,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                REG_WRITE(ah, AR_OBS, 8);
  
        if (ah->config.rx_intr_mitigation) {
index 367438e..04bd2b3 100644 (file)
@@ -10,7 +10,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2828,7 +2828,7 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2830,7 +2830,7 @@ void ath9k_hw_apply_txpower(struct ath_h
        channel = chan->chan;
        chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
        new_pwr = min_t(int, chan_pwr, reg->power_limit);
index b7d9f5e..3c7881d 100644 (file)
@@ -94,7 +94,7 @@
  void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause);
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1749,6 +1749,20 @@ fail:
+@@ -1751,6 +1751,20 @@ fail:
        return -EINVAL;
  }
  
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
                   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
-@@ -2026,6 +2040,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2028,6 +2042,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
        }
  
        ath9k_hw_apply_gpio_override(ah);
index 903a2b0..523ac97 100644 (file)
@@ -11,7 +11,7 @@
        debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2521,10 +2521,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2523,10 +2523,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw
                pCap->rx_status_len = sizeof(struct ar9003_rxs);
                pCap->tx_desc_len = sizeof(struct ar9003_txc);
                pCap->txs_len = sizeof(struct ar9003_txs);
index 0a071ff..8b4ddef 100644 (file)
@@ -12,7 +12,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2413,17 +2413,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2415,17 +2415,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw
        }
  
        eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE);