]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
brcm: adds support for BCM43341 wifi
authorCheong2K <cheong@redbear.cc>
Fri, 26 Feb 2016 10:20:10 +0000 (18:20 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 14 Jun 2017 09:11:35 +0000 (11:11 +0200)
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>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c

index 7ffc4aba5bab0683fe993d1d5eef9e8e3d8389d0..5dfcf16428f9c8687237c3218183d8afa66ec331 100644 (file)
@@ -2749,6 +2749,8 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev,
         * 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)) {
 
@@ -4659,12 +4661,15 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
                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,
@@ -6650,12 +6655,18 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
        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]) &&
@@ -6679,10 +6690,14 @@ static s32 brcmf_translate_country_code(struct brcmf_pub *drvr, char alpha2[2],
                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;
index 3e15d64c64813513bc22202dd9e468588699abb0..4051780f64f44a5ce522babe6c371a1beb79a824 100644 (file)
@@ -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");
 
index d2219885071f6d718f0f26320d580c66adc26e36..d13826095c09f5b4037625371fe648900c9d670a 100644 (file)
@@ -604,6 +604,7 @@ BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-sdio.bin", "brcmfmac4329-sdio.txt");
 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,7 +622,7 @@ static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
        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, 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),