Commit d632f9fa authored by Joerg Sommer's avatar Joerg Sommer Committed by John W. Linville

[PATCH] bcm43xx: Fix bug in frequency to channel conversion

The frequency to channel routine in bcm43xx requires that the frequency
be in MHz, but that condition is not always met. This patch does the
necessary conversion.
Signed-off-by: default avatarJoerg Sommer <joerg@alea.gnuu.de>
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 01a59776
...@@ -105,18 +105,24 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev, ...@@ -105,18 +105,24 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
struct bcm43xx_private *bcm = bcm43xx_priv(net_dev); struct bcm43xx_private *bcm = bcm43xx_priv(net_dev);
unsigned long flags; unsigned long flags;
u8 channel; u8 channel;
s8 expon;
int freq; int freq;
int err = -EINVAL; int err = -EINVAL;
mutex_lock(&bcm->mutex); mutex_lock(&bcm->mutex);
spin_lock_irqsave(&bcm->irq_lock, flags); spin_lock_irqsave(&bcm->irq_lock, flags);
if ((data->freq.m >= 0) && (data->freq.m <= 1000)) { if ((data->freq.e == 0) &&
(data->freq.m >= 0) && (data->freq.m <= 1000)) {
channel = data->freq.m; channel = data->freq.m;
freq = bcm43xx_channel_to_freq(bcm, channel); freq = bcm43xx_channel_to_freq(bcm, channel);
} else { } else {
channel = bcm43xx_freq_to_channel(bcm, data->freq.m);
freq = data->freq.m; freq = data->freq.m;
expon = 6 - data->freq.e;
while (--expon >= 0) /* scale down the frequency to MHz */
freq /= 10;
assert(freq > 1000);
channel = bcm43xx_freq_to_channel(bcm, freq);
} }
if (!ieee80211_is_valid_channel(bcm->ieee, channel)) if (!ieee80211_is_valid_channel(bcm->ieee, channel))
goto out_unlock; goto out_unlock;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment