aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/bcm43xx/bcm43xx_wx.c')
-rw-r--r--drivers/net/wireless/bcm43xx/bcm43xx_wx.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
index df37d28996c9..aa2d9930c436 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_wx.c
@@ -111,8 +111,9 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
111 unsigned long flags; 111 unsigned long flags;
112 u8 channel; 112 u8 channel;
113 int freq; 113 int freq;
114 int err = 0; 114 int err = -EINVAL;
115 115
116 spin_lock_irqsave(&bcm->lock, flags);
116 if ((data->freq.m >= 0) && (data->freq.m <= 1000)) { 117 if ((data->freq.m >= 0) && (data->freq.m <= 1000)) {
117 channel = data->freq.m; 118 channel = data->freq.m;
118 freq = bcm43xx_channel_to_freq(bcm, channel); 119 freq = bcm43xx_channel_to_freq(bcm, channel);
@@ -121,16 +122,17 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
121 freq = data->freq.m; 122 freq = data->freq.m;
122 } 123 }
123 if (!bcm43xx_is_valid_channel(bcm, channel)) 124 if (!bcm43xx_is_valid_channel(bcm, channel))
124 return -EINVAL; 125 goto out_unlock;
125
126 spin_lock_irqsave(&bcm->lock, flags);
127 if (bcm->initialized) { 126 if (bcm->initialized) {
128 //ieee80211softmac_disassoc(softmac, $REASON); 127 //ieee80211softmac_disassoc(softmac, $REASON);
129 bcm43xx_mac_suspend(bcm); 128 bcm43xx_mac_suspend(bcm);
130 err = bcm43xx_radio_selectchannel(bcm, channel, 0); 129 err = bcm43xx_radio_selectchannel(bcm, channel, 0);
131 bcm43xx_mac_enable(bcm); 130 bcm43xx_mac_enable(bcm);
132 } else 131 } else {
133 bcm->current_core->radio->initial_channel = channel; 132 bcm->current_core->radio->initial_channel = channel;
133 err = 0;
134 }
135out_unlock:
134 spin_unlock_irqrestore(&bcm->lock, flags); 136 spin_unlock_irqrestore(&bcm->lock, flags);
135 137
136 return err; 138 return err;