* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include <linux/dmi.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/module.h>
{
struct pci_dev *pdev = to_pci_dev(dev);
+ /* TODO(jwerner): fix real problem and remove this */
+ static struct dmi_system_id dmi_stout[] = {
+ {
+ .ident = "ChromeOS Stout",
+ .matches = {DMI_MATCH(DMI_PRODUCT_NAME, "Stout")}
+ }, { }
+ };
+ if (dmi_check_system(dmi_stout)) {
+ xhci_warn(xhci, "Stout detected, using reset-on-resume hack\n");
+ xhci->quirks |= XHCI_RESET_ON_RESUME;
+ }
+
/* Look for vendor-specific quirks */
if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC &&
pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK) {
}
xhci_clear_command_ring(xhci);
+ if (xhci->quirks & XHCI_RESET_ON_RESUME) {
+ xhci_info(xhci, "Will reset on resume, not saving xHC regs.\n");
+ spin_unlock_irq(&xhci->lock);
+ xhci_msix_sync_irqs(xhci);
+ return rc;
+ }
+
/* step 3: save registers */
xhci_save_registers(xhci);