>> The contract for bus_suspend() is that it will suspend all ports not >> yet suspended, keep track of those ports and then only resume those in >> bus_resume() (compare, for example, how XHCI keeps track of that with >> xhci_bus_state.bus_suspended in xhci_bus_suspend/resume()). So you >> need something here to remember whether this function suspended the >> port or whether it had already been suspended, and then only resume >> the port in bus_resume() in the former case. > > In fact, the dwc2 controller only support one port, so the hprt0 > is the only one port we need to care. Yes, I know, but that one port still needs to play by the rules the USB core expects. All I'm saying is: if the port was already suspended during bus_suspend(), then the next bus_resume() should not resume it. The rest looks good to me now. But in order to get it really working, I think we'll still need the actual driver.pm suspend/resume methods, at least for the HCD_FLAG_HW_ACCESSIBLE and the usb_root_hub_lost_power() handling (probably better in a separate patch). -- 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