diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-04-20 14:30:58 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-04-22 15:06:34 -0400 |
commit | 8f15e28703d1222bf5f23009fde998e9e4c20e8d (patch) | |
tree | 6fd360957a12f9f98b0df082a5f95b248c54de91 /drivers/net/wireless/b43/main.c | |
parent | 557579279f5f783fa86295cf767a19f9e98bb62d (diff) |
b43: ssb: refuse to support more than IEEE 802.11 core
Some ancient Broadcom devices had one core per band, e.g.:
ssb: Found chip with id 0x4306, rev 0x02 and package 0x00
ssb: Core 0 found: ChipCommon (cc 0x800, rev 0x02, vendor 0x4243)
ssb: Core 1 found: IEEE 802.11 (cc 0x812, rev 0x04, vendor 0x4243)
ssb: Core 2 found: PCMCIA (cc 0x80D, rev 0x01, vendor 0x4243)
ssb: Core 3 found: V90 (cc 0x807, rev 0x01, vendor 0x4243)
ssb: Core 4 found: PCI (cc 0x804, rev 0x07, vendor 0x4243)
ssb: Core 5 found: IEEE 802.11 (cc 0x812, rev 0x04, vendor 0x4243)
This hardware model was dropped for newer devices handled by b43.
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r-- | drivers/net/wireless/b43/main.c | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 69fc3d65531a..cf84cf2b6874 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -5486,39 +5486,42 @@ int b43_ssb_probe(struct ssb_device *sdev, const struct ssb_device_id *id) | |||
5486 | struct b43_bus_dev *dev; | 5486 | struct b43_bus_dev *dev; |
5487 | struct b43_wl *wl; | 5487 | struct b43_wl *wl; |
5488 | int err; | 5488 | int err; |
5489 | int first = 0; | ||
5490 | 5489 | ||
5491 | dev = b43_bus_dev_ssb_init(sdev); | 5490 | dev = b43_bus_dev_ssb_init(sdev); |
5492 | if (!dev) | 5491 | if (!dev) |
5493 | return -ENOMEM; | 5492 | return -ENOMEM; |
5494 | 5493 | ||
5495 | wl = ssb_get_devtypedata(sdev); | 5494 | wl = ssb_get_devtypedata(sdev); |
5496 | if (!wl) { | 5495 | if (wl) { |
5497 | /* Probing the first core. Must setup common struct b43_wl */ | 5496 | b43err(NULL, "Dual-core devices are not supported\n"); |
5498 | first = 1; | 5497 | err = -ENOTSUPP; |
5499 | b43_sprom_fixup(sdev->bus); | 5498 | goto err_ssb_kfree_dev; |
5500 | wl = b43_wireless_init(dev); | ||
5501 | if (IS_ERR(wl)) { | ||
5502 | err = PTR_ERR(wl); | ||
5503 | goto out; | ||
5504 | } | ||
5505 | ssb_set_devtypedata(sdev, wl); | ||
5506 | B43_WARN_ON(ssb_get_devtypedata(sdev) != wl); | ||
5507 | } | 5499 | } |
5500 | |||
5501 | b43_sprom_fixup(sdev->bus); | ||
5502 | |||
5503 | wl = b43_wireless_init(dev); | ||
5504 | if (IS_ERR(wl)) { | ||
5505 | err = PTR_ERR(wl); | ||
5506 | goto err_ssb_kfree_dev; | ||
5507 | } | ||
5508 | ssb_set_devtypedata(sdev, wl); | ||
5509 | B43_WARN_ON(ssb_get_devtypedata(sdev) != wl); | ||
5510 | |||
5508 | err = b43_one_core_attach(dev, wl); | 5511 | err = b43_one_core_attach(dev, wl); |
5509 | if (err) | 5512 | if (err) |
5510 | goto err_wireless_exit; | 5513 | goto err_ssb_wireless_exit; |
5511 | 5514 | ||
5512 | /* setup and start work to load firmware */ | 5515 | /* setup and start work to load firmware */ |
5513 | INIT_WORK(&wl->firmware_load, b43_request_firmware); | 5516 | INIT_WORK(&wl->firmware_load, b43_request_firmware); |
5514 | schedule_work(&wl->firmware_load); | 5517 | schedule_work(&wl->firmware_load); |
5515 | 5518 | ||
5516 | out: | ||
5517 | return err; | 5519 | return err; |
5518 | 5520 | ||
5519 | err_wireless_exit: | 5521 | err_ssb_wireless_exit: |
5520 | if (first) | 5522 | b43_wireless_exit(dev, wl); |
5521 | b43_wireless_exit(dev, wl); | 5523 | err_ssb_kfree_dev: |
5524 | kfree(dev); | ||
5522 | return err; | 5525 | return err; |
5523 | } | 5526 | } |
5524 | 5527 | ||