lkml.org 
[lkml]   [2011]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] xhci: Add reset on resume quirk for asrock p67 host
    The asrock p67 xhci controller completely dies on resume,
    add a quirk for this, to bring the host back online after a suspend.

    This should be backported to stable kernels as far back as 2.6.34.

    Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
    Cc: stable@kernel.org
    ---
    I have no idea if the vendor name is correct. lspci didn't list it.

    diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
    index 17541d0..cb16de2 100644
    --- a/drivers/usb/host/xhci-pci.c
    +++ b/drivers/usb/host/xhci-pci.c
    @@ -29,6 +29,9 @@
    #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73
    #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000

    +#define PCI_VENDOR_ID_ETRON 0x1b6f
    +#define PCI_DEVICE_ID_ASROCK_P67 0x7023
    +
    static const char hcd_name[] = "xhci_hcd";

    /* called after powerup, by probe or system-pm "wakeup" */
    @@ -134,6 +137,11 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
    xhci->quirks |= XHCI_EP_LIMIT_QUIRK;
    xhci->limit_active_eps = 64;
    }
    + if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
    + pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
    + xhci->quirks |= XHCI_RESET_ON_RESUME;
    + xhci_dbg(xhci, "QUIRK: Resetting on resume\n");
    + }

    /* Make sure the HC is halted. */
    retval = xhci_halt(xhci);
    diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
    index 06e7023..42fd032 100644
    --- a/drivers/usb/host/xhci.c
    +++ b/drivers/usb/host/xhci.c
    @@ -759,6 +759,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
    msleep(100);

    spin_lock_irq(&xhci->lock);
    + if (xhci->quirks & XHCI_RESET_ON_RESUME)
    + hibernated = 0;

    if (!hibernated) {
    /* step 1: restore register */
    diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
    index 7d1ea3b..b769a75 100644
    --- a/drivers/usb/host/xhci.h
    +++ b/drivers/usb/host/xhci.h
    @@ -1308,6 +1308,7 @@ struct xhci_hcd {
    */
    #define XHCI_EP_LIMIT_QUIRK (1 << 5)
    #define XHCI_BROKEN_MSI (1 << 6)
    +#define XHCI_RESET_ON_RESUME (1 << 7)
    unsigned int num_active_eps;
    unsigned int limit_active_eps;
    /* There are two roothubs to keep track of bus suspend info for */



    \
     
     \ /
      Last update: 2011-06-15 22:31    [W:0.034 / U:30.284 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site