]> git.karo-electronics.de Git - linux-beck.git/commitdiff
brcmsmac: read PCI vendor and device id only for PCI devices
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 29 Apr 2012 00:50:42 +0000 (02:50 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 16 May 2012 16:45:26 +0000 (12:45 -0400)
If brcmsmac is used on non PCI(s) devices it should not try to access
bus->host_pci.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmsmac/main.c

index 479cb17c5ba1ff9c057fbf925fb7b5d6641672b4..19db4052c44c419324545072834d915f0339a361 100644 (file)
@@ -4434,9 +4434,14 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
        struct pci_dev *pcidev = core->bus->host_pci;
        struct ssb_sprom *sprom = &core->bus->sprom;
 
-       BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit,
-              pcidev->vendor,
-              pcidev->device);
+       if (core->bus->hosttype == BCMA_HOSTTYPE_PCI)
+               BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit,
+                      pcidev->vendor,
+                      pcidev->device);
+       else
+               BCMMSG(wlc->wiphy, "wl%d: vendor 0x%x device 0x%x\n", unit,
+                      core->bus->boardinfo.vendor,
+                      core->bus->boardinfo.type);
 
        wme = true;
 
@@ -4462,7 +4467,8 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
        }
 
        /* verify again the device is supported */
-       if (!brcms_c_chipmatch(pcidev->vendor, pcidev->device)) {
+       if (core->bus->hosttype == BCMA_HOSTTYPE_PCI &&
+           !brcms_c_chipmatch(pcidev->vendor, pcidev->device)) {
                wiphy_err(wiphy, "wl%d: brcms_b_attach: Unsupported "
                        "vendor/device (0x%x/0x%x)\n",
                         unit, pcidev->vendor, pcidev->device);
@@ -4470,8 +4476,13 @@ static int brcms_b_attach(struct brcms_c_info *wlc, struct bcma_device *core,
                goto fail;
        }
 
-       wlc_hw->vendorid = pcidev->vendor;
-       wlc_hw->deviceid = pcidev->device;
+       if (core->bus->hosttype == BCMA_HOSTTYPE_PCI) {
+               wlc_hw->vendorid = pcidev->vendor;
+               wlc_hw->deviceid = pcidev->device;
+       } else {
+               wlc_hw->vendorid = core->bus->boardinfo.vendor;
+               wlc_hw->deviceid = core->bus->boardinfo.type;
+       }
 
        wlc_hw->d11core = core;
        wlc_hw->corerev = core->id.rev;