diff options
author | Narayan Reddy <narayanr@nvidia.com> | 2011-10-25 16:39:59 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:52:35 -0800 |
commit | f8a0d126be464a21bb55cafed5285bd4cd9a511e (patch) | |
tree | beaf6b4eb98142c8709b4d5467ca0fa429312792 /drivers/net | |
parent | 84d261b7df0abd9ff03c4a111008d6f51cc1c4ce (diff) |
drivers: net: bcmdhd: load firmare based on chipid
bcm4329 and bcm4330 need different firmware files. This change
detects chipid and loads firmware located at
CONFIG_BCMDHD_FW_DIR/firmware_bcm<chipid>.bin
Bug 820860
(cherry picked from commit 850c98cc99c0bd8feee523a6c62501de9be3c770)
Change-Id: I043ffeda3ae8fe6f5c0c133bacc4aba7a080b983
Reviewed-on: http://git-master/r/60221
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: R59196ff5cb76aedcfaae1e84277a2ae27ce92314
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/bcmdhd/Kconfig | 23 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/Makefile | 14 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/bcmsdh_linux.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd_common.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd_linux.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd_sdio.c | 2 |
7 files changed, 50 insertions, 14 deletions
diff --git a/drivers/net/wireless/bcmdhd/Kconfig b/drivers/net/wireless/bcmdhd/Kconfig index db434ab04cda..60f5a3adbc91 100644 --- a/drivers/net/wireless/bcmdhd/Kconfig +++ b/drivers/net/wireless/bcmdhd/Kconfig @@ -10,17 +10,17 @@ config BCMDHD If you choose to build a module, it'll be called dhd. Say M if unsure. -config BCMDHD_FW_PATH +config BCMDHD_FW_DIR depends on BCMDHD string "Firmware path" - default "/system/etc/firmware/fw_bcmdhd.bin" + default "/system/vendor/firmware" ---help--- Path to the firmware file. -config BCMDHD_NVRAM_PATH +config BCMDHD_NVRAM_DIR depends on BCMDHD string "NVRAM path" - default "/system/etc/wifi/bcmdhd.cal" + default "/system/etc" ---help--- Path to the calibration file. @@ -31,3 +31,18 @@ config BCMDHD_WEXT select WEXT_PRIV help Enables WEXT support + +config BCMDHD_WIFI_CONTROL_FUNC + bool "Use bcmdhd_wlan device" + depends on BCMDHD + default n + ---help--- + Use this option to get various parameters from architecture specific + bcmdhd_wlan platform device. Say n if unsure. + +config BCMDHD_HW_OOB + bool "Use out of band interrupt" + depends on BCMDHD + default n + ---help--- + Use out of band interrupt for card interrupt and wake on wireless. diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile index e82c9856f006..632f43a8c198 100644 --- a/drivers/net/wireless/bcmdhd/Makefile +++ b/drivers/net/wireless/bcmdhd/Makefile @@ -3,13 +3,25 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER \ -DBCMDONGLEHOST -DUNRELEASEDCHIP -DBCMDMA32 -DWLBTAMP -DBCMFILEIMAGE \ -DDHDTHREAD -DDHD_GPL -DDHD_SCHED -DDHD_DEBUG -DSDTEST -DBDC -DTOE \ -DDHD_BCMEVENTS -DSHOW_EVENTS -DDONGLEOVERLAYS -DBCMDBG \ - -DCUSTOMER_HW2 -DCUSTOM_OOB_GPIO_NUM=2 -DOOB_INTR_ONLY -DHW_OOB \ + -DCUSTOMER_HW2 \ -DMMC_SDIO_ABORT -DBCMSDIO -DBCMLXSDMMC -DBCMPLATFORM_BUS -DWLP2P \ -DNEW_COMPAT_WIRELESS -DWIFI_ACT_FRAME -DARP_OFFLOAD_SUPPORT \ -DKEEP_ALIVE -DCSCAN -DGET_CUSTOM_MAC_ENABLE -DPKT_FILTER_SUPPORT \ -DEMBEDDED_PLATFORM -DENABLE_INSMOD_NO_FW_LOAD -DPNO_SUPPORT \ -Idrivers/net/wireless/bcmdhd -Idrivers/net/wireless/bcmdhd/include +ifeq ($(CONFIG_BCMDHD_WIFI_CONTROL_FUNC),y) +DHDCFLAGS += -DCONFIG_WIFI_CONTROL_FUNC +else +DHDCFLAGS += -DCUSTOM_OOB_GPIO_NUM=2 +endif + +ifeq ($(CONFIG_BCMDHD_HW_OOB),y) +DHDCFLAGS += -DHW_OOB -DOOB_INTR_ONLY +else +DHDCFLAGS += -DSDIO_ISR_THREAD +endif + DHDOFILES = aiutils.o bcmsdh_sdmmc_linux.o dhd_linux.o siutils.o bcmutils.o \ dhd_linux_sched.o bcmwifi.o dhd_sdio.o bcmevent.o dhd_bta.o hndpmu.o \ bcmsdh.o dhd_cdc.o bcmsdh_linux.o dhd_common.o linux_osl.o \ diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c index 04c43a3225cf..096abb824350 100644 --- a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c +++ b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c @@ -35,6 +35,7 @@ #include <linux/pci.h> #include <linux/completion.h> +#include <linux/mmc/sdio_func.h> #include <osl.h> #include <pcicfg.h> @@ -166,6 +167,7 @@ int bcmsdh_probe(struct device *dev) bcmsdh_hc_t *sdhc = NULL; ulong regs = 0; bcmsdh_info_t *sdh = NULL; + struct sdio_func *func = container_of(dev, struct sdio_func, dev); #if !defined(BCMLXSDMMC) && defined(BCMPLATFORM_BUS) struct platform_device *pdev; struct resource *r; @@ -241,10 +243,11 @@ int bcmsdh_probe(struct device *dev) /* Read the vendor/device ID from the CIS */ vendevid = bcmsdh_query_device(sdh); + /* try to attach to the target device */ if (!(sdhc->ch = drvinfo.attach((vendevid >> 16), - (vendevid & 0xFFFF), 0, 0, 0, 0, - (void *)regs, NULL, sdh))) { + func->device, 0, 0, 0, 0, + (void *)regs, NULL, sdh))) { SDLX_MSG(("%s: device attach failed\n", __FUNCTION__)); goto err; } diff --git a/drivers/net/wireless/bcmdhd/dhd.h b/drivers/net/wireless/bcmdhd/dhd.h index c87f6cf37d9c..18d48d846d08 100644 --- a/drivers/net/wireless/bcmdhd/dhd.h +++ b/drivers/net/wireless/bcmdhd/dhd.h @@ -462,7 +462,7 @@ extern int dhd_wl_ioctl(dhd_pub_t *dhd_pub, int ifindex, wl_ioctl_t *ioc, void * extern int dhd_wl_ioctl_cmd(dhd_pub_t *dhd_pub, int cmd, void *arg, int len, uint8 set, int ifindex); -extern struct dhd_cmn *dhd_common_init(osl_t *osh); +extern struct dhd_cmn *dhd_common_init(uint16 devid, osl_t *osh); extern void dhd_common_deinit(dhd_pub_t *dhd_pub, dhd_cmn_t *sa_cmn); extern int dhd_add_if(struct dhd_info *dhd, int ifidx, void *handle, diff --git a/drivers/net/wireless/bcmdhd/dhd_common.c b/drivers/net/wireless/bcmdhd/dhd_common.c index a29c2fab28cd..372ec80c866a 100644 --- a/drivers/net/wireless/bcmdhd/dhd_common.c +++ b/drivers/net/wireless/bcmdhd/dhd_common.c @@ -170,7 +170,7 @@ const bcm_iovar_t dhd_iovars[] = { }; struct dhd_cmn * -dhd_common_init(osl_t *osh) +dhd_common_init(uint16 devid, osl_t *osh) { dhd_cmn_t *cmn; @@ -190,17 +190,22 @@ dhd_common_init(osl_t *osh) #ifdef CONFIG_BCMDHD_FW_PATH bcm_strncpy_s(fw_path, sizeof(fw_path), CONFIG_BCMDHD_FW_PATH, MOD_PARAM_PATHLEN-1); -#else /* CONFIG_BCMDHD_FW_PATH */ +#elif defined(CONFIG_BCMDHD_FW_DIR) /* CONFIG_BCMDHD_FW_PATH */ + sprintf(fw_path, "%s/bcm%x/fw_bcmdhd.bin", CONFIG_BCMDHD_FW_DIR, devid); +#else fw_path[0] = '\0'; -#endif /* CONFIG_BCMDHD_FW_PATH */ +#endif /* CONFIG_BCMDHD_FW_DIR */ #ifdef CONFIG_BCMDHD_NVRAM_PATH bcm_strncpy_s(nv_path, sizeof(nv_path), CONFIG_BCMDHD_NVRAM_PATH, MOD_PARAM_PATHLEN-1); -#else /* CONFIG_BCMDHD_NVRAM_PATH */ +#elif defined(CONFIG_BCMDHD_NVRAM_DIR) /* CONFIG_BCMDHD_NVRAM_PATH */ + sprintf(nv_path, "%s/nvram_%x.txt", CONFIG_BCMDHD_NVRAM_DIR, devid); +#else nv_path[0] = '\0'; #endif /* CONFIG_BCMDHD_NVRAM_PATH */ #ifdef SOFTAP fw_path2[0] = '\0'; #endif + DHD_ERROR(("bcmdhd: fw_path: %s nvram_path: %s\n", fw_path, nv_path)); return cmn; } diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c index 92cdc9b1a4b1..b5a91eb4034c 100644 --- a/drivers/net/wireless/bcmdhd/dhd_linux.c +++ b/drivers/net/wireless/bcmdhd/dhd_linux.c @@ -2928,8 +2928,9 @@ dhd_preinit_ioctls(dhd_pub_t *dhd) dhd_pkt_filter_enable = TRUE; } - DHD_ERROR(("Firmware up: op_mode=%d, " + DHD_ERROR(("Firmware up: fw_path=%s op_mode=%d, " "Broadcom Dongle Host Driver mac=%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", + fw_path, dhd->op_mode, dhd->mac.octet[0], dhd->mac.octet[1], dhd->mac.octet[2], dhd->mac.octet[3], dhd->mac.octet[4], dhd->mac.octet[5])); diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c index 29301159cbd2..b43c7422e02c 100644 --- a/drivers/net/wireless/bcmdhd/dhd_sdio.c +++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c @@ -5305,7 +5305,7 @@ dhdsdio_probe(uint16 venid, uint16 devid, uint16 bus_no, uint16 slot, bus->usebufpool = FALSE; /* Use bufpool if allocated, else use locally malloced rxbuf */ /* attach the common module */ - if (!(cmn = dhd_common_init(osh))) { + if (!(cmn = dhd_common_init(bus->cl_devid, osh))) { DHD_ERROR(("%s: dhd_common_init failed\n", __FUNCTION__)); goto fail; } |