brcm80211: Allow scans after scanning for specific ssid

Sean Paul seanpaul at chromium.org
Wed May 11 22:19:34 UTC 2011


brcmfmac driver returned "busy" for all scan requests after a scan
request for a specific SSID. scan_request field was not being cleared
if the code path did not call wl_do_iscan(). Users can then not
reconnect to any SSID after disconnecting (unless they take the
interface down and then back up).

Tested on Nvidia Seaboard + BCM4329 + 2.6.38

Signed-off-by: Sean Paul <seanpaul at chromium.org>
Reviewed-by: Grant Grundler <grundler at chromium.org>
---
 drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
index 555b056..7f4817d 100644
--- a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
+++ b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
@@ -828,21 +828,21 @@ __wl_cfg80211_scan(struct wiphy *wiphy, struct
net_device *ndev,
               wl_set_mpc(ndev, 0);
               err = wl_dev_ioctl(ndev, WLC_SCAN, &sr->ssid,
                               sizeof(sr->ssid));
-               if (err) {
+               if (!err) {
+                       cfg80211_scan_done(wl->scan_request, false);
+               } else {
                       if (err == -EBUSY) {
                               WL_INFO("system busy : scan for \"%s\"
canceled\n",
                                       sr->ssid.SSID);
                       } else {
                               WL_ERR("WLC_SCAN error (%d)\n", err);
                       }
-                       wl_set_mpc(ndev, 1);
                       goto scan_out;
               }
       }

-       return 0;
-
 scan_out:
+       wl_set_mpc(ndev, 1);
       clear_bit(WL_STATUS_SCANNING, &wl->status);
       wl->scan_request = NULL;
       return err;
--
1.7.1



More information about the devel mailing list