wl1271: Fix channel changing code
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>
Thu, 18 Feb 2010 11:25:37 +0000 (13:25 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 19 Feb 2010 20:52:42 +0000 (15:52 -0500)
The channel changing code would a) change the BSSID to a dummy on upon
channel change, breaking connectivity, and b) not update the channel number
at all for ad-hoc, breaking adhoc.

Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/wl12xx/wl1271_main.c

index 6f026fe63d7fea9230230dff54bd3500c181e692..8b46b7069f1f1c8897949ca8313a2f4b23b1fffa 100644 (file)
@@ -1234,8 +1234,16 @@ static int wl1271_op_config(struct ieee80211_hw *hw, u32 changed)
        }
 
        /* if the channel changes while joined, join again */
-       if (channel != wl->channel && test_bit(WL1271_FLAG_JOINED, &wl->flags))
-               wl1271_join_channel(wl, channel);
+       if (channel != wl->channel &&
+           test_bit(WL1271_FLAG_JOINED, &wl->flags)) {
+               wl->channel = channel;
+               /* FIXME: maybe use CMD_CHANNEL_SWITCH for this? */
+               ret = wl1271_cmd_join(wl);
+               if (ret < 0)
+                       wl1271_warning("cmd join to update channel failed %d",
+                                      ret);
+       } else
+               wl->channel = channel;
 
        if (conf->flags & IEEE80211_CONF_PS &&
            !test_bit(WL1271_FLAG_PSM_REQUESTED, &wl->flags)) {