diff options
| -rw-r--r-- | drivers/usb/chipidea/ci_hdrc_pci.c | 3 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-pci.c | 16 |
2 files changed, 13 insertions, 6 deletions
diff --git a/drivers/usb/chipidea/ci_hdrc_pci.c b/drivers/usb/chipidea/ci_hdrc_pci.c index 241ae3444fde..4df669437211 100644 --- a/drivers/usb/chipidea/ci_hdrc_pci.c +++ b/drivers/usb/chipidea/ci_hdrc_pci.c | |||
| @@ -111,6 +111,9 @@ static void ci_hdrc_pci_remove(struct pci_dev *pdev) | |||
| 111 | * PCI device structure | 111 | * PCI device structure |
| 112 | * | 112 | * |
| 113 | * Check "pci.h" for details | 113 | * Check "pci.h" for details |
| 114 | * | ||
| 115 | * Note: ehci-pci driver may try to probe the device first. You have to add an | ||
| 116 | * ID to the bypass_pci_id_table in ehci-pci driver to prevent this. | ||
| 114 | */ | 117 | */ |
| 115 | static const struct pci_device_id ci_hdrc_pci_id_table[] = { | 118 | static const struct pci_device_id ci_hdrc_pci_id_table[] = { |
| 116 | { | 119 | { |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 965202138161..2a5d2fd76040 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -42,18 +42,22 @@ 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[] = { | 45 | /* |
| 46 | { PCI_DEVICE(0x153F, 0x1004), }, | 46 | * This is the list of PCI IDs for the devices that have EHCI USB class and |
| 47 | { PCI_DEVICE(0x153F, 0x1006), }, | 47 | * specific drivers for that. One of the example is a ChipIdea device installed |
| 48 | * on some Intel MID platforms. | ||
| 49 | */ | ||
| 50 | static const struct pci_device_id bypass_pci_id_table[] = { | ||
| 51 | /* ChipIdea on Intel MID platform */ | ||
| 48 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0811), }, | 52 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0811), }, |
| 49 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829), }, | 53 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0829), }, |
| 50 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xe006), }, | 54 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xe006), }, |
| 51 | {} | 55 | {} |
| 52 | }; | 56 | }; |
| 53 | 57 | ||
| 54 | static inline bool is_ci_hdrc_pci(struct pci_dev *pdev) | 58 | static inline bool is_bypassed_id(struct pci_dev *pdev) |
| 55 | { | 59 | { |
| 56 | return !!pci_match_id(ci_hdrc_pci_id_table, pdev); | 60 | return !!pci_match_id(bypass_pci_id_table, pdev); |
| 57 | } | 61 | } |
| 58 | 62 | ||
| 59 | /* | 63 | /* |
| @@ -368,7 +372,7 @@ static const struct ehci_driver_overrides pci_overrides __initconst = { | |||
| 368 | 372 | ||
| 369 | static int ehci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | 373 | static int ehci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) |
| 370 | { | 374 | { |
| 371 | if (is_ci_hdrc_pci(pdev)) | 375 | if (is_bypassed_id(pdev)) |
| 372 | return -ENODEV; | 376 | return -ENODEV; |
| 373 | return usb_hcd_pci_probe(pdev, id); | 377 | return usb_hcd_pci_probe(pdev, id); |
| 374 | } | 378 | } |
