ath9k: Use a subroutine for the AR9330 reset WAR
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Wed, 18 Dec 2013 04:23:27 +0000 (09:53 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 18 Dec 2013 20:23:51 +0000 (15:23 -0500)
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/init.c

index 3ca682f3c704b9746f0df38a077b4b28263432ec..0e548a461f5539b00f8e293974f2078e1b42e45e 100644 (file)
@@ -1272,6 +1272,42 @@ void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled,
        *coef_exponent = coef_exp - 16;
 }
 
+/* AR9330 WAR:
+ * call external reset function to reset WMAC if:
+ * - doing a cold reset
+ * - we have pending frames in the TX queues.
+ */
+static bool ath9k_hw_ar9330_reset_war(struct ath_hw *ah, int type)
+{
+       int i, npend = 0;
+
+       for (i = 0; i < AR_NUM_QCU; i++) {
+               npend = ath9k_hw_numtxpending(ah, i);
+               if (npend)
+                       break;
+       }
+
+       if (ah->external_reset &&
+           (npend || type == ATH9K_RESET_COLD)) {
+               int reset_err = 0;
+
+               ath_dbg(ath9k_hw_common(ah), RESET,
+                       "reset MAC via external reset\n");
+
+               reset_err = ah->external_reset();
+               if (reset_err) {
+                       ath_err(ath9k_hw_common(ah),
+                               "External reset failed, err=%d\n",
+                               reset_err);
+                       return false;
+               }
+
+               REG_WRITE(ah, AR_RTC_RESET, 1);
+       }
+
+       return true;
+}
+
 static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
 {
        u32 rst_flags;
@@ -1322,38 +1358,8 @@ static bool ath9k_hw_set_reset(struct ath_hw *ah, int type)
        }
 
        if (AR_SREV_9330(ah)) {
-               int npend = 0;
-               int i;
-
-               /* AR9330 WAR:
-                * call external reset function to reset WMAC if:
-                * - doing a cold reset
-                * - we have pending frames in the TX queues
-                */
-
-               for (i = 0; i < AR_NUM_QCU; i++) {
-                       npend = ath9k_hw_numtxpending(ah, i);
-                       if (npend)
-                               break;
-               }
-
-               if (ah->external_reset &&
-                   (npend || type == ATH9K_RESET_COLD)) {
-                       int reset_err = 0;
-
-                       ath_dbg(ath9k_hw_common(ah), RESET,
-                               "reset MAC via external reset\n");
-
-                       reset_err = ah->external_reset();
-                       if (reset_err) {
-                               ath_err(ath9k_hw_common(ah),
-                                       "External reset failed, err=%d\n",
-                                       reset_err);
-                               return false;
-                       }
-
-                       REG_WRITE(ah, AR_RTC_RESET, 1);
-               }
+               if (!ath9k_hw_ar9330_reset_war(ah, type))
+                       return false;
        }
 
        if (ath9k_hw_mci_is_enabled(ah))
index ea67c0100af29344cd7370d069c9aadbbea2ebd1..e63465b7eab9ccc7b0214382881b37d159f31546 100644 (file)
@@ -470,7 +470,6 @@ static int ath9k_init_queues(struct ath_softc *sc)
 
        sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah);
        sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0);
-
        ath_cabq_update(sc);
 
        sc->tx.uapsdq = ath_txq_setup(sc, ATH9K_TX_QUEUE_UAPSD, 0);