* We must ignore the FREEZE vs SUSPEND distinction here, because
         * otherwise the swsusp will save (and restore) garbage state.
         */
-       if (hcd->self.root_hub->dev.power.power_state.event == PM_EVENT_ON)
+       if (!(hcd->state == HC_STATE_SUSPENDED ||
+                       hcd->state == HC_STATE_HALT))
                return -EBUSY;
 
        if (hcd->driver->suspend) {
 
        US_DEBUGP("%s\n", __FUNCTION__);
        if (us->suspend_resume_hook)
                (us->suspend_resume_hook)(us, US_SUSPEND);
-       iface->dev.power.power_state.event = message.event;
 
        /* When runtime PM is working, we'll set a flag to indicate
         * whether we should autoresume when a SCSI request arrives. */
        US_DEBUGP("%s\n", __FUNCTION__);
        if (us->suspend_resume_hook)
                (us->suspend_resume_hook)(us, US_RESUME);
-       iface->dev.power.power_state.event = PM_EVENT_ON;
 
        mutex_unlock(&us->dev_mutex);
        return 0;