diff options
Diffstat (limited to 'package/broadcom-wl')
8 files changed, 84 insertions, 5 deletions
diff --git a/package/broadcom-wl/Makefile b/package/broadcom-wl/Makefile index a2bd679d1..1a7da0f89 100644 --- a/package/broadcom-wl/Makefile +++ b/package/broadcom-wl/Makefile @@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=broadcom-wl PKG_VERSION:=5.10.56.27.3 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(ARCH).tar.bz2 PKG_SOURCE_URL:=http://downloads.openwrt.org/sources diff --git a/package/broadcom-wl/files/lib/wifi/broadcom.sh b/package/broadcom-wl/files/lib/wifi/broadcom.sh index 57e11e4b1..72b85aaf8 100644 --- a/package/broadcom-wl/files/lib/wifi/broadcom.sh +++ b/package/broadcom-wl/files/lib/wifi/broadcom.sh @@ -370,12 +370,15 @@ detect_broadcom() { local i=-1 while grep -qs "^ *wl$((++i)):" /proc/net/dev; do + local channel + config_get type wl${i} type [ "$type" = broadcom ] && continue + channel=`wlc ifname wl${i} channel` cat <<EOF config wifi-device wl${i} option type broadcom - option channel 11 + option channel ${channel:-11} # REMOVE THIS LINE TO ENABLE WIFI: option disabled 1 diff --git a/package/broadcom-wl/patches/010-remove_irqf_samble_random.patch b/package/broadcom-wl/patches/010-remove_irqf_samble_random.patch new file mode 100644 index 000000000..27b132d11 --- /dev/null +++ b/package/broadcom-wl/patches/010-remove_irqf_samble_random.patch @@ -0,0 +1,11 @@ +--- a/driver/wl_linux.c 2012-09-26 20:51:48.099454971 -0400 ++++ b/driver/wl_linux.c 2012-09-26 20:53:24.115453441 -0400 +@@ -691,7 +691,7 @@ + if (wl->bustype != JTAG_BUS) + #endif /* BCMJTAG */ + { +- if (request_irq(irq, wl_isr, IRQF_SHARED|IRQF_SAMPLE_RANDOM, dev->name, wl)) { ++ if (request_irq(irq, wl_isr, IRQF_SHARED, dev->name, wl)) { + WL_ERROR(("wl%d: request_irq() failed\n", unit)); + goto fail; + } diff --git a/package/broadcom-wl/patches/011-fix_compile_3_4.patch b/package/broadcom-wl/patches/011-fix_compile_3_4.patch new file mode 100644 index 000000000..585d53c7d --- /dev/null +++ b/package/broadcom-wl/patches/011-fix_compile_3_4.patch @@ -0,0 +1,12 @@ +--- a/driver/wl_linux.c ++++ b/driver/wl_linux.c +@@ -49,7 +49,9 @@ + #include <linux/ieee80211.h> + #endif + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0) + #include <asm/system.h> ++#endif + #include <asm/io.h> + #include <asm/irq.h> + #include <asm/pgtable.h> diff --git a/package/broadcom-wl/patches/100-fix_nvram_two_devices.patch b/package/broadcom-wl/patches/100-fix_nvram_two_devices.patch new file mode 100644 index 000000000..5650862f8 --- /dev/null +++ b/package/broadcom-wl/patches/100-fix_nvram_two_devices.patch @@ -0,0 +1,32 @@ +--- a/driver/nvram_stub.c ++++ b/driver/nvram_stub.c +@@ -22,6 +22,7 @@ typedef struct _vars { + #define VARS_T_OH sizeof(vars_t) + + static vars_t *vars = NULL; ++static int nvram_init_done = 0; + extern char *nvram_buf[]; + + int +@@ -33,6 +34,10 @@ BCMATTACHFN(nvram_init)(void *si) + uint nvs, bufsz; + vars_t *new; + ++ nvram_init_done++; ++ if (nvram_init_done != 1) ++ return 0; ++ + osh = si_osh(sih); + + nvs = R_REG(osh, &nvh->len) - sizeof(struct nvram_header); +@@ -79,6 +84,10 @@ BCMATTACHFN(nvram_exit)(void *si) + vars_t *this, *next; + si_t *sih; + ++ nvram_init_done--; ++ if (nvram_init_done != 0) ++ return 0; ++ + sih = (si_t *)si; + this = vars; + while (this) { diff --git a/package/broadcom-wl/patches/110-add_number_to_dev_name.patch b/package/broadcom-wl/patches/110-add_number_to_dev_name.patch new file mode 100644 index 000000000..13ce72741 --- /dev/null +++ b/package/broadcom-wl/patches/110-add_number_to_dev_name.patch @@ -0,0 +1,11 @@ +--- a/driver/wl_linux.c ++++ b/driver/wl_linux.c +@@ -1412,7 +1412,7 @@ wl_alloc_if(wl_info_t *wl, int iftype, u + dev = alloc_etherdev(sizeof(wl_if_t)); + wlif = netdev_priv(dev); + bzero(wlif, sizeof(wl_if_t)); +- strncpy(dev->name, name, IFNAMSIZ); ++ snprintf(dev->name, IFNAMSIZ, name, subunit); + + wlif->type = iftype; + wlif->dev = dev; diff --git a/package/broadcom-wl/patches/913-avoid-dbe-on-ifs_ctl-readw-hack.patch b/package/broadcom-wl/patches/913-avoid-dbe-on-ifs_ctl-readw-hack.patch new file mode 100644 index 000000000..412bce92c --- /dev/null +++ b/package/broadcom-wl/patches/913-avoid-dbe-on-ifs_ctl-readw-hack.patch @@ -0,0 +1,12 @@ +--- a/driver/linux_osl.c ++++ b/driver/linux_osl.c +@@ -723,6 +723,9 @@ osl_readl(volatile uint32 *r) + uint16 + osl_readw(volatile uint16 *r) + { ++ uint32 addr = (uintptr)r & 0xffff3fff; ++ if (addr == 0xa8000688) /* ifs_ctl */ ++ readl(r); + return (readw(r)); + } + diff --git a/package/broadcom-wl/src/glue/wl_glue.c b/package/broadcom-wl/src/glue/wl_glue.c index 0504232a9..fc94ac0b2 100644 --- a/package/broadcom-wl/src/glue/wl_glue.c +++ b/package/broadcom-wl/src/glue/wl_glue.c @@ -88,7 +88,6 @@ static struct ssb_driver wl_glue_ssb_driver = { #ifdef CONFIG_BCMA static int wl_glue_bcma_probe(struct bcma_device *dev) { - void *mmio; void *wldev; if (!attach_cb) @@ -109,8 +108,7 @@ static int wl_glue_bcma_probe(struct bcma_device *dev) * 0x1000 = BCMA_CORE_SIZE */ - mmio = (void *) 0x18000000 + dev->core_index * 0x1000; - wldev = attach_cb(dev->id.manuf, dev->id.id, (ulong)mmio, dev, dev->irq); + wldev = attach_cb(dev->id.manuf, dev->id.id, (ulong)dev->addr, dev, dev->irq); if (!wldev) { |