From 5983ddfaf9d881e632551196e0b6e017b756e1a7 Mon Sep 17 00:00:00 2001 From: Juuso Oikarinen Date: Tue, 26 Oct 2010 13:24:38 +0200 Subject: [PATCH] --- yaml --- r: 224263 b: refs/heads/master c: b739a42c921dcb0ae92cc14032b7f75dcba88e3b h: refs/heads/master i: 224261: fd29de79f6c92fecdcdc76b0d4e4e0e0540e7406 224259: 97249e1a23e3424326e552736bdc6986fdd3f79e 224255: 142e3d158e288f9ec57f9b494cd7aa858940714c v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/wl12xx/wl1271_main.c | 17 ++++++++++++++--- trunk/drivers/net/wireless/wl12xx/wl1271_scan.c | 5 +++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index cac3cb0c6c4d..87103444b647 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fb2382c75b1292aff0ebc8e209b0cb9ba70bb2cf +refs/heads/master: b739a42c921dcb0ae92cc14032b7f75dcba88e3b diff --git a/trunk/drivers/net/wireless/wl12xx/wl1271_main.c b/trunk/drivers/net/wireless/wl12xx/wl1271_main.c index 63036b53f9e4..bec2b3d78782 100644 --- a/trunk/drivers/net/wireless/wl12xx/wl1271_main.c +++ b/trunk/drivers/net/wireless/wl12xx/wl1271_main.c @@ -1056,6 +1056,7 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl) wl->scan.state = WL1271_SCAN_STATE_IDLE; kfree(wl->scan.scanned_ch); wl->scan.scanned_ch = NULL; + wl->scan.req = NULL; ieee80211_scan_completed(wl->hw, true); } @@ -1676,6 +1677,16 @@ static int wl1271_op_hw_scan(struct ieee80211_hw *hw, mutex_lock(&wl->mutex); + if (wl->state == WL1271_STATE_OFF) { + /* + * We cannot return -EBUSY here because cfg80211 will expect + * a call to ieee80211_scan_completed if we do - in this case + * there won't be any call. + */ + ret = -EAGAIN; + goto out; + } + ret = wl1271_ps_elp_wakeup(wl, false); if (ret < 0) goto out; @@ -2093,14 +2104,14 @@ static int wl1271_op_get_survey(struct ieee80211_hw *hw, int idx, { struct wl1271 *wl = hw->priv; struct ieee80211_conf *conf = &hw->conf; - + if (idx != 0) return -ENOENT; - + survey->channel = conf->channel; survey->filled = SURVEY_INFO_NOISE_DBM; survey->noise = wl->noise; - + return 0; } diff --git a/trunk/drivers/net/wireless/wl12xx/wl1271_scan.c b/trunk/drivers/net/wireless/wl12xx/wl1271_scan.c index 909bb47995b6..e0661a543a35 100644 --- a/trunk/drivers/net/wireless/wl12xx/wl1271_scan.c +++ b/trunk/drivers/net/wireless/wl12xx/wl1271_scan.c @@ -48,14 +48,15 @@ void wl1271_scan_complete_work(struct work_struct *work) wl->scan.state = WL1271_SCAN_STATE_IDLE; kfree(wl->scan.scanned_ch); wl->scan.scanned_ch = NULL; - mutex_unlock(&wl->mutex); - + wl->scan.req = NULL; ieee80211_scan_completed(wl->hw, false); if (wl->scan.failed) { wl1271_info("Scan completed due to error."); ieee80211_queue_work(wl->hw, &wl->recovery_work); } + mutex_unlock(&wl->mutex); + }