diff options
Diffstat (limited to 'drivers/usb/host/xhci-pci.c')
-rw-r--r-- | drivers/usb/host/xhci-pci.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index 592fe7e623f7..06595ec27bb7 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -24,6 +24,10 @@ | |||
24 | 24 | ||
25 | #include "xhci.h" | 25 | #include "xhci.h" |
26 | 26 | ||
27 | /* Device for a quirk */ | ||
28 | #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 | ||
29 | #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 | ||
30 | |||
27 | static const char hcd_name[] = "xhci_hcd"; | 31 | static const char hcd_name[] = "xhci_hcd"; |
28 | 32 | ||
29 | /* called after powerup, by probe or system-pm "wakeup" */ | 33 | /* called after powerup, by probe or system-pm "wakeup" */ |
@@ -59,9 +63,20 @@ static int xhci_pci_setup(struct usb_hcd *hcd) | |||
59 | xhci->hcs_params1 = xhci_readl(xhci, &xhci->cap_regs->hcs_params1); | 63 | xhci->hcs_params1 = xhci_readl(xhci, &xhci->cap_regs->hcs_params1); |
60 | xhci->hcs_params2 = xhci_readl(xhci, &xhci->cap_regs->hcs_params2); | 64 | xhci->hcs_params2 = xhci_readl(xhci, &xhci->cap_regs->hcs_params2); |
61 | xhci->hcs_params3 = xhci_readl(xhci, &xhci->cap_regs->hcs_params3); | 65 | xhci->hcs_params3 = xhci_readl(xhci, &xhci->cap_regs->hcs_params3); |
66 | xhci->hcc_params = xhci_readl(xhci, &xhci->cap_regs->hc_capbase); | ||
67 | xhci->hci_version = HC_VERSION(xhci->hcc_params); | ||
62 | xhci->hcc_params = xhci_readl(xhci, &xhci->cap_regs->hcc_params); | 68 | xhci->hcc_params = xhci_readl(xhci, &xhci->cap_regs->hcc_params); |
63 | xhci_print_registers(xhci); | 69 | xhci_print_registers(xhci); |
64 | 70 | ||
71 | /* Look for vendor-specific quirks */ | ||
72 | if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC && | ||
73 | pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK && | ||
74 | pdev->revision == 0x0) { | ||
75 | xhci->quirks |= XHCI_RESET_EP_QUIRK; | ||
76 | xhci_dbg(xhci, "QUIRK: Fresco Logic xHC needs configure" | ||
77 | " endpoint cmd after reset endpoint\n"); | ||
78 | } | ||
79 | |||
65 | /* Make sure the HC is halted. */ | 80 | /* Make sure the HC is halted. */ |
66 | retval = xhci_halt(xhci); | 81 | retval = xhci_halt(xhci); |
67 | if (retval) | 82 | if (retval) |
@@ -121,6 +136,7 @@ static const struct hc_driver xhci_pci_hc_driver = { | |||
121 | .check_bandwidth = xhci_check_bandwidth, | 136 | .check_bandwidth = xhci_check_bandwidth, |
122 | .reset_bandwidth = xhci_reset_bandwidth, | 137 | .reset_bandwidth = xhci_reset_bandwidth, |
123 | .address_device = xhci_address_device, | 138 | .address_device = xhci_address_device, |
139 | .update_hub_device = xhci_update_hub_device, | ||
124 | 140 | ||
125 | /* | 141 | /* |
126 | * scheduling support | 142 | * scheduling support |