|
@@ -615,8 +615,19 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
|
|
|
if (channel != wl->channel) {
|
|
|
wl->channel = channel;
|
|
|
|
|
|
- ret = wl1251_join(wl, wl->bss_type, wl->channel,
|
|
|
- wl->beacon_int, wl->dtim_period);
|
|
|
+ /*
|
|
|
+ * Use ENABLE_RX command for channel switching when no
|
|
|
+ * interface is present (monitor mode only).
|
|
|
+ * This leaves the tx path disabled in firmware, whereas
|
|
|
+ * the usual JOIN command seems to transmit some frames
|
|
|
+ * at firmware level.
|
|
|
+ */
|
|
|
+ if (wl->vif == NULL) {
|
|
|
+ ret = wl1251_cmd_data_path_rx(wl, wl->channel, 1);
|
|
|
+ } else {
|
|
|
+ ret = wl1251_join(wl, wl->bss_type, wl->channel,
|
|
|
+ wl->beacon_int, wl->dtim_period);
|
|
|
+ }
|
|
|
if (ret < 0)
|
|
|
goto out_sleep;
|
|
|
}
|