The function chandef_to_chanspec() was not handling 160MHz bandwidth
resulting in wrong encoding of the channel. That resulting in firmware
rejecting the provided channel specification.

Reviewed-by: Hante Meuleman <[email protected]>
Reviewed-by: Pieter-Paul Giesberts <[email protected]>
Reviewed-by: Franky Lin <[email protected]>
Signed-off-by: Arend van Spriel <[email protected]>
---
 .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index b6d0df3..5168d42 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -276,8 +276,26 @@ static u16 chandef_to_chanspec(struct brcmu_d11inf *d11inf,
                else
                        ch_inf.sb = BRCMU_CHAN_SB_UU;
                break;
-       case NL80211_CHAN_WIDTH_80P80:
        case NL80211_CHAN_WIDTH_160:
+               ch_inf.bw = BRCMU_CHAN_BW_160;
+               if (primary_offset == -70)
+                       ch_inf.sb = BRCMU_CHAN_SB_LLL;
+               else if (primary_offset == -50)
+                       ch_inf.sb = BRCMU_CHAN_SB_LLU;
+               else if (primary_offset == -30)
+                       ch_inf.sb = BRCMU_CHAN_SB_LUL;
+               else if (primary_offset == -10)
+                       ch_inf.sb = BRCMU_CHAN_SB_LUU;
+               else if (primary_offset == 10)
+                       ch_inf.sb = BRCMU_CHAN_SB_ULL;
+               else if (primary_offset == 30)
+                       ch_inf.sb = BRCMU_CHAN_SB_ULU;
+               else if (primary_offset == 50)
+                       ch_inf.sb = BRCMU_CHAN_SB_UUL;
+               else
+                       ch_inf.sb = BRCMU_CHAN_SB_UUU;
+               break;
+       case NL80211_CHAN_WIDTH_80P80:
        case NL80211_CHAN_WIDTH_5:
        case NL80211_CHAN_WIDTH_10:
        default:
@@ -296,6 +314,7 @@ static u16 chandef_to_chanspec(struct brcmu_d11inf *d11inf,
        }
        d11inf->encchspec(&ch_inf);
 
+       brcmf_dbg(TRACE, "chanspec: 0x%x\n", ch_inf.chspec);
        return ch_inf.chspec;
 }
 
-- 
1.9.1

Reply via email to