diff options
| author | Sarada Prasanna Garnayak <sgarna@codeaurora.org> | 2018-03-21 21:10:28 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-04-11 23:05:37 -0700 |
| commit | 521e320a4097b9d6dd58934d84da804cd90e1b34 (patch) | |
| tree | 932a59e713684d8bff66c9627d5e215dc2f8ff9e | |
| parent | d620817f3ab49a9e876bb07c963e8966216c4e9d (diff) | |
ath10k: deinit wow config in driver unload
The mac80211 support user configured wowlan enable/disable
feature using wlan utils, If the wowlan feature is not enabled
by user the mac80211 subsystem fallback to core stop instead
of wow suspend during system suspend even the wlan firmware
support wowlan feature.
So in driver load init wow and set the wlan device as a wakeup
capable device and deinit wow in driver unload.
CRs-Fixed: 2218083
Change-Id: I5ac5b6e0118f8a3dd01cfbdd706f56fa33b3e101
Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/mac.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/wow.c | 11 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/wow.h | 4 |
3 files changed, 14 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 8d382f12b5fd..84b733a3b37a 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -8308,6 +8308,7 @@ err_free: void ath10k_mac_unregister(struct ath10k *ar) { + ath10k_wow_deinit(ar); ieee80211_unregister_hw(ar->hw); if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) diff --git a/drivers/net/wireless/ath/ath10k/wow.c b/drivers/net/wireless/ath/ath10k/wow.c index 262a1a19196e..9d3c693222cd 100644 --- a/drivers/net/wireless/ath/ath10k/wow.c +++ b/drivers/net/wireless/ath/ath10k/wow.c @@ -577,8 +577,15 @@ int ath10k_wow_init(struct ath10k *ar) ar->wow.wowlan_support = ath10k_wowlan_support; ar->wow.wowlan_support.n_patterns = ar->wow.max_num_patterns; ar->hw->wiphy->wowlan = &ar->wow.wowlan_support; - - device_set_wakeup_capable(ar->dev, true); + device_init_wakeup(ar->dev, true); return 0; } + +void ath10k_wow_deinit(struct ath10k *ar) +{ + if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT, + ar->running_fw->fw_file.fw_features) && + test_bit(WMI_SERVICE_WOW, ar->wmi.svc_map)) + device_init_wakeup(ar->dev, false); +} diff --git a/drivers/net/wireless/ath/ath10k/wow.h b/drivers/net/wireless/ath/ath10k/wow.h index b53211584052..a33881739138 100644 --- a/drivers/net/wireless/ath/ath10k/wow.h +++ b/drivers/net/wireless/ath/ath10k/wow.h @@ -27,6 +27,7 @@ struct ath10k_wow { #ifdef CONFIG_PM int ath10k_wow_init(struct ath10k *ar); +void ath10k_wow_deinit(struct ath10k *ar); int ath10k_wow_op_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan); int ath10k_wow_op_resume(struct ieee80211_hw *hw); @@ -41,5 +42,8 @@ static inline int ath10k_wow_init(struct ath10k *ar) return 0; } +void ath10k_wow_deinit(struct ath10k *ar) +{ +} #endif /* CONFIG_PM */ #endif /* _WOW_H_ */ |
