1 From 9342f107a9655adf067ac603e4ba4161e4e85cab Mon Sep 17 00:00:00 2001
2 From: Cheong2K <cheong@redbear.cc>
3 Date: Fri, 26 Feb 2016 18:20:10 +0800
4 Subject: [PATCH 093/806] brcm: adds support for BCM43341 wifi
6 brcmfmac: Disable power management
8 Disable wireless power saving in the brcmfmac WLAN driver. This is a
9 temporary measure until the connectivity loss resulting from power
12 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
14 brcmfmac: Use original country code as a fallback
16 Commit 73345fd212980d2e28a5c6d83801c903bd773680:
18 brcmfmac: Configure country code using device specific settings
20 prevents region codes from working on devices that lack a region code
21 translation table. In the event of an absent table, preserve the old
22 behaviour of using the provided code as-is.
24 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
26 brcmfmac: Plug memory leak in brcmf_fill_bss_param
28 See: https://github.com/raspberrypi/linux/issues/1471
30 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
32 brcmfmac: do not use internal roaming engine by default
34 Some evidence of curing disconnects with this disabled, so make it a default.
35 Can be overridden with module parameter roamoff=0
36 See: http://projectable.me/optimize-my-pi-wi-fi/
38 brcmfmac: Change stop_ap sequence
40 Patch from Broadcom/Cypress to resolve a customer error
42 Signed-off-by: Phil Elwell <phil@raspberrypi.org>
44 .../broadcom/brcm80211/brcmfmac/cfg80211.c | 22 ++++++++++++++-----
45 .../broadcom/brcm80211/brcmfmac/common.c | 2 +-
46 .../broadcom/brcm80211/brcmfmac/sdio.c | 3 ++-
47 3 files changed, 20 insertions(+), 7 deletions(-)
49 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
50 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
51 @@ -2697,6 +2697,8 @@ brcmf_cfg80211_set_power_mgmt(struct wip
52 * preference in cfg struct to apply this to
53 * FW later while initializing the dongle
55 + pr_info("power management disabled\n");
57 cfg->pwr_save = enabled;
58 if (!check_vif_up(ifp->vif)) {
60 @@ -6776,12 +6778,18 @@ static s32 brcmf_translate_country_code(
61 struct brcmfmac_pd_cc *country_codes;
62 struct brcmfmac_pd_cc_entry *cc;
64 + char ccode[BRCMF_COUNTRY_BUF_SZ];
68 + memcpy(ccode, alpha2, sizeof(ccode));
71 country_codes = drvr->settings->country_codes;
73 - brcmf_dbg(TRACE, "No country codes configured for device\n");
75 + brcmf_dbg(TRACE, "No country codes configured for device"
76 + " - use requested value\n");
77 + goto use_input_value;
80 if ((alpha2[0] == ccreq->country_abbrev[0]) &&
81 @@ -6805,10 +6813,14 @@ static s32 brcmf_translate_country_code(
82 brcmf_dbg(TRACE, "No country code match found\n");
85 - memset(ccreq, 0, sizeof(*ccreq));
86 - ccreq->rev = cpu_to_le32(country_codes->table[found_index].rev);
87 - memcpy(ccreq->ccode, country_codes->table[found_index].cc,
88 + rev = country_codes->table[found_index].rev;
89 + memcpy(ccode, country_codes->table[found_index].cc,
90 BRCMF_COUNTRY_BUF_SZ);
93 + memset(ccreq, 0, sizeof(*ccreq));
94 + ccreq->rev = cpu_to_le32(rev);
95 + memcpy(ccreq->ccode, ccode, sizeof(ccode));
96 ccreq->country_abbrev[0] = alpha2[0];
97 ccreq->country_abbrev[1] = alpha2[1];
98 ccreq->country_abbrev[2] = 0;
99 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
100 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
101 @@ -70,7 +70,7 @@ static int brcmf_fcmode;
102 module_param_named(fcmode, brcmf_fcmode, int, 0);
103 MODULE_PARM_DESC(fcmode, "Mode of firmware signalled flow control");
105 -static int brcmf_roamoff;
106 +static int brcmf_roamoff = 1;
107 module_param_named(roamoff, brcmf_roamoff, int, 0400);
108 MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
110 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
111 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
112 @@ -608,6 +608,7 @@ BRCMF_FW_DEF(4329, "brcmfmac4329-sdio");
113 BRCMF_FW_DEF(4330, "brcmfmac4330-sdio");
114 BRCMF_FW_DEF(4334, "brcmfmac4334-sdio");
115 BRCMF_FW_DEF(43340, "brcmfmac43340-sdio");
116 +BRCMF_FW_DEF(43341, "brcmfmac43341-sdio");
117 BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
118 BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
119 BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
120 @@ -628,7 +629,7 @@ static const struct brcmf_firmware_mappi
121 BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
122 BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
123 BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
124 - BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
125 + BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43341),
126 BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
127 BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
128 BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),