diff options
author | Daniel Kim <dekim@broadcom.com> | 2014-07-12 02:49:37 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-07-15 16:00:12 -0400 |
commit | c1b20532ef395f23c2d24bc9c7f772a45e0420c7 (patch) | |
tree | 880138c85af5188784f78e8f9e0b31ec0b8f696e /drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | |
parent | 82d957e09d4f0ff8091ca67e39b51ec6bdc672b1 (diff) |
brcmfmac: Make firmware path a module parameter
This patch makes firmware path a module parameter so that firmware and
nvram files can be loaded from the specified path.
Signed-off-by: Daniel Kim <dekim@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c index c0486329331b..67d91d5cc13d 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | |||
@@ -666,28 +666,34 @@ static const struct brcmf_firmware_names brcmf_fwname_data[] = { | |||
666 | { BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4354) } | 666 | { BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, BRCMF_FIRMWARE_NVRAM(BCM4354) } |
667 | }; | 667 | }; |
668 | 668 | ||
669 | static const char *brcmf_sdio_get_fwname(struct brcmf_chip *ci, | 669 | static int brcmf_sdio_get_fwnames(struct brcmf_chip *ci, |
670 | enum brcmf_firmware_type type) | 670 | struct brcmf_sdio_dev *sdiodev) |
671 | { | 671 | { |
672 | int i; | 672 | int i; |
673 | 673 | ||
674 | for (i = 0; i < ARRAY_SIZE(brcmf_fwname_data); i++) { | 674 | for (i = 0; i < ARRAY_SIZE(brcmf_fwname_data); i++) { |
675 | if (brcmf_fwname_data[i].chipid == ci->chip && | 675 | if (brcmf_fwname_data[i].chipid == ci->chip && |
676 | brcmf_fwname_data[i].revmsk & BIT(ci->chiprev)) { | 676 | brcmf_fwname_data[i].revmsk & BIT(ci->chiprev)) |
677 | switch (type) { | 677 | break; |
678 | case BRCMF_FIRMWARE_BIN: | ||
679 | return brcmf_fwname_data[i].bin; | ||
680 | case BRCMF_FIRMWARE_NVRAM: | ||
681 | return brcmf_fwname_data[i].nv; | ||
682 | default: | ||
683 | brcmf_err("invalid firmware type (%d)\n", type); | ||
684 | return NULL; | ||
685 | } | ||
686 | } | ||
687 | } | 678 | } |
688 | brcmf_err("Unknown chipid %d [%d]\n", | 679 | |
689 | ci->chip, ci->chiprev); | 680 | if (i == ARRAY_SIZE(brcmf_fwname_data)) { |
690 | return NULL; | 681 | brcmf_err("Unknown chipid %d [%d]\n", ci->chip, ci->chiprev); |
682 | return -ENODEV; | ||
683 | } | ||
684 | |||
685 | /* check if firmware path is provided by module parameter */ | ||
686 | if (brcmf_firmware_path[0] != '\0') { | ||
687 | if (brcmf_firmware_path[strlen(brcmf_firmware_path) - 1] != '/') | ||
688 | strcat(brcmf_firmware_path, "/"); | ||
689 | |||
690 | strcpy(sdiodev->fw_name, brcmf_firmware_path); | ||
691 | strcpy(sdiodev->nvram_name, brcmf_firmware_path); | ||
692 | } | ||
693 | strcat(sdiodev->fw_name, brcmf_fwname_data[i].bin); | ||
694 | strcat(sdiodev->nvram_name, brcmf_fwname_data[i].nv); | ||
695 | |||
696 | return 0; | ||
691 | } | 697 | } |
692 | 698 | ||
693 | static void pkt_align(struct sk_buff *p, int len, int align) | 699 | static void pkt_align(struct sk_buff *p, int len, int align) |
@@ -4160,11 +4166,12 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) | |||
4160 | brcmf_sdio_debugfs_create(bus); | 4166 | brcmf_sdio_debugfs_create(bus); |
4161 | brcmf_dbg(INFO, "completed!!\n"); | 4167 | brcmf_dbg(INFO, "completed!!\n"); |
4162 | 4168 | ||
4169 | ret = brcmf_sdio_get_fwnames(bus->ci, sdiodev); | ||
4170 | if (ret) | ||
4171 | goto fail; | ||
4172 | |||
4163 | ret = brcmf_fw_get_firmwares(sdiodev->dev, BRCMF_FW_REQUEST_NVRAM, | 4173 | ret = brcmf_fw_get_firmwares(sdiodev->dev, BRCMF_FW_REQUEST_NVRAM, |
4164 | brcmf_sdio_get_fwname(bus->ci, | 4174 | sdiodev->fw_name, sdiodev->nvram_name, |
4165 | BRCMF_FIRMWARE_BIN), | ||
4166 | brcmf_sdio_get_fwname(bus->ci, | ||
4167 | BRCMF_FIRMWARE_NVRAM), | ||
4168 | brcmf_sdio_firmware_callback); | 4175 | brcmf_sdio_firmware_callback); |
4169 | if (ret != 0) { | 4176 | if (ret != 0) { |
4170 | brcmf_err("async firmware request failed: %d\n", ret); | 4177 | brcmf_err("async firmware request failed: %d\n", ret); |