rpcd: iwinfo plugin fixes
[openwrt.git] / package / kernel / mac80211 / patches / 323-0000-brcmfmac-fix-setting-primary-channel-for-80-MHz-widt.patch
1 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
2 Date: Wed, 20 Jan 2016 16:46:04 +0100
3 Subject: [PATCH] brcmfmac: fix setting primary channel for 80 MHz width
4 MIME-Version: 1.0
5 Content-Type: text/plain; charset=UTF-8
6 Content-Transfer-Encoding: 8bit
7
8 First of all it changes the way we calculate primary channel offset. If
9 we use e.g. 80 MHz channel with primary frequency 5180 MHz (which means
10 center frequency is 5210 MHz) it makes sense to calculate primary offset
11 as -30 MHz.
12 Then it fixes values we compare primary_offset with. We were comparing
13 offset in MHz against -2 or 2 which was resulting in picking a wrong
14 primary channel.
15
16 Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
17 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
18 ---
19
20 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
21 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
22 @@ -247,7 +247,7 @@ static u16 chandef_to_chanspec(struct br
23         brcmf_dbg(TRACE, "chandef: control %d center %d width %d\n",
24                   ch->chan->center_freq, ch->center_freq1, ch->width);
25         ch_inf.chnum = ieee80211_frequency_to_channel(ch->center_freq1);
26 -       primary_offset = ch->center_freq1 - ch->chan->center_freq;
27 +       primary_offset = ch->chan->center_freq - ch->center_freq1;
28         switch (ch->width) {
29         case NL80211_CHAN_WIDTH_20:
30         case NL80211_CHAN_WIDTH_20_NOHT:
31 @@ -256,24 +256,21 @@ static u16 chandef_to_chanspec(struct br
32                 break;
33         case NL80211_CHAN_WIDTH_40:
34                 ch_inf.bw = BRCMU_CHAN_BW_40;
35 -               if (primary_offset < 0)
36 +               if (primary_offset > 0)
37                         ch_inf.sb = BRCMU_CHAN_SB_U;
38                 else
39                         ch_inf.sb = BRCMU_CHAN_SB_L;
40                 break;
41         case NL80211_CHAN_WIDTH_80:
42                 ch_inf.bw = BRCMU_CHAN_BW_80;
43 -               if (primary_offset < 0) {
44 -                       if (primary_offset < -CH_10MHZ_APART)
45 -                               ch_inf.sb = BRCMU_CHAN_SB_UU;
46 -                       else
47 -                               ch_inf.sb = BRCMU_CHAN_SB_UL;
48 -               } else {
49 -                       if (primary_offset > CH_10MHZ_APART)
50 -                               ch_inf.sb = BRCMU_CHAN_SB_LL;
51 -                       else
52 -                               ch_inf.sb = BRCMU_CHAN_SB_LU;
53 -               }
54 +               if (primary_offset == -30)
55 +                       ch_inf.sb = BRCMU_CHAN_SB_LL;
56 +               else if (primary_offset == -10)
57 +                       ch_inf.sb = BRCMU_CHAN_SB_LU;
58 +               else if (primary_offset == 10)
59 +                       ch_inf.sb = BRCMU_CHAN_SB_UL;
60 +               else
61 +                       ch_inf.sb = BRCMU_CHAN_SB_UU;
62                 break;
63         case NL80211_CHAN_WIDTH_80P80:
64         case NL80211_CHAN_WIDTH_160: