EHCI: keep track of ports being resumed and indicate in hub_status_data
This patch (as1537) adds a bit-array to ehci-hcd for keeping track of which ports are undergoing a resume transition. If any of the bits are set when ehci_hub_status_data() is called, the routine will return a nonzero value even if no ports have any status changes pending. This will allow usbcore to handle races between root-hub suspend and port wakeup. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> CC: Sarah Sharp <sarah.a.sharp@linux.intel.com> CC: Chen Peter-B29397 <B29397@freescale.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
879d38e6bc
commit
a448e4dc25
@@ -224,6 +224,7 @@ static int tegra_ehci_hub_control(
|
||||
temp &= ~(PORT_RWC_BITS | PORT_WAKE_BITS);
|
||||
/* start resume signalling */
|
||||
ehci_writel(ehci, temp | PORT_RESUME, status_reg);
|
||||
set_bit(wIndex-1, &ehci->resuming_ports);
|
||||
|
||||
spin_unlock_irqrestore(&ehci->lock, flags);
|
||||
msleep(20);
|
||||
@@ -236,6 +237,7 @@ static int tegra_ehci_hub_control(
|
||||
pr_err("%s: timeout waiting for SUSPEND\n", __func__);
|
||||
|
||||
ehci->reset_done[wIndex-1] = 0;
|
||||
clear_bit(wIndex-1, &ehci->resuming_ports);
|
||||
|
||||
tegra->port_resuming = 1;
|
||||
goto done;
|
||||
|
Reference in New Issue
Block a user