Enables code reuse for proper hw reconfiguration
that is in turn required for proper
suspend/hibernation/wowlan support.

Signed-off-by: Michal Kazior <michal.kaz...@tieto.com>
---
 drivers/net/wireless/ath/ath10k/core.c |   44 +++++++++++++++++++++++---------
 drivers/net/wireless/ath/ath10k/core.h |    2 ++
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/core.c 
b/drivers/net/wireless/ath/ath10k/core.c
index f1312fa..dcddae4 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -502,8 +502,7 @@ void ath10k_core_destroy(struct ath10k *ar)
 }
 EXPORT_SYMBOL(ath10k_core_destroy);
 
-
-int ath10k_core_register(struct ath10k *ar)
+int ath10k_core_start(struct ath10k *ar)
 {
        struct bmi_target_info target_info;
        int status;
@@ -589,9 +588,36 @@ int ath10k_core_register(struct ath10k *ar)
        if (status)
                goto err_disconnect_htc;
 
+       return 0;
+
+err_disconnect_htc:
+       ath10k_htc_stop(&ar->htc);
+err_htt_detach:
+       ath10k_htt_detach(&ar->htt);
+err_wmi_detach:
+       ath10k_wmi_detach(ar);
+err:
+       return status;
+}
+
+void ath10k_core_stop(struct ath10k *ar)
+{
+       ath10k_htc_stop(&ar->htc);
+       ath10k_htt_detach(&ar->htt);
+       ath10k_wmi_detach(ar);
+}
+
+int ath10k_core_register(struct ath10k *ar)
+{
+       int status;
+
+       status = ath10k_core_start(ar);
+       if (status)
+               goto err;
+
        status = ath10k_mac_register(ar);
        if (status)
-               goto err_disconnect_htc;
+               goto err_core_stop;
 
        status = ath10k_debug_create(ar);
        if (status) {
@@ -603,12 +629,8 @@ int ath10k_core_register(struct ath10k *ar)
 
 err_unregister_mac:
        ath10k_mac_unregister(ar);
-err_disconnect_htc:
-       ath10k_htc_stop(&ar->htc);
-err_htt_detach:
-       ath10k_htt_detach(&ar->htt);
-err_wmi_detach:
-       ath10k_wmi_detach(ar);
+err_core_stop:
+       ath10k_core_stop(ar);
 err:
        return status;
 }
@@ -620,9 +642,7 @@ void ath10k_core_unregister(struct ath10k *ar)
         * Otherwise we will fail to submit commands to FW and mac80211 will be
         * unhappy about callback failures. */
        ath10k_mac_unregister(ar);
-       ath10k_htc_stop(&ar->htc);
-       ath10k_htt_detach(&ar->htt);
-       ath10k_wmi_detach(ar);
+       ath10k_core_stop(ar);
 }
 EXPORT_SYMBOL(ath10k_core_unregister);
 
diff --git a/drivers/net/wireless/ath/ath10k/core.h 
b/drivers/net/wireless/ath/ath10k/core.h
index 2f7065c..5a0b2ce 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -353,6 +353,8 @@ struct ath10k *ath10k_core_create(void *hif_priv, struct 
device *dev,
                                  const struct ath10k_hif_ops *hif_ops);
 void ath10k_core_destroy(struct ath10k *ar);
 
+int ath10k_core_start(struct ath10k *ar);
+void ath10k_core_stop(struct ath10k *ar);
 int ath10k_core_register(struct ath10k *ar);
 void ath10k_core_unregister(struct ath10k *ar);
 
-- 
1.7.9.5

_______________________________________________
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel

Reply via email to