diff options
author | Kyle McMartin <kyle@redhat.com> | 2011-03-18 13:15:43 -0400 |
---|---|---|
committer | Kyle McMartin <kyle@redhat.com> | 2011-03-18 13:15:43 -0400 |
commit | 3f74cb629de607844ea60d7371c60ac2a6b8d36b (patch) | |
tree | c3fb276ff9f4bf209ac0b8777ee0121b9ee36fed /linux-2.6-ehci-check-port-status.patch | |
parent | a725c00ed421e4eea7d02f5f2aea99f8f7de29df (diff) | |
download | kernel-3f74cb629de607844ea60d7371c60ac2a6b8d36b.tar.gz kernel-3f74cb629de607844ea60d7371c60ac2a6b8d36b.tar.xz kernel-3f74cb629de607844ea60d7371c60ac2a6b8d36b.zip |
update to 2.6.38-git6
Diffstat (limited to 'linux-2.6-ehci-check-port-status.patch')
-rw-r--r-- | linux-2.6-ehci-check-port-status.patch | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/linux-2.6-ehci-check-port-status.patch b/linux-2.6-ehci-check-port-status.patch deleted file mode 100644 index f3c5faf70..000000000 --- a/linux-2.6-ehci-check-port-status.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit e17a07a9e0b62d5a5f0a5683ecbabad3aa95a4d5 -Author: Matthew Garrett <mjg@redhat.com> -Date: Tue Jan 11 12:19:40 2011 -0500 - - ehci: Check individual port status registers on resume - - If a device plug/unplug is detected on an ATI SB700 USB controller in D3, - it appears to set the port status register but not the controller status - register. As a result we'll fail to detect the plug event. Check the port - status register on resume as well in order to catch this case. - - Signed-off-by: Matthew Garrett <mjg@redhat.com> - -diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c -index 796ea0c..d9c0748 100644 ---- a/drivers/usb/host/ehci-hub.c -+++ b/drivers/usb/host/ehci-hub.c -@@ -106,6 +106,27 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci) - ehci->owned_ports = 0; - } - -+static int ehci_port_change(struct ehci_hcd *ehci) -+{ -+ int i = HCS_N_PORTS(ehci->hcs_params); -+ -+ /* First check if the controller indicates a change event */ -+ -+ if (ehci_readl(ehci, &ehci->regs->status) & STS_PCD) -+ return 1; -+ -+ /* -+ * Not all controllers appear to update this while going from D3 to D0, -+ * so check the individual port status registers as well -+ */ -+ -+ while (i--) -+ if (ehci_readl(ehci, &ehci->regs->port_status[i]) & PORT_CSC) -+ return 1; -+ -+ return 0; -+} -+ - static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, - bool suspending, bool do_wakeup) - { -@@ -168,7 +189,7 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci, - } - - /* Does the root hub have a port wakeup pending? */ -- if (!suspending && (ehci_readl(ehci, &ehci->regs->status) & STS_PCD)) -+ if (!suspending && ehci_port_change(ehci)) - usb_hcd_resume_root_hub(ehci_to_hcd(ehci)); - - spin_unlock_irqrestore(&ehci->lock, flags); |