Dave: Pavel is obviously right that the clean solution is to add a pm_message_t argument to resume(). But there might be an easier approach that would help this particular case. You changed things so that for USB, PM_EVENT_FREEZE works like a PM_EVENT_SUSPEND. But once PM_EVENT_RUNTIME is defined and used by the /sys/.../power/state attribute, why not do the opposite? Make USB PM_EVENT_SUSPEND work like a PM_EVENT_FREEZE -- don't actually suspend any devices other than the root hub. That way there would be no difficulty about devices being in the wrong state when the resumed kernel tries to wake them up. And it would reduce the time required for the sleep transition. Actual power consumption would not be an issue; when the root hub suspends, all the devices below it will automatically suspend as well. Alan Stern