diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2015-01-28 13:04:06 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <greg@kroah.com> | 2015-01-31 12:05:06 -0500 |
commit | cefa9a31a5f0856b81d53030815485fcb1fe8aab (patch) | |
tree | 9f737b33b7210835e18d07c5bdef0fd9ad584774 /drivers/usb/host | |
parent | e307ff0f78891cef56199954a0052466675ee97f (diff) |
ehci-pci: disable for Intel MID platforms
On some Intel MID platforms the ChipIdea USB controller is used. The EHCI PCI
is in conflict with the proper driver. The patch makes ehci-pci to be ignored
in favour of ChipIdea controller.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
Diffstat (limited to 'drivers/usb/host')
-rw-r--r-- | drivers/usb/host/ehci-pci.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 851006a0d97b..965202138161 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
@@ -42,6 +42,20 @@ static inline bool is_intel_quark_x1000(struct pci_dev *pdev) | |||
42 | pdev->device == PCI_DEVICE_ID_INTEL_QUARK_X1000_SOC; | 42 | pdev->device == PCI_DEVICE_ID_INTEL_QUARK_X1000_SOC; |
43 | } | 43 | } |
44 | 44 | ||
45 | static const struct pci_device_id ci_hdrc_pci_id_table[] = { | ||
46 | { PCI_DEVICE(0x153F, 0x1004), }, | ||
47 | { PCI_DEVICE(0x153F, 0x1006), }, | ||
48 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0811), }, | ||
49 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829), }, | ||
50 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xe006), }, | ||
51 | {} | ||
52 | }; | ||
53 | |||
54 | static inline bool is_ci_hdrc_pci(struct pci_dev *pdev) | ||
55 | { | ||
56 | return !!pci_match_id(ci_hdrc_pci_id_table, pdev); | ||
57 | } | ||
58 | |||
45 | /* | 59 | /* |
46 | * 0x84 is the offset of in/out threshold register, | 60 | * 0x84 is the offset of in/out threshold register, |
47 | * and it is the same offset as the register of 'hostpc'. | 61 | * and it is the same offset as the register of 'hostpc'. |
@@ -352,6 +366,13 @@ static const struct ehci_driver_overrides pci_overrides __initconst = { | |||
352 | 366 | ||
353 | /*-------------------------------------------------------------------------*/ | 367 | /*-------------------------------------------------------------------------*/ |
354 | 368 | ||
369 | static int ehci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | ||
370 | { | ||
371 | if (is_ci_hdrc_pci(pdev)) | ||
372 | return -ENODEV; | ||
373 | return usb_hcd_pci_probe(pdev, id); | ||
374 | } | ||
375 | |||
355 | /* PCI driver selection metadata; PCI hotplugging uses this */ | 376 | /* PCI driver selection metadata; PCI hotplugging uses this */ |
356 | static const struct pci_device_id pci_ids [] = { { | 377 | static const struct pci_device_id pci_ids [] = { { |
357 | /* handle any USB 2.0 EHCI controller */ | 378 | /* handle any USB 2.0 EHCI controller */ |
@@ -370,7 +391,7 @@ static struct pci_driver ehci_pci_driver = { | |||
370 | .name = (char *) hcd_name, | 391 | .name = (char *) hcd_name, |
371 | .id_table = pci_ids, | 392 | .id_table = pci_ids, |
372 | 393 | ||
373 | .probe = usb_hcd_pci_probe, | 394 | .probe = ehci_pci_probe, |
374 | .remove = usb_hcd_pci_remove, | 395 | .remove = usb_hcd_pci_remove, |
375 | .shutdown = usb_hcd_pci_shutdown, | 396 | .shutdown = usb_hcd_pci_shutdown, |
376 | 397 | ||