aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch')
-rw-r--r--target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch157
1 files changed, 157 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch b/target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch
new file mode 100644
index 0000000000..f4055f79b1
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.9/0092-brcm-adds-support-for-BCM43341-wifi.patch
@@ -0,0 +1,157 @@
+From 2d888bed201222f294deb8a27641f7f9919dab54 Mon Sep 17 00:00:00 2001
+From: Cheong2K <cheong@redbear.cc>
+Date: Fri, 26 Feb 2016 18:20:10 +0800
+Subject: [PATCH] brcm: adds support for BCM43341 wifi
+
+brcmfmac: Disable power management
+
+Disable wireless power saving in the brcmfmac WLAN driver. This is a
+temporary measure until the connectivity loss resulting from power
+saving is resolved.
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.org>
+
+brcmfmac: Use original country code as a fallback
+
+Commit 73345fd212980d2e28a5c6d83801c903bd773680:
+
+ brcmfmac: Configure country code using device specific settings
+
+prevents region codes from working on devices that lack a region code
+translation table. In the event of an absent table, preserve the old
+behaviour of using the provided code as-is.
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.org>
+
+brcmfmac: Plug memory leak in brcmf_fill_bss_param
+
+See: https://github.com/raspberrypi/linux/issues/1471
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.org>
+
+brcmfmac: do not use internal roaming engine by default
+
+Some evidence of curing disconnects with this disabled, so make it a default.
+Can be overridden with module parameter roamoff=0
+See: http://projectable.me/optimize-my-pi-wi-fi/
+
+brcmfmac: Change stop_ap sequence
+
+Patch from Broadcom/Cypress to resolve a customer error
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.org>
+---
+ .../broadcom/brcm80211/brcmfmac/cfg80211.c | 31 ++++++++++++++++------
+ .../wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +-
+ .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 ++
+ .../broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
+ 4 files changed, 27 insertions(+), 9 deletions(-)
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+@@ -2756,6 +2756,8 @@ brcmf_cfg80211_set_power_mgmt(struct wip
+ * preference in cfg struct to apply this to
+ * FW later while initializing the dongle
+ */
++ pr_info("power management disabled\n");
++ enabled = false;
+ cfg->pwr_save = enabled;
+ if (!check_vif_up(ifp->vif)) {
+
+@@ -4750,12 +4752,15 @@ static int brcmf_cfg80211_stop_ap(struct
+ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_DOWN, 1);
+ if (err < 0)
+ brcmf_err("BRCMF_C_DOWN error %d\n", err);
+- err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_AP, 0);
+- if (err < 0)
+- brcmf_err("setting AP mode failed %d\n", err);
++
+ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_INFRA, 0);
+ if (err < 0)
+ brcmf_err("setting INFRA mode failed %d\n", err);
++
++ err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_AP, 0);
++ if (err < 0)
++ brcmf_err("setting AP mode failed %d\n", err);
++
+ if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MBSS))
+ brcmf_fil_iovar_int_set(ifp, "mbss", 0);
+ brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_REGULATORY,
+@@ -6737,12 +6742,18 @@ static s32 brcmf_translate_country_code(
+ struct brcmfmac_pd_cc *country_codes;
+ struct brcmfmac_pd_cc_entry *cc;
+ s32 found_index;
++ char ccode[BRCMF_COUNTRY_BUF_SZ];
++ int rev;
+ int i;
+
++ memcpy(ccode, alpha2, sizeof(ccode));
++ rev = -1;
++
+ country_codes = drvr->settings->country_codes;
+ if (!country_codes) {
+- brcmf_dbg(TRACE, "No country codes configured for device\n");
+- return -EINVAL;
++ brcmf_dbg(TRACE, "No country codes configured for device"
++ " - use requested value\n");
++ goto use_input_value;
+ }
+
+ if ((alpha2[0] == ccreq->country_abbrev[0]) &&
+@@ -6766,10 +6777,14 @@ static s32 brcmf_translate_country_code(
+ brcmf_dbg(TRACE, "No country code match found\n");
+ return -EINVAL;
+ }
+- memset(ccreq, 0, sizeof(*ccreq));
+- ccreq->rev = cpu_to_le32(country_codes->table[found_index].rev);
+- memcpy(ccreq->ccode, country_codes->table[found_index].cc,
++ rev = country_codes->table[found_index].rev;
++ memcpy(ccode, country_codes->table[found_index].cc,
+ BRCMF_COUNTRY_BUF_SZ);
++
++use_input_value:
++ memset(ccreq, 0, sizeof(*ccreq));
++ ccreq->rev = cpu_to_le32(rev);
++ memcpy(ccreq->ccode, ccode, sizeof(ccode));
+ ccreq->country_abbrev[0] = alpha2[0];
+ ccreq->country_abbrev[1] = alpha2[1];
+ ccreq->country_abbrev[2] = 0;
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+@@ -69,7 +69,7 @@ static int brcmf_fcmode;
+ module_param_named(fcmode, brcmf_fcmode, int, 0);
+ MODULE_PARM_DESC(fcmode, "Mode of firmware signalled flow control");
+
+-static int brcmf_roamoff;
++static int brcmf_roamoff = 1;
+ module_param_named(roamoff, brcmf_roamoff, int, S_IRUSR);
+ MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
+
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -604,6 +604,7 @@ BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-s
+ BRCMF_FW_NVRAM_DEF(4330, "brcmfmac4330-sdio.bin", "brcmfmac4330-sdio.txt");
+ BRCMF_FW_NVRAM_DEF(4334, "brcmfmac4334-sdio.bin", "brcmfmac4334-sdio.txt");
+ BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340-sdio.bin", "brcmfmac43340-sdio.txt");
++BRCMF_FW_NVRAM_DEF(43341, "brcmfmac43341-sdio.bin", "brcmfmac43341-sdio.txt");
+ BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
+ BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
+ BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
+@@ -621,6 +622,7 @@ static struct brcmf_firmware_mapping brc
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
++ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43341),
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
+ BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
+--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
++++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
+@@ -36,6 +36,7 @@
+ #define BRCM_CC_4330_CHIP_ID 0x4330
+ #define BRCM_CC_4334_CHIP_ID 0x4334
+ #define BRCM_CC_43340_CHIP_ID 43340
++#define BRCM_CC_43341_CHIP_ID 43341
+ #define BRCM_CC_43362_CHIP_ID 43362
+ #define BRCM_CC_4335_CHIP_ID 0x4335
+ #define BRCM_CC_4339_CHIP_ID 0x4339