Hi,
I am using an ASUS T100TA with dock attached. I installed Ubuntu Linux
on eMMC and customized the kernel.
I started from "echo mem > /sys/power/state". Kernel starts its
processes to put the system into suspend mode. Before kernel executes to
xhci_bus_suspend(), xHC USB 2 root hub port (where keyboard on dock
connected) reports a port resume event. In response of this event, xHCI
roothub driver sets the corresponding bit in bus_state->resuming_ports
and intent to clear it when hcd->rh_timer expires 20ms later.
handle_port_status():
xhci_dbg(xhci, "resume HS port %d\n", port_id);
bus_state->resume_done[faked_port_index] =
jiffies +
msecs_to_jiffies(20);
set_bit(faked_port_index,
&bus_state->resuming_ports);
mod_timer(&hcd->rh_timer,
bus_state->resume_done[faked_port_index]);
When system executes to xhci_bus_suspend(), it checks
bus_state->resuming_ports. It stops here since bus_state->resuming_ports
has been set.
xhci_bus_suspend():
if (hcd->self.root_hub->do_remote_wakeup) {
if (bus_state->resuming_ports) {
spin_unlock_irqrestore(&xhci->lock, flags);
xhci_dbg(xhci, "%s: suspend failed because "
"a port is resuming\n",
__func__);
return -EBUSY;
}
}
This failure can always be reproduced when I use the keyboard on T100TA
dock. But it doesn't show up with an external USB keyboard. Does anybody
have any hints for me?
Regards,
-baolu
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html