diff options
Diffstat (limited to 'drivers/staging/cw1200/pm.c')
-rw-r--r-- | drivers/staging/cw1200/pm.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/staging/cw1200/pm.c b/drivers/staging/cw1200/pm.c index 48e46e6c3f3..3b6c0bf496c 100644 --- a/drivers/staging/cw1200/pm.c +++ b/drivers/staging/cw1200/pm.c @@ -26,6 +26,7 @@ struct cw1200_suspend_state { unsigned long connection_loss_tmo; unsigned long join_tmo; unsigned long direct_probe; + unsigned long link_id_gc; }; static struct dev_pm_ops cw1200_pm_ops = { @@ -241,11 +242,17 @@ int cw1200_wow_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) cw1200_suspend_work(&priv->join_timeout); state->direct_probe = cw1200_suspend_work(&priv->scan.probe_work); + state->link_id_gc = + cw1200_suspend_work(&priv->link_id_gc_work); /* Stop serving thread */ if (cw1200_bh_suspend(priv)) goto revert4; + ret = timer_pending(&priv->mcast_timeout); + if (ret) + goto revert5; + /* Store suspend state */ pm_state->suspend_state = state; @@ -267,6 +274,8 @@ int cw1200_wow_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) return 0; +revert5: + WARN_ON(cw1200_bh_resume(priv)); revert4: cw1200_resume_work(priv, &priv->bss_loss_work, state->bss_loss_tmo); @@ -276,6 +285,8 @@ revert4: state->join_tmo); cw1200_resume_work(priv, &priv->scan.probe_work, state->direct_probe); + cw1200_resume_work(priv, &priv->link_id_gc_work, + state->link_id_gc); kfree(state); revert3: wsm_unlock_tx(priv); @@ -309,6 +320,8 @@ int cw1200_wow_resume(struct ieee80211_hw *hw) state->join_tmo); cw1200_resume_work(priv, &priv->scan.probe_work, state->direct_probe); + cw1200_resume_work(priv, &priv->link_id_gc_work, + state->link_id_gc); /* Unlock datapath */ wsm_unlock_tx(priv); |