diff options
author | Gertjan van Wingerde <gwingerde@gmail.com> | 2010-06-03 04:52:08 -0400 |
---|---|---|
committer | Ivo van Doorn <IvDoorn@gmail.com> | 2010-06-03 04:52:08 -0400 |
commit | 06443e46c65915d74b03fe1de10c00748e4706ee (patch) | |
tree | 0abaa34fb1a4b263a121decc61a742e35df58566 /drivers/net/wireless/rt2x00/rt2x00ht.c | |
parent | 532bc2d5244bd32d321da457d8e3919a1ed00c2e (diff) |
rt2x00: Fix HT40 operation in rt2800.
Closer inspection of the legacy Ralink driver reveals that in case of HT40+
or HT40- we must adjust the frequency settings that we program to the device.
Implement the same adjustment in the rt2x00 code.
With this HT40 seems to work for all devices supported by rt2800pci and
rt2800usb.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00ht.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00ht.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00ht.c b/drivers/net/wireless/rt2x00/rt2x00ht.c index 5a407602ce3e..c4b749da4302 100644 --- a/drivers/net/wireless/rt2x00/rt2x00ht.c +++ b/drivers/net/wireless/rt2x00/rt2x00ht.c | |||
@@ -84,3 +84,31 @@ void rt2x00ht_create_tx_descriptor(struct queue_entry *entry, | |||
84 | else | 84 | else |
85 | txdesc->txop = TXOP_HTTXOP; | 85 | txdesc->txop = TXOP_HTTXOP; |
86 | } | 86 | } |
87 | |||
88 | u16 rt2x00ht_center_channel(struct rt2x00_dev *rt2x00dev, | ||
89 | struct ieee80211_conf *conf) | ||
90 | { | ||
91 | struct hw_mode_spec *spec = &rt2x00dev->spec; | ||
92 | int center_channel; | ||
93 | u16 i; | ||
94 | |||
95 | /* | ||
96 | * Initialize center channel to current channel. | ||
97 | */ | ||
98 | center_channel = spec->channels[conf->channel->hw_value].channel; | ||
99 | |||
100 | /* | ||
101 | * Adjust center channel to HT40+ and HT40- operation. | ||
102 | */ | ||
103 | if (conf_is_ht40_plus(conf)) | ||
104 | center_channel += 2; | ||
105 | else if (conf_is_ht40_minus(conf)) | ||
106 | center_channel -= (center_channel == 14) ? 1 : 2; | ||
107 | |||
108 | for (i = 0; i < spec->num_channels; i++) | ||
109 | if (spec->channels[i].channel == center_channel) | ||
110 | return i; | ||
111 | |||
112 | WARN_ON(1); | ||
113 | return conf->channel->hw_value; | ||
114 | } | ||