aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2013-02-12 11:06:52 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-02-12 11:06:52 -0500
commit4fe0c75eedb15af13859ef123db17fefed5af7ae (patch)
tree6ed38d8e2e0ae457d10a2af2e496e9ecb4d34e08 /drivers/net
parent8457703f1e86aaf0f134402dd1e09e1f13e65222 (diff)
parent9c35d7d2368f54313b988a01c408e5cf863ffd9e (diff)
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c4
-rw-r--r--drivers/net/wireless/ath/ath6kl/wmi.c2
-rw-r--r--drivers/net/wireless/ath/wil6210/cfg80211.c2
-rw-r--r--drivers/net/wireless/ath/wil6210/wmi.c2
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c4
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/mac80211.c3
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c1
-rw-r--r--drivers/net/wireless/libertas/cfg.c8
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c2
-rw-r--r--drivers/net/wireless/mwifiex/scan.c2
-rw-r--r--drivers/net/wireless/mwifiex/sta_ioctl.c11
-rw-r--r--drivers/net/wireless/orinoco/scan.c4
-rw-r--r--drivers/net/wireless/rndis_wlan.c4
-rw-r--r--drivers/net/wireless/ti/wl1251/event.c6
-rw-r--r--drivers/net/wireless/ti/wl1251/main.c24
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c1
16 files changed, 45 insertions, 35 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 259c43332fb8..a29f04e30830 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -767,7 +767,7 @@ void ath6kl_cfg80211_connect_event(struct ath6kl_vif *vif, u16 channel,
767 ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "ad-hoc %s selected\n", 767 ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "ad-hoc %s selected\n",
768 nw_type & ADHOC_CREATOR ? "creator" : "joiner"); 768 nw_type & ADHOC_CREATOR ? "creator" : "joiner");
769 cfg80211_ibss_joined(vif->ndev, bssid, GFP_KERNEL); 769 cfg80211_ibss_joined(vif->ndev, bssid, GFP_KERNEL);
770 cfg80211_put_bss(bss); 770 cfg80211_put_bss(ar->wiphy, bss);
771 return; 771 return;
772 } 772 }
773 773
@@ -778,7 +778,7 @@ void ath6kl_cfg80211_connect_event(struct ath6kl_vif *vif, u16 channel,
778 assoc_req_ie, assoc_req_len, 778 assoc_req_ie, assoc_req_len,
779 assoc_resp_ie, assoc_resp_len, 779 assoc_resp_ie, assoc_resp_len,
780 WLAN_STATUS_SUCCESS, GFP_KERNEL); 780 WLAN_STATUS_SUCCESS, GFP_KERNEL);
781 cfg80211_put_bss(bss); 781 cfg80211_put_bss(ar->wiphy, bss);
782 } else if (vif->sme_state == SME_CONNECTED) { 782 } else if (vif->sme_state == SME_CONNECTED) {
783 /* inform roam event to cfg80211 */ 783 /* inform roam event to cfg80211 */
784 cfg80211_roamed_bss(vif->ndev, bss, assoc_req_ie, assoc_req_len, 784 cfg80211_roamed_bss(vif->ndev, bss, assoc_req_ie, assoc_req_len,
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 998f8b0f62fd..d366cf105c7c 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -1108,7 +1108,7 @@ static int ath6kl_wmi_bssinfo_event_rx(struct wmi *wmi, u8 *datap, int len,
1108 kfree(mgmt); 1108 kfree(mgmt);
1109 if (bss == NULL) 1109 if (bss == NULL)
1110 return -ENOMEM; 1110 return -ENOMEM;
1111 cfg80211_put_bss(bss); 1111 cfg80211_put_bss(ar->wiphy, bss);
1112 1112
1113 /* 1113 /*
1114 * Firmware doesn't return any event when scheduled scan has 1114 * Firmware doesn't return any event when scheduled scan has
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 002851fceb2f..9ecc1968262c 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -341,7 +341,7 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
341 } 341 }
342 342
343 out: 343 out:
344 cfg80211_put_bss(bss); 344 cfg80211_put_bss(wiphy, bss);
345 345
346 return rc; 346 return rc;
347} 347}
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 0b70e17cd1fb..79d608caa903 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -338,7 +338,7 @@ static void wmi_evt_rx_mgmt(struct wil6210_priv *wil, int id, void *d, int len)
338 if (bss) { 338 if (bss) {
339 wil_dbg_wmi(wil, "Added BSS %pM\n", 339 wil_dbg_wmi(wil, "Added BSS %pM\n",
340 rx_mgmt_frame->bssid); 340 rx_mgmt_frame->bssid);
341 cfg80211_put_bss(bss); 341 cfg80211_put_bss(wiphy, bss);
342 } else { 342 } else {
343 wil_err(wil, "cfg80211_inform_bss() failed\n"); 343 wil_err(wil, "cfg80211_inform_bss() failed\n");
344 } 344 }
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
index 481f41ad7989..cecc3eff72e9 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
@@ -2323,7 +2323,7 @@ static s32 brcmf_inform_single_bss(struct brcmf_cfg80211_info *cfg,
2323 if (!bss) 2323 if (!bss)
2324 return -ENOMEM; 2324 return -ENOMEM;
2325 2325
2326 cfg80211_put_bss(bss); 2326 cfg80211_put_bss(wiphy, bss);
2327 2327
2328 return err; 2328 return err;
2329} 2329}
@@ -2429,7 +2429,7 @@ static s32 wl_inform_ibss(struct brcmf_cfg80211_info *cfg,
2429 goto CleanUp; 2429 goto CleanUp;
2430 } 2430 }
2431 2431
2432 cfg80211_put_bss(bss); 2432 cfg80211_put_bss(wiphy, bss);
2433 2433
2434CleanUp: 2434CleanUp:
2435 2435
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
index 75f6f6cfdd47..0fccf725a2e6 100644
--- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c
@@ -151,8 +151,7 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
151 IEEE80211_HW_QUEUE_CONTROL | 151 IEEE80211_HW_QUEUE_CONTROL |
152 IEEE80211_HW_SUPPORTS_PS | 152 IEEE80211_HW_SUPPORTS_PS |
153 IEEE80211_HW_SUPPORTS_DYNAMIC_PS | 153 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
154 IEEE80211_HW_WANT_MONITOR_VIF | 154 IEEE80211_HW_WANT_MONITOR_VIF;
155 IEEE80211_HW_SCAN_WHILE_IDLE;
156 155
157 hw->offchannel_tx_hw_queue = IWL_AUX_QUEUE; 156 hw->offchannel_tx_hw_queue = IWL_AUX_QUEUE;
158 hw->radiotap_mcs_details |= IEEE80211_RADIOTAP_MCS_HAVE_FMT; 157 hw->radiotap_mcs_details |= IEEE80211_RADIOTAP_MCS_HAVE_FMT;
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index ce6127caabdf..bbb8a5b35662 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -113,7 +113,6 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
113 IEEE80211_HW_REPORTS_TX_ACK_STATUS | 113 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
114 IEEE80211_HW_QUEUE_CONTROL | 114 IEEE80211_HW_QUEUE_CONTROL |
115 IEEE80211_HW_WANT_MONITOR_VIF | 115 IEEE80211_HW_WANT_MONITOR_VIF |
116 IEEE80211_HW_SCAN_WHILE_IDLE |
117 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | 116 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC |
118 IEEE80211_HW_SUPPORTS_PS | 117 IEEE80211_HW_SUPPORTS_PS |
119 IEEE80211_HW_SUPPORTS_DYNAMIC_PS | 118 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
index 230f8ebbe289..61735db3b051 100644
--- a/drivers/net/wireless/libertas/cfg.c
+++ b/drivers/net/wireless/libertas/cfg.c
@@ -657,7 +657,7 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned long dummy,
657 capa, intvl, ie, ielen, 657 capa, intvl, ie, ielen,
658 LBS_SCAN_RSSI_TO_MBM(rssi), 658 LBS_SCAN_RSSI_TO_MBM(rssi),
659 GFP_KERNEL); 659 GFP_KERNEL);
660 cfg80211_put_bss(bss); 660 cfg80211_put_bss(wiphy, bss);
661 } 661 }
662 } else 662 } else
663 lbs_deb_scan("scan response: missing BSS channel IE\n"); 663 lbs_deb_scan("scan response: missing BSS channel IE\n");
@@ -1444,7 +1444,7 @@ static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
1444 1444
1445 done: 1445 done:
1446 if (bss) 1446 if (bss)
1447 cfg80211_put_bss(bss); 1447 cfg80211_put_bss(wiphy, bss);
1448 lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret); 1448 lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
1449 return ret; 1449 return ret;
1450} 1450}
@@ -1766,7 +1766,7 @@ static void lbs_join_post(struct lbs_private *priv,
1766 params->beacon_interval, 1766 params->beacon_interval,
1767 fake_ie, fake - fake_ie, 1767 fake_ie, fake - fake_ie,
1768 0, GFP_KERNEL); 1768 0, GFP_KERNEL);
1769 cfg80211_put_bss(bss); 1769 cfg80211_put_bss(priv->wdev->wiphy, bss);
1770 1770
1771 memcpy(priv->wdev->ssid, params->ssid, params->ssid_len); 1771 memcpy(priv->wdev->ssid, params->ssid, params->ssid_len);
1772 priv->wdev->ssid_len = params->ssid_len; 1772 priv->wdev->ssid_len = params->ssid_len;
@@ -2011,7 +2011,7 @@ static int lbs_join_ibss(struct wiphy *wiphy, struct net_device *dev,
2011 2011
2012 if (bss) { 2012 if (bss) {
2013 ret = lbs_ibss_join_existing(priv, params, bss); 2013 ret = lbs_ibss_join_existing(priv, params, bss);
2014 cfg80211_put_bss(bss); 2014 cfg80211_put_bss(wiphy, bss);
2015 } else 2015 } else
2016 ret = lbs_ibss_start_new(priv, params); 2016 ret = lbs_ibss_start_new(priv, params);
2017 2017
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 3a004b85b99f..81c84a29308f 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -1430,7 +1430,7 @@ static int mwifiex_cfg80211_inform_ibss_bss(struct mwifiex_private *priv)
1430 bss = cfg80211_inform_bss(priv->wdev->wiphy, chan, 1430 bss = cfg80211_inform_bss(priv->wdev->wiphy, chan,
1431 bss_info.bssid, 0, WLAN_CAPABILITY_IBSS, 1431 bss_info.bssid, 0, WLAN_CAPABILITY_IBSS,
1432 0, ie_buf, ie_len, 0, GFP_KERNEL); 1432 0, ie_buf, ie_len, 0, GFP_KERNEL);
1433 cfg80211_put_bss(bss); 1433 cfg80211_put_bss(priv->wdev->wiphy, bss);
1434 memcpy(priv->cfg_bssid, bss_info.bssid, ETH_ALEN); 1434 memcpy(priv->cfg_bssid, bss_info.bssid, ETH_ALEN);
1435 1435
1436 return 0; 1436 return 0;
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c
index 9189a32b7844..232492487527 100644
--- a/drivers/net/wireless/mwifiex/scan.c
+++ b/drivers/net/wireless/mwifiex/scan.c
@@ -1746,7 +1746,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
1746 .mac_address, ETH_ALEN)) 1746 .mac_address, ETH_ALEN))
1747 mwifiex_update_curr_bss_params(priv, 1747 mwifiex_update_curr_bss_params(priv,
1748 bss); 1748 bss);
1749 cfg80211_put_bss(bss); 1749 cfg80211_put_bss(priv->wdev->wiphy, bss);
1750 } 1750 }
1751 } else { 1751 } else {
1752 dev_dbg(adapter->dev, "missing BSS channel IE\n"); 1752 dev_dbg(adapter->dev, "missing BSS channel IE\n");
diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
index f542bb8ccbc8..0d018460daf9 100644
--- a/drivers/net/wireless/mwifiex/sta_ioctl.c
+++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
@@ -162,13 +162,9 @@ int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv,
162 162
163 rcu_read_lock(); 163 rcu_read_lock();
164 ies = rcu_dereference(bss->ies); 164 ies = rcu_dereference(bss->ies);
165 if (WARN_ON(!ies)) {
166 /* should never happen */
167 rcu_read_unlock();
168 return -EINVAL;
169 }
170 beacon_ie = kmemdup(ies->data, ies->len, GFP_ATOMIC); 165 beacon_ie = kmemdup(ies->data, ies->len, GFP_ATOMIC);
171 beacon_ie_len = ies->len; 166 beacon_ie_len = ies->len;
167 bss_desc->timestamp = ies->tsf;
172 rcu_read_unlock(); 168 rcu_read_unlock();
173 169
174 if (!beacon_ie) { 170 if (!beacon_ie) {
@@ -184,7 +180,6 @@ int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv,
184 bss_desc->cap_info_bitmap = bss->capability; 180 bss_desc->cap_info_bitmap = bss->capability;
185 bss_desc->bss_band = bss_priv->band; 181 bss_desc->bss_band = bss_priv->band;
186 bss_desc->fw_tsf = bss_priv->fw_tsf; 182 bss_desc->fw_tsf = bss_priv->fw_tsf;
187 bss_desc->timestamp = bss->tsf;
188 if (bss_desc->cap_info_bitmap & WLAN_CAPABILITY_PRIVACY) { 183 if (bss_desc->cap_info_bitmap & WLAN_CAPABILITY_PRIVACY) {
189 dev_dbg(priv->adapter->dev, "info: InterpretIE: AP WEP enabled\n"); 184 dev_dbg(priv->adapter->dev, "info: InterpretIE: AP WEP enabled\n");
190 bss_desc->privacy = MWIFIEX_802_11_PRIV_FILTER_8021X_WEP; 185 bss_desc->privacy = MWIFIEX_802_11_PRIV_FILTER_8021X_WEP;
@@ -324,7 +319,7 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
324 } 319 }
325 320
326 if (bss) 321 if (bss)
327 cfg80211_put_bss(bss); 322 cfg80211_put_bss(priv->adapter->wiphy, bss);
328 } else { 323 } else {
329 /* Adhoc mode */ 324 /* Adhoc mode */
330 /* If the requested SSID matches current SSID, return */ 325 /* If the requested SSID matches current SSID, return */
@@ -354,7 +349,7 @@ int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
354 " list. Joining...\n"); 349 " list. Joining...\n");
355 ret = mwifiex_adhoc_join(priv, bss_desc); 350 ret = mwifiex_adhoc_join(priv, bss_desc);
356 if (bss) 351 if (bss)
357 cfg80211_put_bss(bss); 352 cfg80211_put_bss(priv->adapter->wiphy, bss);
358 } else { 353 } else {
359 dev_dbg(adapter->dev, "info: Network not found in " 354 dev_dbg(adapter->dev, "info: Network not found in "
360 "the list, creating adhoc with ssid = %s\n", 355 "the list, creating adhoc with ssid = %s\n",
diff --git a/drivers/net/wireless/orinoco/scan.c b/drivers/net/wireless/orinoco/scan.c
index 96e39edfec77..e8c5714bfd11 100644
--- a/drivers/net/wireless/orinoco/scan.c
+++ b/drivers/net/wireless/orinoco/scan.c
@@ -125,7 +125,7 @@ static void orinoco_add_hostscan_result(struct orinoco_private *priv,
125 cbss = cfg80211_inform_bss(wiphy, channel, bss->a.bssid, timestamp, 125 cbss = cfg80211_inform_bss(wiphy, channel, bss->a.bssid, timestamp,
126 capability, beacon_interval, ie_buf, ie_len, 126 capability, beacon_interval, ie_buf, ie_len,
127 signal, GFP_KERNEL); 127 signal, GFP_KERNEL);
128 cfg80211_put_bss(cbss); 128 cfg80211_put_bss(wiphy, cbss);
129} 129}
130 130
131void orinoco_add_extscan_result(struct orinoco_private *priv, 131void orinoco_add_extscan_result(struct orinoco_private *priv,
@@ -158,7 +158,7 @@ void orinoco_add_extscan_result(struct orinoco_private *priv,
158 cbss = cfg80211_inform_bss(wiphy, channel, bss->bssid, timestamp, 158 cbss = cfg80211_inform_bss(wiphy, channel, bss->bssid, timestamp,
159 capability, beacon_interval, ie, ie_len, 159 capability, beacon_interval, ie, ie_len,
160 signal, GFP_KERNEL); 160 signal, GFP_KERNEL);
161 cfg80211_put_bss(cbss); 161 cfg80211_put_bss(wiphy, cbss);
162} 162}
163 163
164void orinoco_add_hostscan_results(struct orinoco_private *priv, 164void orinoco_add_hostscan_results(struct orinoco_private *priv,
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index abe1d039be81..fe2f272689aa 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -2029,7 +2029,7 @@ static bool rndis_bss_info_update(struct usbnet *usbdev,
2029 bss = cfg80211_inform_bss(priv->wdev.wiphy, channel, bssid->mac, 2029 bss = cfg80211_inform_bss(priv->wdev.wiphy, channel, bssid->mac,
2030 timestamp, capability, beacon_interval, ie, ie_len, signal, 2030 timestamp, capability, beacon_interval, ie, ie_len, signal,
2031 GFP_KERNEL); 2031 GFP_KERNEL);
2032 cfg80211_put_bss(bss); 2032 cfg80211_put_bss(priv->wdev.wiphy, bss);
2033 2033
2034 return (bss != NULL); 2034 return (bss != NULL);
2035} 2035}
@@ -2718,7 +2718,7 @@ static void rndis_wlan_craft_connected_bss(struct usbnet *usbdev, u8 *bssid,
2718 bss = cfg80211_inform_bss(priv->wdev.wiphy, channel, bssid, 2718 bss = cfg80211_inform_bss(priv->wdev.wiphy, channel, bssid,
2719 timestamp, capability, beacon_period, ie_buf, ie_len, 2719 timestamp, capability, beacon_period, ie_buf, ie_len,
2720 signal, GFP_KERNEL); 2720 signal, GFP_KERNEL);
2721 cfg80211_put_bss(bss); 2721 cfg80211_put_bss(priv->wdev.wiphy, bss);
2722} 2722}
2723 2723
2724/* 2724/*
diff --git a/drivers/net/wireless/ti/wl1251/event.c b/drivers/net/wireless/ti/wl1251/event.c
index 5ec50a476a69..74ae8e1c2e33 100644
--- a/drivers/net/wireless/ti/wl1251/event.c
+++ b/drivers/net/wireless/ti/wl1251/event.c
@@ -29,6 +29,8 @@
29static int wl1251_event_scan_complete(struct wl1251 *wl, 29static int wl1251_event_scan_complete(struct wl1251 *wl,
30 struct event_mailbox *mbox) 30 struct event_mailbox *mbox)
31{ 31{
32 int ret = 0;
33
32 wl1251_debug(DEBUG_EVENT, "status: 0x%x, channels: %d", 34 wl1251_debug(DEBUG_EVENT, "status: 0x%x, channels: %d",
33 mbox->scheduled_scan_status, 35 mbox->scheduled_scan_status,
34 mbox->scheduled_scan_channels); 36 mbox->scheduled_scan_channels);
@@ -37,9 +39,11 @@ static int wl1251_event_scan_complete(struct wl1251 *wl,
37 ieee80211_scan_completed(wl->hw, false); 39 ieee80211_scan_completed(wl->hw, false);
38 wl1251_debug(DEBUG_MAC80211, "mac80211 hw scan completed"); 40 wl1251_debug(DEBUG_MAC80211, "mac80211 hw scan completed");
39 wl->scanning = false; 41 wl->scanning = false;
42 if (wl->hw->conf.flags & IEEE80211_CONF_IDLE)
43 ret = wl1251_ps_set_mode(wl, STATION_IDLE);
40 } 44 }
41 45
42 return 0; 46 return ret;
43} 47}
44 48
45static void wl1251_event_mbox_dump(struct event_mailbox *mbox) 49static void wl1251_event_mbox_dump(struct event_mailbox *mbox)
diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c
index f47e8b0482ad..bbbf68cf50a7 100644
--- a/drivers/net/wireless/ti/wl1251/main.c
+++ b/drivers/net/wireless/ti/wl1251/main.c
@@ -623,7 +623,7 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
623 } 623 }
624 } 624 }
625 625
626 if (changed & IEEE80211_CONF_CHANGE_IDLE) { 626 if (changed & IEEE80211_CONF_CHANGE_IDLE && !wl->scanning) {
627 if (conf->flags & IEEE80211_CONF_IDLE) { 627 if (conf->flags & IEEE80211_CONF_IDLE) {
628 ret = wl1251_ps_set_mode(wl, STATION_IDLE); 628 ret = wl1251_ps_set_mode(wl, STATION_IDLE);
629 if (ret < 0) 629 if (ret < 0)
@@ -895,11 +895,21 @@ static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
895 if (ret < 0) 895 if (ret < 0)
896 goto out; 896 goto out;
897 897
898 if (hw->conf.flags & IEEE80211_CONF_IDLE) {
899 ret = wl1251_ps_set_mode(wl, STATION_ACTIVE_MODE);
900 if (ret < 0)
901 goto out_sleep;
902 ret = wl1251_join(wl, wl->bss_type, wl->channel,
903 wl->beacon_int, wl->dtim_period);
904 if (ret < 0)
905 goto out_sleep;
906 }
907
898 skb = ieee80211_probereq_get(wl->hw, wl->vif, ssid, ssid_len, 908 skb = ieee80211_probereq_get(wl->hw, wl->vif, ssid, ssid_len,
899 req->ie_len); 909 req->ie_len);
900 if (!skb) { 910 if (!skb) {
901 ret = -ENOMEM; 911 ret = -ENOMEM;
902 goto out; 912 goto out_idle;
903 } 913 }
904 if (req->ie_len) 914 if (req->ie_len)
905 memcpy(skb_put(skb, req->ie_len), req->ie, req->ie_len); 915 memcpy(skb_put(skb, req->ie_len), req->ie, req->ie_len);
@@ -908,11 +918,11 @@ static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
908 skb->len); 918 skb->len);
909 dev_kfree_skb(skb); 919 dev_kfree_skb(skb);
910 if (ret < 0) 920 if (ret < 0)
911 goto out_sleep; 921 goto out_idle;
912 922
913 ret = wl1251_cmd_trigger_scan_to(wl, 0); 923 ret = wl1251_cmd_trigger_scan_to(wl, 0);
914 if (ret < 0) 924 if (ret < 0)
915 goto out_sleep; 925 goto out_idle;
916 926
917 wl->scanning = true; 927 wl->scanning = true;
918 928
@@ -920,9 +930,13 @@ static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
920 req->n_channels, WL1251_SCAN_NUM_PROBES); 930 req->n_channels, WL1251_SCAN_NUM_PROBES);
921 if (ret < 0) { 931 if (ret < 0) {
922 wl->scanning = false; 932 wl->scanning = false;
923 goto out_sleep; 933 goto out_idle;
924 } 934 }
935 goto out_sleep;
925 936
937out_idle:
938 if (hw->conf.flags & IEEE80211_CONF_IDLE)
939 ret = wl1251_ps_set_mode(wl, STATION_IDLE);
926out_sleep: 940out_sleep:
927 wl1251_ps_elp_sleep(wl); 941 wl1251_ps_elp_sleep(wl);
928 942
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 28a37576d568..2c2ff3e1f849 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -5636,7 +5636,6 @@ static int wl1271_init_ieee80211(struct wl1271 *wl)
5636 IEEE80211_HW_AP_LINK_PS | 5636 IEEE80211_HW_AP_LINK_PS |
5637 IEEE80211_HW_AMPDU_AGGREGATION | 5637 IEEE80211_HW_AMPDU_AGGREGATION |
5638 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW | 5638 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
5639 IEEE80211_HW_SCAN_WHILE_IDLE |
5640 IEEE80211_HW_QUEUE_CONTROL; 5639 IEEE80211_HW_QUEUE_CONTROL;
5641 5640
5642 wl->hw->wiphy->cipher_suites = cipher_suites; 5641 wl->hw->wiphy->cipher_suites = cipher_suites;