* Bin Liu <b-liu@xxxxxx> [160518 10:37]: > I think I found the problem. Before having the offending patch, > musb_gadget_pullup() got called by musb_gadget_start(), then pm_suspend > immediately (~2us) happens, and musb_save_context() backs up DEVCTL register > which has session bit set. > > But with the offending patch, pm_suspend happends much later (~200ms) > after musb_gadget_pullup() is called, so by this time when > musb_save_context() is called, session bit is already cleared by the > controller, so the backup of DEVCTL register does not have session bit > set. Later when pm_resume, musb_restore_context() cleared the seesion > bit. OK sounds like that's expected as that's the current autosuspend timeout. See for example e6244deed843 ("i2c: omap: Fix PM regression with deferred probe for pm_runtime_reinit") for references why pm_runtime_put_sync_suspend() needs to be used if autosuspend has been set. So you doing pm_runtime_put_sync_suspend() probably fixes your issue. (Sorry I think I mentioned just pm_runtime_put_sync() earlier..) Regards, Tony -- 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