From 14dec19faea4b54ef321e96cd4c01cc88cbea455 Mon Sep 17 00:00:00 2001 From: Kalle Valo Date: Tue, 1 Nov 2011 08:44:28 +0200 Subject: [PATCH] --- yaml --- r: 278099 b: refs/heads/master c: 76a9fbe27ec04420844ddf49b9e7a2f872222983 h: refs/heads/master i: 278097: 7392e9adcfd5708f954d4da1f91a00e76aeb3bde 278095: 51ce76e97ec5a5ed0753887e07311fcf6966ff5c v: v3 --- [refs] | 2 +- .../net/wireless/ath/ath6kl/cfg80211.c | 28 +++++++++++++++---- trunk/drivers/net/wireless/ath/ath6kl/core.h | 9 ++++++ trunk/drivers/net/wireless/ath/ath6kl/init.c | 4 +++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 104136c18820..ed961e34bf70 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 52d81a6883fb36c4304fb5619bfa5f61eb7986ef +refs/heads/master: 76a9fbe27ec04420844ddf49b9e7a2f872222983 diff --git a/trunk/drivers/net/wireless/ath/ath6kl/cfg80211.c b/trunk/drivers/net/wireless/ath/ath6kl/cfg80211.c index c62ebf1c2b66..01e83c92c198 100644 --- a/trunk/drivers/net/wireless/ath/ath6kl/cfg80211.c +++ b/trunk/drivers/net/wireless/ath/ath6kl/cfg80211.c @@ -1671,6 +1671,8 @@ int ath6kl_cfg80211_suspend(struct ath6kl *ar, ret); } + ar->state = ATH6KL_STATE_DEEPSLEEP; + break; } @@ -1679,11 +1681,25 @@ int ath6kl_cfg80211_suspend(struct ath6kl *ar, int ath6kl_cfg80211_resume(struct ath6kl *ar) { - if (ar->wmi->pwr_mode != ar->wmi->saved_pwr_mode) { - if (ath6kl_wmi_powermode_cmd(ar->wmi, 0, - ar->wmi->saved_pwr_mode) != 0) - ath6kl_warn("ath6kl_sdio_resume: " - "wmi_powermode_cmd failed\n"); + int ret; + + switch (ar->state) { + case ATH6KL_STATE_DEEPSLEEP: + if (ar->wmi->pwr_mode != ar->wmi->saved_pwr_mode) { + ret = ath6kl_wmi_powermode_cmd(ar->wmi, 0, + ar->wmi->saved_pwr_mode); + if (ret) { + ath6kl_warn("wmi powermode command failed during resume: %d\n", + ret); + } + } + + ar->state = ATH6KL_STATE_ON; + + break; + + default: + break; } return 0; @@ -2254,6 +2270,8 @@ struct ath6kl *ath6kl_core_alloc(struct device *dev) ar->sc_params.scan_ctrl_flags = DEFAULT_SCAN_CTRL_FLAGS; ar->lrssi_roam_threshold = DEF_LRSSI_ROAM_THRESHOLD; + ar->state = ATH6KL_STATE_OFF; + memset((u8 *)ar->sta_list, 0, AP_MAX_NUM_STA * sizeof(struct ath6kl_sta)); diff --git a/trunk/drivers/net/wireless/ath/ath6kl/core.h b/trunk/drivers/net/wireless/ath/ath6kl/core.h index 00cc1db7cbc1..6613248ffd21 100644 --- a/trunk/drivers/net/wireless/ath/ath6kl/core.h +++ b/trunk/drivers/net/wireless/ath/ath6kl/core.h @@ -450,9 +450,18 @@ enum ath6kl_dev_state { FIRST_BOOT, }; +enum ath6kl_state { + ATH6KL_STATE_OFF, + ATH6KL_STATE_ON, + ATH6KL_STATE_DEEPSLEEP, +}; + struct ath6kl { struct device *dev; struct wiphy *wiphy; + + enum ath6kl_state state; + struct ath6kl_bmi bmi; const struct ath6kl_hif_ops *hif_ops; struct wmi *wmi; diff --git a/trunk/drivers/net/wireless/ath/ath6kl/init.c b/trunk/drivers/net/wireless/ath/ath6kl/init.c index 3f1f2547d142..83b4f165eebf 100644 --- a/trunk/drivers/net/wireless/ath/ath6kl/init.c +++ b/trunk/drivers/net/wireless/ath/ath6kl/init.c @@ -1452,6 +1452,8 @@ int ath6kl_init_hw_start(struct ath6kl *ar) goto err_htc_stop; } + ar->state = ATH6KL_STATE_ON; + return 0; err_htc_stop: @@ -1480,6 +1482,8 @@ int ath6kl_init_hw_stop(struct ath6kl *ar) if (ret) ath6kl_warn("failed to power off hif: %d\n", ret); + ar->state = ATH6KL_STATE_OFF; + return 0; }