|
@@ -329,7 +329,7 @@ static void xhci_cleanup_msix(struct xhci_hcd *xhci)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-static void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
|
|
|
+static void __maybe_unused xhci_msix_sync_irqs(struct xhci_hcd *xhci)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -1181,9 +1181,6 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
|
|
|
}
|
|
|
|
|
|
xhci = hcd_to_xhci(hcd);
|
|
|
- if (xhci->xhc_state & XHCI_STATE_HALTED)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
if (check_virt_dev) {
|
|
|
if (!udev->slot_id || !xhci->devs[udev->slot_id]) {
|
|
|
printk(KERN_DEBUG "xHCI %s called with unaddressed "
|
|
@@ -1199,6 +1196,9 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (xhci->xhc_state & XHCI_STATE_HALTED)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -3898,7 +3898,7 @@ int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1)
|
|
|
* Issue an Evaluate Context command to change the Maximum Exit Latency in the
|
|
|
* slot context. If that succeeds, store the new MEL in the xhci_virt_device.
|
|
|
*/
|
|
|
-static int xhci_change_max_exit_latency(struct xhci_hcd *xhci,
|
|
|
+static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
|
|
|
struct usb_device *udev, u16 max_exit_latency)
|
|
|
{
|
|
|
struct xhci_virt_device *virt_dev;
|
|
@@ -4892,6 +4892,13 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
|
|
|
|
|
|
get_quirks(dev, xhci);
|
|
|
|
|
|
+ /* In xhci controllers which follow xhci 1.0 spec gives a spurious
|
|
|
+ * success event after a short transfer. This quirk will ignore such
|
|
|
+ * spurious event.
|
|
|
+ */
|
|
|
+ if (xhci->hci_version > 0x96)
|
|
|
+ xhci->quirks |= XHCI_SPURIOUS_SUCCESS;
|
|
|
+
|
|
|
/* Make sure the HC is halted. */
|
|
|
retval = xhci_halt(xhci);
|
|
|
if (retval)
|