ath6kl: add suspend_cutpower module parameter
authorKalle Valo <kvalo@qca.qualcomm.com>
Thu, 3 Nov 2011 10:18:31 +0000 (12:18 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 11 Nov 2011 10:59:58 +0000 (12:59 +0200)
This is to force ath6kl to power off hardware during suspend even if
sdio support keep power. This is needed, for example, when sdio
controller is buggy or maximum powersaving is desired.

Usage:

insmod ath6kl.ko suspend_cutpower=1

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/init.c
drivers/net/wireless/ath/ath6kl/sdio.c

index f301c32a2dd818266143d82b14f1e442588daec4..c30642e9795dfc7820a79914f47e5f8263217b8c 100644 (file)
@@ -166,6 +166,7 @@ struct ath6kl_fw_ie {
 #define ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN  BIT(1)
 #define ATH6KL_CONF_ENABLE_11N                 BIT(2)
 #define ATH6KL_CONF_ENABLE_TX_BURST            BIT(3)
+#define ATH6KL_CONF_SUSPEND_CUTPOWER           BIT(4)
 
 enum wlan_low_pwr_state {
        WLAN_POWER_STATE_ON,
index abc1d8ea7f5f2d9f6e95e06b5d5db06d626ff333..57529acb9144ace752020f0cd75f16fc8d663dd2 100644 (file)
 
 unsigned int debug_mask;
 static unsigned int testmode;
+static bool suspend_cutpower;
 
 module_param(debug_mask, uint, 0644);
 module_param(testmode, uint, 0644);
+module_param(suspend_cutpower, bool, 0444);
 
 /*
  * Include definitions here that can be used to tune the WLAN module
@@ -1596,6 +1598,9 @@ int ath6kl_core_init(struct ath6kl *ar)
        ar->conf_flags = ATH6KL_CONF_IGNORE_ERP_BARKER |
                         ATH6KL_CONF_ENABLE_11N | ATH6KL_CONF_ENABLE_TX_BURST;
 
+       if (suspend_cutpower)
+               ar->conf_flags |= ATH6KL_CONF_SUSPEND_CUTPOWER;
+
        ar->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM |
                            WIPHY_FLAG_HAVE_AP_SME;
 
index ccb888b41c46fec7012eaa115c8b81de9e885fda..a026daef237547c096646c1e03e81fa083132c46 100644 (file)
@@ -784,7 +784,8 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar)
 
        ath6kl_dbg(ATH6KL_DBG_SUSPEND, "sdio suspend pm_caps 0x%x\n", flags);
 
-       if (!(flags & MMC_PM_KEEP_POWER)) {
+       if (!(flags & MMC_PM_KEEP_POWER) ||
+           (ar->conf_flags & ATH6KL_CONF_SUSPEND_CUTPOWER)) {
                /* as host doesn't support keep power we need to cut power */
                return ath6kl_cfg80211_suspend(ar, ATH6KL_CFG_SUSPEND_CUTPOWER);
        }