aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ssb/scan.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ssb/scan.c')
-rw-r--r--drivers/ssb/scan.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/ssb/scan.c b/drivers/ssb/scan.c
index 9738cad4ba13..45e5babd3961 100644
--- a/drivers/ssb/scan.c
+++ b/drivers/ssb/scan.c
@@ -17,7 +17,6 @@
17#include <linux/pci.h> 17#include <linux/pci.h>
18#include <linux/io.h> 18#include <linux/io.h>
19 19
20#include <pcmcia/cs.h>
21#include <pcmcia/cistpl.h> 20#include <pcmcia/cistpl.h>
22#include <pcmcia/ds.h> 21#include <pcmcia/ds.h>
23 22
@@ -259,7 +258,10 @@ static int we_support_multiple_80211_cores(struct ssb_bus *bus)
259#ifdef CONFIG_SSB_PCIHOST 258#ifdef CONFIG_SSB_PCIHOST
260 if (bus->bustype == SSB_BUSTYPE_PCI) { 259 if (bus->bustype == SSB_BUSTYPE_PCI) {
261 if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM && 260 if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM &&
262 bus->host_pci->device == 0x4324) 261 ((bus->host_pci->device == 0x4313) ||
262 (bus->host_pci->device == 0x431A) ||
263 (bus->host_pci->device == 0x4321) ||
264 (bus->host_pci->device == 0x4324)))
263 return 1; 265 return 1;
264 } 266 }
265#endif /* CONFIG_SSB_PCIHOST */ 267#endif /* CONFIG_SSB_PCIHOST */
@@ -308,7 +310,7 @@ int ssb_bus_scan(struct ssb_bus *bus,
308 } else { 310 } else {
309 if (bus->bustype == SSB_BUSTYPE_PCI) { 311 if (bus->bustype == SSB_BUSTYPE_PCI) {
310 bus->chip_id = pcidev_to_chipid(bus->host_pci); 312 bus->chip_id = pcidev_to_chipid(bus->host_pci);
311 pci_read_config_word(bus->host_pci, PCI_REVISION_ID, 313 pci_read_config_byte(bus->host_pci, PCI_REVISION_ID,
312 &bus->chip_rev); 314 &bus->chip_rev);
313 bus->chip_package = 0; 315 bus->chip_package = 0;
314 } else { 316 } else {
@@ -406,10 +408,10 @@ int ssb_bus_scan(struct ssb_bus *bus,
406 /* Ignore PCI cores on PCI-E cards. 408 /* Ignore PCI cores on PCI-E cards.
407 * Ignore PCI-E cores on PCI cards. */ 409 * Ignore PCI-E cores on PCI cards. */
408 if (dev->id.coreid == SSB_DEV_PCI) { 410 if (dev->id.coreid == SSB_DEV_PCI) {
409 if (bus->host_pci->is_pcie) 411 if (pci_is_pcie(bus->host_pci))
410 continue; 412 continue;
411 } else { 413 } else {
412 if (!bus->host_pci->is_pcie) 414 if (!pci_is_pcie(bus->host_pci))
413 continue; 415 continue;
414 } 416 }
415 } 417 }
@@ -421,6 +423,16 @@ int ssb_bus_scan(struct ssb_bus *bus,
421 bus->pcicore.dev = dev; 423 bus->pcicore.dev = dev;
422#endif /* CONFIG_SSB_DRIVER_PCICORE */ 424#endif /* CONFIG_SSB_DRIVER_PCICORE */
423 break; 425 break;
426 case SSB_DEV_ETHERNET:
427 if (bus->bustype == SSB_BUSTYPE_PCI) {
428 if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM &&
429 (bus->host_pci->device & 0xFF00) == 0x4300) {
430 /* This is a dangling ethernet core on a
431 * wireless device. Ignore it. */
432 continue;
433 }
434 }
435 break;
424 default: 436 default:
425 break; 437 break;
426 } 438 }