diff options
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index cf5c046c9fa8..4bc053ffc37e 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -84,6 +84,10 @@ int b43_modparam_qos = 1; | |||
84 | module_param_named(qos, b43_modparam_qos, int, 0444); | 84 | module_param_named(qos, b43_modparam_qos, int, 0444); |
85 | MODULE_PARM_DESC(qos, "Enable QOS support (default on)"); | 85 | MODULE_PARM_DESC(qos, "Enable QOS support (default on)"); |
86 | 86 | ||
87 | static int modparam_btcoex = 1; | ||
88 | module_param_named(btcoex, modparam_btcoex, int, 0444); | ||
89 | MODULE_PARM_DESC(btcoex, "Enable Bluetooth coexistance (default on)"); | ||
90 | |||
87 | 91 | ||
88 | static const struct ssb_device_id b43_ssb_tbl[] = { | 92 | static const struct ssb_device_id b43_ssb_tbl[] = { |
89 | SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), | 93 | SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5), |
@@ -3708,6 +3712,8 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev) | |||
3708 | struct ssb_sprom *sprom = &dev->dev->bus->sprom; | 3712 | struct ssb_sprom *sprom = &dev->dev->bus->sprom; |
3709 | u32 hf; | 3713 | u32 hf; |
3710 | 3714 | ||
3715 | if (!modparam_btcoex) | ||
3716 | return; | ||
3711 | if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST)) | 3717 | if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST)) |
3712 | return; | 3718 | return; |
3713 | if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode) | 3719 | if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode) |
@@ -3719,11 +3725,13 @@ static void b43_bluetooth_coext_enable(struct b43_wldev *dev) | |||
3719 | else | 3725 | else |
3720 | hf |= B43_HF_BTCOEX; | 3726 | hf |= B43_HF_BTCOEX; |
3721 | b43_hf_write(dev, hf); | 3727 | b43_hf_write(dev, hf); |
3722 | //TODO | ||
3723 | } | 3728 | } |
3724 | 3729 | ||
3725 | static void b43_bluetooth_coext_disable(struct b43_wldev *dev) | 3730 | static void b43_bluetooth_coext_disable(struct b43_wldev *dev) |
3726 | { //TODO | 3731 | { |
3732 | if (!modparam_btcoex) | ||
3733 | return; | ||
3734 | //TODO | ||
3727 | } | 3735 | } |
3728 | 3736 | ||
3729 | static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev) | 3737 | static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev) |
@@ -4416,6 +4424,8 @@ static int b43_one_core_attach(struct ssb_device *dev, struct b43_wl *wl) | |||
4416 | 4424 | ||
4417 | static void b43_sprom_fixup(struct ssb_bus *bus) | 4425 | static void b43_sprom_fixup(struct ssb_bus *bus) |
4418 | { | 4426 | { |
4427 | struct pci_dev *pdev; | ||
4428 | |||
4419 | /* boardflags workarounds */ | 4429 | /* boardflags workarounds */ |
4420 | if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL && | 4430 | if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL && |
4421 | bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74) | 4431 | bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74) |
@@ -4423,6 +4433,14 @@ static void b43_sprom_fixup(struct ssb_bus *bus) | |||
4423 | if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && | 4433 | if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && |
4424 | bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) | 4434 | bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) |
4425 | bus->sprom.boardflags_lo |= B43_BFL_PACTRL; | 4435 | bus->sprom.boardflags_lo |= B43_BFL_PACTRL; |
4436 | if (bus->bustype == SSB_BUSTYPE_PCI) { | ||
4437 | pdev = bus->host_pci; | ||
4438 | if (pdev->vendor == PCI_VENDOR_ID_BROADCOM && | ||
4439 | pdev->device == 0x4318 && | ||
4440 | pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK && | ||
4441 | pdev->subsystem_device == 0x100F) | ||
4442 | bus->sprom.boardflags_lo &= ~B43_BFL_BTCOEXIST; | ||
4443 | } | ||
4426 | } | 4444 | } |
4427 | 4445 | ||
4428 | static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl) | 4446 | static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl) |