wl12xx: mark no sched scan only after FW event
Eyal Shapira [Tue, 20 Dec 2011 12:55:38 +0000 (14:55 +0200)]
stop sched scan isn't an immediate operation
and we need to wait for PERIODIC_SCAN_COMPLETE_EVENT_ID
after sending a stop before changing internal state
and notifying upper layers.
Not doing this caused problems when canceling an existing sched
scan and immediately requesting to start a new one
with a different configuration as the FW was still
in the middle of the previous sched scan.

Signed-off-by: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>

drivers/net/wireless/wl12xx/event.c
drivers/net/wireless/wl12xx/scan.c

index 00ce794..d3280df 100644 (file)
@@ -267,8 +267,8 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
                wl1271_debug(DEBUG_EVENT, "PERIODIC_SCAN_COMPLETE_EVENT "
                             "(status 0x%0x)", mbox->scheduled_scan_status);
                if (wl->sched_scanning) {
-                       wl1271_scan_sched_scan_stop(wl);
                        ieee80211_sched_scan_stopped(wl->hw);
+                       wl->sched_scanning = false;
                }
        }
 
index 05dca0c..e24111e 100644 (file)
@@ -754,7 +754,6 @@ void wl1271_scan_sched_scan_stop(struct wl1271 *wl)
                wl1271_error("failed to send sched scan stop command");
                goto out_free;
        }
-       wl->sched_scanning = false;
 
 out_free:
        kfree(stop);