xHCI: reset-on-resume quirk for NEC uPD720200
authorAndiry Xu <andiry.xu@amd.com>
Thu, 17 Nov 2011 05:07:44 +0000 (13:07 +0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 28 Nov 2011 18:22:26 +0000 (10:22 -0800)
Julian Sikorski reports NEC uPD720200 does not work stable after suspend
and resume. Re-initialize the host in xhci_resume().

This should be backported to stable kernels as old as 2.6.37.  The
kernel will need to include
commit c877b3b2ad5cb9d4fe523c5496185cc328ff3ae9
"xhci: Add reset on resume quirk for asrock p67 host"
for this patch to work.

Signed-off-by: Andiry Xu <andiry.xu@amd.com>
Reported-by: Julian Sikorski <belegdol@gmail.com>
Tested-by: Julian Sikorski <belegdol@gmail.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci-pci.c

index ef98b38..d2a7332 100644 (file)
@@ -33,6 +33,8 @@
 #define PCI_VENDOR_ID_ETRON            0x1b6f
 #define PCI_DEVICE_ID_ASROCK_P67       0x7023
 
+#define PCI_DEVICE_ID_NEC_uPD720200    0x0194
+
 static const char hcd_name[] = "xhci_hcd";
 
 /* called after powerup, by probe or system-pm "wakeup" */
@@ -74,8 +76,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
                                pdev->revision);
        }
 
-       if (pdev->vendor == PCI_VENDOR_ID_NEC)
+       if (pdev->vendor == PCI_VENDOR_ID_NEC) {
                xhci->quirks |= XHCI_NEC_HOST;
+               if (pdev->device == PCI_DEVICE_ID_NEC_uPD720200)
+                       xhci->quirks |= XHCI_RESET_ON_RESUME;
+       }
 
        if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version == 0x96)
                xhci->quirks |= XHCI_AMD_0x96_HOST;