summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
Diffstat (limited to 'package')
-rw-r--r--package/mac80211/patches/840-b43-backport.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/package/mac80211/patches/840-b43-backport.patch b/package/mac80211/patches/840-b43-backport.patch
new file mode 100644
index 000000000..b2bb22a66
--- /dev/null
+++ b/package/mac80211/patches/840-b43-backport.patch
@@ -0,0 +1,159 @@
+--- a/drivers/net/wireless/b43/bus.c
++++ b/drivers/net/wireless/b43/bus.c
+@@ -107,11 +107,9 @@ struct b43_bus_dev *b43_bus_dev_bcma_ini
+ dev->dma_dev = core->dma_dev;
+ dev->irq = core->irq;
+
+- /*
+ dev->board_vendor = core->bus->boardinfo.vendor;
+ dev->board_type = core->bus->boardinfo.type;
+- dev->board_rev = core->bus->boardinfo.rev;
+- */
++ dev->board_rev = core->bus->sprom.board_rev;
+
+ dev->chip_id = core->bus->chipinfo.id;
+ dev->chip_rev = core->bus->chipinfo.rev;
+@@ -210,7 +208,7 @@ struct b43_bus_dev *b43_bus_dev_ssb_init
+
+ dev->board_vendor = sdev->bus->boardinfo.vendor;
+ dev->board_type = sdev->bus->boardinfo.type;
+- dev->board_rev = sdev->bus->boardinfo.rev;
++ dev->board_rev = sdev->bus->sprom.board_rev;
+
+ dev->chip_id = sdev->bus->chip_id;
+ dev->chip_rev = sdev->bus->chip_rev;
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -1109,7 +1109,7 @@ static bool b43_dma_translation_in_low_w
+ #ifdef CONFIG_B43_SSB
+ if (dev->dev->bus_type == B43_BUS_SSB &&
+ dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI &&
+- !(dev->dev->sdev->bus->host_pci->is_pcie &&
++ !(pci_is_pcie(dev->dev->sdev->bus->host_pci) &&
+ ssb_read32(dev->dev->sdev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64))
+ return 1;
+ #endif
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -4834,8 +4834,14 @@ static int b43_op_start(struct ieee80211
+ out_mutex_unlock:
+ mutex_unlock(&wl->mutex);
+
+- /* reload configuration */
+- b43_op_config(hw, ~0);
++ /*
++ * Configuration may have been overwritten during initialization.
++ * Reload the configuration, but only if initialization was
++ * successful. Reloading the configuration after a failed init
++ * may hang the system.
++ */
++ if (!err)
++ b43_op_config(hw, ~0);
+
+ return err;
+ }
+@@ -5279,10 +5285,10 @@ static void b43_sprom_fixup(struct ssb_b
+
+ /* boardflags workarounds */
+ if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
+- bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
++ bus->chip_id == 0x4301 && bus->sprom.board_rev == 0x74)
+ bus->sprom.boardflags_lo |= B43_BFL_BTCOEXIST;
+ if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
+- bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
++ bus->boardinfo.type == 0x4E && bus->sprom.board_rev > 0x40)
+ bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
+ if (bus->bustype == SSB_BUSTYPE_PCI) {
+ pdev = bus->host_pci;
+--- a/drivers/net/wireless/b43/sdio.c
++++ b/drivers/net/wireless/b43/sdio.c
+@@ -193,7 +193,7 @@ static struct sdio_driver b43_sdio_drive
+ .name = "b43-sdio",
+ .id_table = b43_sdio_ids,
+ .probe = b43_sdio_probe,
+- .remove = b43_sdio_remove,
++ .remove = __devexit_p(b43_sdio_remove),
+ };
+
+ int b43_sdio_init(void)
+--- a/drivers/net/wireless/b43legacy/main.c
++++ b/drivers/net/wireless/b43legacy/main.c
+@@ -1550,8 +1550,6 @@ static void b43legacy_request_firmware(s
+ const char *filename;
+ int err;
+
+- /* do dummy read */
+- ssb_read32(dev->dev, SSB_TMSHIGH);
+ if (!fw->ucode) {
+ if (rev == 2)
+ filename = "ucode2";
+@@ -3758,7 +3756,7 @@ static void b43legacy_sprom_fixup(struct
+ /* boardflags workarounds */
+ if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
+ bus->boardinfo.type == 0x4E &&
+- bus->boardinfo.rev > 0x40)
++ bus->sprom.board_rev > 0x40)
+ bus->sprom.boardflags_lo |= B43legacy_BFL_PACTRL;
+ }
+
+--- a/drivers/net/wireless/b43legacy/phy.c
++++ b/drivers/net/wireless/b43legacy/phy.c
+@@ -408,7 +408,7 @@ static void b43legacy_phy_setupg(struct
+
+ if (is_bcm_board_vendor(dev) &&
+ (dev->dev->bus->boardinfo.type == 0x0416) &&
+- (dev->dev->bus->boardinfo.rev == 0x0017))
++ (dev->dev->bus->sprom.board_rev == 0x0017))
+ return;
+
+ b43legacy_ilt_write(dev, 0x5001, 0x0002);
+@@ -424,7 +424,7 @@ static void b43legacy_phy_setupg(struct
+
+ if (is_bcm_board_vendor(dev) &&
+ (dev->dev->bus->boardinfo.type == 0x0416) &&
+- (dev->dev->bus->boardinfo.rev == 0x0017))
++ (dev->dev->bus->sprom.board_rev == 0x0017))
+ return;
+
+ b43legacy_ilt_write(dev, 0x0401, 0x0002);
+--- a/drivers/net/wireless/b43legacy/radio.c
++++ b/drivers/net/wireless/b43legacy/radio.c
+@@ -1998,7 +1998,7 @@ u16 b43legacy_default_radio_attenuation(
+ if (phy->type == B43legacy_PHYTYPE_G) {
+ if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type == 0x421 &&
+- dev->dev->bus->boardinfo.rev >= 30)
++ dev->dev->bus->sprom.board_rev >= 30)
+ att = 3;
+ else if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type == 0x416)
+@@ -2008,7 +2008,7 @@ u16 b43legacy_default_radio_attenuation(
+ } else {
+ if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type == 0x421 &&
+- dev->dev->bus->boardinfo.rev >= 30)
++ dev->dev->bus->sprom.board_rev >= 30)
+ att = 7;
+ else
+ att = 6;
+@@ -2018,7 +2018,7 @@ u16 b43legacy_default_radio_attenuation(
+ if (phy->type == B43legacy_PHYTYPE_G) {
+ if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type == 0x421 &&
+- dev->dev->bus->boardinfo.rev >= 30)
++ dev->dev->bus->sprom.board_rev >= 30)
+ att = 3;
+ else if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type ==
+@@ -2052,9 +2052,9 @@ u16 b43legacy_default_radio_attenuation(
+ }
+ if (is_bcm_board_vendor(dev) &&
+ dev->dev->bus->boardinfo.type == 0x421) {
+- if (dev->dev->bus->boardinfo.rev < 0x43)
++ if (dev->dev->bus->sprom.board_rev < 0x43)
+ att = 2;
+- else if (dev->dev->bus->boardinfo.rev < 0x51)
++ else if (dev->dev->bus->sprom.board_rev < 0x51)
+ att = 3;
+ }
+ if (att == 0xFFFF)