0d38084e9065e667e179281e7fc0f6423f4299be
[openwrt/staging/chunkeey.git] / package / kernel / mac80211 / patches / brcm / 103-v5.4-0001-brcmfmac-add-160MHz-in-chandef_to_chanspec.patch
1 From f491645f039420fb7e14283e21b90772571c807c Mon Sep 17 00:00:00 2001
2 From: Arend van Spriel <arend.vanspriel@broadcom.com>
3 Date: Thu, 11 Jul 2019 10:45:30 +0200
4 Subject: [PATCH] brcmfmac: add 160MHz in chandef_to_chanspec()
5
6 The function chandef_to_chanspec() was not handling 160MHz bandwidth
7 resulting in wrong encoding of the channel. That resulting in firmware
8 rejecting the provided channel specification.
9
10 Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
11 Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
12 Reviewed-by: Franky Lin <franky.lin@broadcom.com>
13 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 ---
16 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 21 ++++++++++++++++++-
17 1 file changed, 20 insertions(+), 1 deletion(-)
18
19 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
20 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
21 @@ -276,8 +276,26 @@ static u16 chandef_to_chanspec(struct br
22 else
23 ch_inf.sb = BRCMU_CHAN_SB_UU;
24 break;
25 - case NL80211_CHAN_WIDTH_80P80:
26 case NL80211_CHAN_WIDTH_160:
27 + ch_inf.bw = BRCMU_CHAN_BW_160;
28 + if (primary_offset == -70)
29 + ch_inf.sb = BRCMU_CHAN_SB_LLL;
30 + else if (primary_offset == -50)
31 + ch_inf.sb = BRCMU_CHAN_SB_LLU;
32 + else if (primary_offset == -30)
33 + ch_inf.sb = BRCMU_CHAN_SB_LUL;
34 + else if (primary_offset == -10)
35 + ch_inf.sb = BRCMU_CHAN_SB_LUU;
36 + else if (primary_offset == 10)
37 + ch_inf.sb = BRCMU_CHAN_SB_ULL;
38 + else if (primary_offset == 30)
39 + ch_inf.sb = BRCMU_CHAN_SB_ULU;
40 + else if (primary_offset == 50)
41 + ch_inf.sb = BRCMU_CHAN_SB_UUL;
42 + else
43 + ch_inf.sb = BRCMU_CHAN_SB_UUU;
44 + break;
45 + case NL80211_CHAN_WIDTH_80P80:
46 case NL80211_CHAN_WIDTH_5:
47 case NL80211_CHAN_WIDTH_10:
48 default:
49 @@ -296,6 +314,7 @@ static u16 chandef_to_chanspec(struct br
50 }
51 d11inf->encchspec(&ch_inf);
52
53 + brcmf_dbg(TRACE, "chanspec: 0x%x\n", ch_inf.chspec);
54 return ch_inf.chspec;
55 }
56