b43: Workaround invalid bluetooth settings This adds a workaround for invalid bluetooth SPROM settings on ASUS PCI cards. This will stop the microcode from poking with the BT GPIO line. This fixes data transmission on this device, as the BT GPIO line is used for something TX related on this device (probably the power amplifier or the radio). This patch was applied to mainline kernels with commit 1855ba7812dbd294fcfc083dc7d3b14d3b1f38db and was authored by Michael Buesch . Signed-off-by: Larry Finger --- Index: ubuntu-hardy/drivers/net/wireless/b43/main.c =================================================================== --- ubuntu-hardy.orig/drivers/net/wireless/b43/main.c +++ ubuntu-hardy/drivers/net/wireless/b43/main.c @@ -3852,6 +3852,8 @@ static int b43_one_core_attach(struct ss static void b43_sprom_fixup(struct ssb_bus *bus) { + struct pci_dev *pdev; + /* boardflags workarounds */ if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL && bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74) @@ -3859,6 +3861,14 @@ static void b43_sprom_fixup(struct ssb_b if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE && bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40) bus->sprom.r1.boardflags_lo |= B43_BFL_PACTRL; + if (bus->bustype == SSB_BUSTYPE_PCI) { + pdev = bus->host_pci; + if (pdev->vendor == PCI_VENDOR_ID_BROADCOM && + pdev->device == 0x4318 && + pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK && + pdev->subsystem_device == 0x100F) + bus->sprom.r1.boardflags_lo &= ~B43_BFL_BTCOEXIST; + } /* Handle case when gain is not set in sprom */ if (bus->sprom.r1.antenna_gain_a == 0xFF)