ath9k: Initialize BTCOEX scheme using a helper
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Wed, 22 Feb 2012 07:10:49 +0000 (12:40 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 27 Feb 2012 19:06:35 +0000 (14:06 -0500)
Setting up the required scheme can be done as part of the
BTCOEX initialization path and it doesn't belong in
ath9k_hw_fill_cap_info() anyway.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/btcoex.c
drivers/net/wireless/ath/ath9k/btcoex.h
drivers/net/wireless/ath/ath9k/gpio.c
drivers/net/wireless/ath/ath9k/hw.c

index 6566952b08cc1c62aea70f74be25d1ac0ae4da63..536595952cd2d5713f2f030fdf267a0d538f1adc 100644 (file)
@@ -98,6 +98,40 @@ void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum)
 }
 EXPORT_SYMBOL(ath9k_hw_init_btcoex_hw);
 
+void ath9k_hw_btcoex_init_scheme(struct ath_hw *ah)
+{
+       struct ath_common *common = ath9k_hw_common(ah);
+       struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw;
+
+       /*
+        * Check if BTCOEX is globally disabled.
+        */
+       if (!common->btcoex_enabled) {
+               btcoex_hw->scheme = ATH_BTCOEX_CFG_NONE;
+               return;
+       }
+
+       if (AR_SREV_9462(ah)) {
+               btcoex_hw->scheme = ATH_BTCOEX_CFG_MCI;
+       } else if (AR_SREV_9300_20_OR_LATER(ah)) {
+               btcoex_hw->scheme = ATH_BTCOEX_CFG_3WIRE;
+               btcoex_hw->btactive_gpio = ATH_BTACTIVE_GPIO_9300;
+               btcoex_hw->wlanactive_gpio = ATH_WLANACTIVE_GPIO_9300;
+               btcoex_hw->btpriority_gpio = ATH_BTPRIORITY_GPIO_9300;
+       } else if (AR_SREV_9280_20_OR_LATER(ah)) {
+               btcoex_hw->btactive_gpio = ATH_BTACTIVE_GPIO_9280;
+               btcoex_hw->wlanactive_gpio = ATH_WLANACTIVE_GPIO_9280;
+
+               if (AR_SREV_9285(ah)) {
+                       btcoex_hw->scheme = ATH_BTCOEX_CFG_3WIRE;
+                       btcoex_hw->btpriority_gpio = ATH_BTPRIORITY_GPIO_9285;
+               } else {
+                       btcoex_hw->scheme = ATH_BTCOEX_CFG_2WIRE;
+               }
+       }
+}
+EXPORT_SYMBOL(ath9k_hw_btcoex_init_scheme);
+
 void ath9k_hw_btcoex_init_2wire(struct ath_hw *ah)
 {
        struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw;
index 0cb15cd85e9214a1d8b7925393bc9996fc36adf6..10627b46ec34956bb14054605abe3ed369797579 100644 (file)
@@ -97,6 +97,7 @@ struct ath_btcoex_hw {
        u32 wlan_weight[AR9300_NUM_WLAN_WEIGHTS];
 };
 
+void ath9k_hw_btcoex_init_scheme(struct ath_hw *ah);
 void ath9k_hw_btcoex_init_2wire(struct ath_hw *ah);
 void ath9k_hw_btcoex_init_3wire(struct ath_hw *ah);
 void ath9k_hw_btcoex_init_mci(struct ath_hw *ah);
index 77b3eb7b7a33052ffa64c8a218d8f3d0e70d2424..4da486bccfa440575e6c02ef1e432812ba787826 100644 (file)
@@ -391,6 +391,8 @@ int ath9k_init_btcoex(struct ath_softc *sc)
        struct ath_hw *ah = sc->sc_ah;
        int r;
 
+       ath9k_hw_btcoex_init_scheme(ah);
+
        switch (ath9k_hw_get_btcoex_scheme(sc->sc_ah)) {
        case ATH_BTCOEX_CFG_NONE:
                break;
index cb46d41f2288cb94f4fedade7e49d9ff3facd2cc..f4b121f33132feabaf0da5e6fd9c8f48d6338fcd 100644 (file)
@@ -2303,7 +2303,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
        struct ath9k_hw_capabilities *pCap = &ah->caps;
        struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
        struct ath_common *common = ath9k_hw_common(ah);
-       struct ath_btcoex_hw *btcoex_hw = &ah->btcoex_hw;
        unsigned int chip_chainmask;
 
        u16 eeval;
@@ -2422,30 +2421,6 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
        else
                pCap->hw_caps |= ATH9K_HW_CAP_4KB_SPLITTRANS;
 
-       if (common->btcoex_enabled) {
-               if (AR_SREV_9462(ah))
-                       btcoex_hw->scheme = ATH_BTCOEX_CFG_MCI;
-               else if (AR_SREV_9300_20_OR_LATER(ah)) {
-                       btcoex_hw->scheme = ATH_BTCOEX_CFG_3WIRE;
-                       btcoex_hw->btactive_gpio = ATH_BTACTIVE_GPIO_9300;
-                       btcoex_hw->wlanactive_gpio = ATH_WLANACTIVE_GPIO_9300;
-                       btcoex_hw->btpriority_gpio = ATH_BTPRIORITY_GPIO_9300;
-               } else if (AR_SREV_9280_20_OR_LATER(ah)) {
-                       btcoex_hw->btactive_gpio = ATH_BTACTIVE_GPIO_9280;
-                       btcoex_hw->wlanactive_gpio = ATH_WLANACTIVE_GPIO_9280;
-
-                       if (AR_SREV_9285(ah)) {
-                               btcoex_hw->scheme = ATH_BTCOEX_CFG_3WIRE;
-                               btcoex_hw->btpriority_gpio =
-                                               ATH_BTPRIORITY_GPIO_9285;
-                       } else {
-                               btcoex_hw->scheme = ATH_BTCOEX_CFG_2WIRE;
-                       }
-               }
-       } else {
-               btcoex_hw->scheme = ATH_BTCOEX_CFG_NONE;
-       }
-
        if (AR_SREV_9300_20_OR_LATER(ah)) {
                pCap->hw_caps |= ATH9K_HW_CAP_EDMA | ATH9K_HW_CAP_FASTCLOCK;
                if (!AR_SREV_9330(ah) && !AR_SREV_9485(ah))