aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2012-09-16 14:35:23 -0700
committerDmitry Shmidt <dimitrysh@google.com>2012-09-17 11:36:29 -0700
commit0aa3b61806501c323bfc4ed213e84766d8e2727b (patch)
treed032d27c9912fba0eb1dedcda8fa1f4febb44494
parent477f1d90566c9e6c4252d83e1ccef359aa3d9501 (diff)
downloadkernel_samsung_tuna-0aa3b61806501c323bfc4ed213e84766d8e2727b.zip
kernel_samsung_tuna-0aa3b61806501c323bfc4ed213e84766d8e2727b.tar.gz
kernel_samsung_tuna-0aa3b61806501c323bfc4ed213e84766d8e2727b.tar.bz2
net: wireless: bcmdhd: Update wifi stack ps state if was changed
Change-Id: Ib1ee0b6ee05077d1ed6cfb578b6384dfc9787c81 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com> Conflicts: drivers/net/wireless/bcmdhd/wl_cfg80211.h
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c3
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c17
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.h1
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfgp2p.c2
4 files changed, 23 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index a189d63..4570ace 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -4381,6 +4381,9 @@ int net_os_set_suspend(struct net_device *dev, int val, int force)
#else
ret = dhd_suspend_resume_helper(dhd, val, force);
#endif
+#ifdef WL_CFG80211
+ wl_cfg80211_update_power_mode(dev);
+#endif
}
return ret;
}
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index ea6aedd..5abe2b3 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -3067,6 +3067,23 @@ get_station_err:
return err;
}
+int wl_cfg80211_update_power_mode(struct net_device *dev)
+{
+ int pm = -1;
+ int err;
+
+ err = wldev_ioctl(dev, WLC_GET_PM, &pm, sizeof(pm), false);
+ if (err || (pm == -1)) {
+ WL_ERR(("error (%d)\n", err));
+ } else {
+ pm = (pm == PM_OFF) ? false : true;
+ WL_DBG(("%s: %d\n", __func__, pm));
+ if (dev->ieee80211_ptr)
+ dev->ieee80211_ptr->ps = pm;
+ }
+ return err;
+}
+
static s32
wl_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
bool enabled, s32 timeout)
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.h b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
index 8886968..39832a5 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.h
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
@@ -686,4 +686,5 @@ int wl_cfg80211_do_driver_init(struct net_device *net);
void wl_cfg80211_enable_trace(int level);
extern s32 wl_update_wiphybands(struct wl_priv *wl);
extern s32 wl_cfg80211_if_is_group_owner(void);
+extern int wl_cfg80211_update_power_mode(struct net_device *dev);
#endif /* _wl_cfg80211_h_ */
diff --git a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
index f06ae50..7bcd144 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
@@ -1755,6 +1755,8 @@ wl_cfgp2p_set_p2p_ps(struct wl_priv *wl, struct net_device *ndev, char* buf, int
WLC_SET_PM, &pm, sizeof(pm), true);
if (unlikely(ret)) {
CFGP2P_ERR(("error (%d)\n", ret));
+ } else {
+ wl_cfg80211_update_power_mode(ndev);
}
}
}