aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r--drivers/net/wireless/b43/main.c37
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: 5521err_ssb_wireless_exit:
5520 if (first) 5522 b43_wireless_exit(dev, wl);
5521 b43_wireless_exit(dev, wl); 5523err_ssb_kfree_dev:
5524 kfree(dev);
5522 return err; 5525 return err;
5523} 5526}
5524 5527