summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/ap.c
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-08-18 23:32:14 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-10-13 10:04:43 +0200
commit31a59450487a189e6b148364c5965ad7f1982b41 (patch)
tree0f5003aa1a04652600a8869af81603ebbc32f4bd /drivers/staging/cw1200/ap.c
parent5b48061fc3276dadaceeff6c152e8f5b0f250c2e (diff)
cw1200: do not allow suspend when it is useless.
Do not allow entering suspend state if firmware is polling for multicasts and when scanning. + bugfix: remove blocking calls from wow_suspend() callback to reduce suspend time and make sure watchdog is not triggered. Change-Id: I69196fda25b56d01b90311582705ba586759ae35 Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/29079 Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33511 Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'drivers/staging/cw1200/ap.c')
-rwxr-xr-xdrivers/staging/cw1200/ap.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/staging/cw1200/ap.c b/drivers/staging/cw1200/ap.c
index 39c11172544..e4bf98d46ed 100755
--- a/drivers/staging/cw1200/ap.c
+++ b/drivers/staging/cw1200/ap.c
@@ -539,6 +539,13 @@ void cw1200_suspend_resume(struct cw1200_common *priv,
if (arg->stop) {
priv->tx_multicast = false;
} else {
+ /* Firmware sends this indication every DTIM if there
+ * is a STA in powersave connected. There is no reason
+ * to suspend, following wakeup will consume much more
+ * power than could be saved. */
+ cw1200_pm_stay_awake(&priv->pm_state,
+ priv->join_dtim_period *
+ (priv->beacon_int + 20) * HZ / 1024);
priv->tx_multicast = priv->aid0_bit_set &&
priv->buffered_multicasts;
if (priv->tx_multicast)
@@ -652,6 +659,7 @@ static int cw1200_start_ap(struct cw1200_common *priv)
.ssidLength = priv->ssid_length,
};
priv->beacon_int = conf->beacon_int;
+ priv->join_dtim_period = conf->dtim_period;
memcpy(&start.ssid[0], priv->ssid, start.ssidLength);